四則運算小題目升級版(python)
阿新 • • 發佈:2019-04-07
radi mda rom question n) 數量 nbsp ret 使用
https://github.com/shiwangqiu/Python/blob/master/calculation_update.py
上一個版本是不能帶括號運算的,這次進行了小小的更新,支持括號運算。
import random from fractions import Fraction operation = [‘+‘, ‘-‘, ‘*‘, ‘/‘] #四則運算的符號 global f question = [] result = [] answer = [] def result_integer(f, m): try: n = eval(f) n= Fraction(‘{}‘.format(n)).limit_denominator() # 把表達式的結果轉成分數 if n > 0: # 判斷結果是否大於0,否則重新產生表達式 #print(‘題目:‘) question.append(f) result.append(n) #print(‘請輸出答案:‘) #x = Fraction(‘{}‘.format(eval(input()))).limit_denominator() else: integer() except: integer(m) def func_integer(number): f = ‘‘ ch = [] rand = random.randint(0, 1) #選擇內嵌或外嵌括號 if number != 1: #避免一個表達式也產生括號 if rand == 0: ch.append(‘(‘) op = operation[random.randint(0, 1)] ch.append(random.randint(1, 10)) ch.append(op) ch.append(random.randint(1, 10)) ch.append(‘)‘) else: op = operation[random.randint(0, 3)] if op == ‘/‘: a = random.randint(1, 10) ch.append(a) ch.append(op) ch.append(random.randint(a, 10)) else: ch.append(random.randint(1, 10)) ch.append(op) ch.append(random.randint(1, 10)) else: op = operation[random.randint(0, 3)] if op == ‘/‘: a = random.randint(1, 10) ch.append(a) ch.append(op) ch.append(random.randint(a, 10)) else: ch.append(random.randint(1, 10)) ch.append(op) ch.append(random.randint(1, 10)) for i in ch: #把產生表達式當成一個整體 f += str(i) return f def integer(n): ch = [] #存儲表達式 number = random.randint(1, 4) #隨機產生表達式的數量 for i in range(number): rand = random.randint(0, 1) #隨機產生0和1 判斷是否使用括號 a = func_integer(number) #調用表達式產生函數,產生表達式 if rand == 0: op = operation[random.randint(2,3)] #產生*,/來連接有括號的表達式,避免產生+,— rand = random.randint(0, 1) #隨機產生0和1 判斷是否使用內嵌括號或外嵌括號 if i != number - 1: #避免開始和結尾用無意義的括號 if rand == 0: ch.append(‘(‘) ch.append(a) ch.append(op) ch.append(random.randint(1,10)) ch.append(‘)‘) ch.append(operation[random.randint(0, 3)]) else: ch.append(a) ch.append(operation[random.randint(0, 3)]) else: ch.append(a) ch.append(operation[random.randint(0, 3)]) else: ch.append(a) ch.append(operation[random.randint(0, 3)]) f = ‘‘ for k,i in enumerate(ch): #把列表中的所有值用f一個個連起來 if k != len(ch)-1: f += str(i) result_integer(f, n) #調用輸出函數 if __name__ == ‘__main__‘: print(‘輸入你想做幾道題目‘) n = int(input()) for i in range(n): integer(n) print(‘題目:‘) for k, i in enumerate(question): print(k + 1,‘:‘,i,‘=‘) print(‘請輸入你的答案:‘) for i in range(n): print(‘第{}題:‘.format(i + 1)) x = Fraction(‘{}‘.format(eval(input()))).limit_denominator() if x == result[i]: print(‘{}:√‘.format(i + 1)) else: print(‘{}:ב.format(i + 1)) print(‘正確的答案為:‘,result[i])
效能分析:
四則運算小題目升級版(python)