python實現簡易四則運算

2022-08-11 12:45:19 字數 3688 閱讀 7054

設計乙個不重複的100以內的無括號非分數四則運算生成器,符合加減乘除四則運算可以選擇自動生成題目數量、負數輸出、非整數輸出、限制大小、運算子的個數(>=1, 記為:num_opt)。

題目避免重複:隨機產生 num_opt+1 個數,通過列表儲存產生的數,使用題庫字典判斷是否重複,如果與前面的題目不重複就繼續操作,否則 continue

整數輸出:對除法運算,先進行模運算判斷是否有餘數,如果有餘數則重新生成

四則運算結果計算:使用兩個棧進行實現,先消除算式中的乘除法,再通過兩個棧中的對應關係進行計算

from random import randint

operators = ['+', '-', '*', '/']

ti_kus = # 防止重複

questions =

answers =

def generate_express(nums_opt):

if nums_opt <= 0:

return 0

ti_ku =

a = randint(1, 100)

express = [a]

for loc in range(nums_opt):

num = randint(1, 100)

opt = operators[randint(0, 3)]

if ti_ku in ti_kus:

return 0

else:

return express

def cal(number1, number2, operator, need_integer):

if operator == '+':

return number1 + number2

if operator == '-':

return number1 - number2

if operator == '*':

return number1 * number2

if operator == '/':

if need_integer:

if number1 % number2:

return none

else:

return int(number1 / number2)

return number1 / number2

def get_res(expression, need_integer):

opt_stack = list()

num_stack = list()

index = 0

while index < len(expression):

element = expression[index]

if element in operators:

if element == '+' or element == '-':

else: # 消除乘除法

a = num_stack.pop()

b = expression[index + 1]

res = cal(a, b, element, need_integer)

if res is none:

return none

index += 2

continue

else:

index += 1

index_num = 0

index_opt = 0

while index_opt < len(opt_stack) and index_num < len(num_stack): # 乙個運算子對應兩個數

res = cal(num_stack[0], num_stack[index_num + 1], opt_stack[index_opt], need_integer)

num_stack[0] = res

index_num += 1

index_opt += 1

return num_stack[0]

def run(nums_iter, nums_opt, max_value=none, need_integer=true, need_negative_num=false):

count = 0

while count < nums_iter:

express = generate_express(nums_opt)

if express == 0:

continue

answer = get_res(express, need_integer)

if answer is none:

continue

if answer < 0 and not need_negative_num:

continue

if max_value is not none:

if answer > max_value:

continue

expression = ''

for index in range(len(express)):

if express[index] not in operators:

expression += str(express[index])

else:

expression += express[index]

count += 1

if __name__ == '__main__':

# run(200, 1)

run(300, 2, max_value=100)

# run(200, 3, max_value=1000)

# run(200, 2, max_value=1000, need_integer=false)

# run(100, 2, max_value=100, need_negative_num=true)

# 僅輸出問題

# for i in range(len(questions)):

# print(questions[i])

# 輸出問題與答案

簡易四則運算

本次作業要求來自 一 題目要求 任何程式語言都可以,命令列程式接受乙個數字輸入,然後輸出相應數目的四則運算題目和答案。例如輸入數字是 30,那就輸出 30 道題目和答案。表示式子必須至少有兩個運算子,運算數字是在 100 之內的正整數,答案不能是負數。1 要求能出和真分數 二分之一,十二分之五,等 ...

python四則運算程式 四則運算(Python)

四則運算程式 一 資訊 二.題目要求 寫乙個能自動生成小學四則運算題目的程式,然後在此基礎上擴充套件 除了整數以外,還要支援真分數的四則運算,例如 1 6 1 8 7 24 程式要求能處理使用者的輸入,判斷對錯,累積分數 程式支援可以由使用者自行選擇加 減 乘 除運算 三 import random...

實現四則運算

總結最近在看資料結構,遇到第乙個實際棧的應用,記錄 將平時的四則運算表示式又稱為中綴表示式轉化為字尾表示式。遇數字輸出,遇符號進棧,符號優先順序低於棧當前符號則輸出,輸出直到同等優先順序符號。例 9 3 1 2 輸出 棧 9 in 9 in 9 3 9 3 in 9 3 1 9 3 1 in 右括號...