設計乙個不重複的100以內的無括號非分數四則運算生成器,符合加減乘除四則運算可以選擇自動生成題目數量、負數輸出、非整數輸出、限制大小、運算子的個數(>=1, 記為:num_opt)。
題目避免重複:隨機產生 num_opt+1 個數,通過列表儲存產生的數,使用題庫字典判斷是否重複,如果與前面的題目不重複就繼續操作,否則 continue
整數輸出:對除法運算,先進行模運算判斷是否有餘數,如果有餘數則重新生成
四則運算結果計算:使用兩個棧進行實現,先消除算式中的乘除法,再通過兩個棧中的對應關係進行計算
from random import randintoperators = ['+', '-', '*', '/']
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 右括號...