import random
list1=
#a=int(input('計算數字最大是:'))
sym=['+','-','×','÷']
def szys():
f=random.randint(0,3)
n1=random.randint(1,10)
n2=random.randint(1,10)
n1,n2=max(n1,n2),min(n1,n2)
result=0
if f==0: #加法
result=n1+n2
elif f==1: #減法
result=n1-n2
elif f==2: #乘法
result=n1*n2
elif f==3: #除法
b=n1//n2
c=n1%n2
result=str(b)+'...'+str(c)
return '='.format(n1,sym[f],n2),str(result)
t=int(input('題目數量:'))
tt=0
while ttlist1+=szys()
list1+='\r'
tt+=1
f1=open('題目+答案','w+')
有一缺點:題目和答案沒有分開。因為區域性引數和全域性引數的問題,只能將區域性引數一次性全部返回,目前未能解決,較為遺憾。
實現過程中產生的問題和解決在本週總結中會提及。
抄的:import argparse
import random
import fractions
import operator
#1.命令控制模組
def get_parameter():#命令列控制模組
parser = argparse.argumentparser()
parser.add_argument('-n', help='設定題目數量',type=int)
parser.add_argument('-r', help='設定數值範圍',type=int)
return parser.parse_args()
#2.建立乙個類用以生成隨機數與運算子
class com(object):
def __init__(self, r):#初始化
self.r=r
def get_arithmeticl(self):#獲得隨機數字與符號
symbol=
numerical=
syb=0
n=1m=0
i=random.randint(1, 3)
for x in range(i):
sy=random.choice(['+','-','×','÷'])
if sy=='+'or sy=='-':
syb +=10**(i-x-1)
else :
syb += 2 * (10 ** (i - x - 1))
if self.r < 10:
n = int(10 / self.r)
if n==1:
while m <= i:
m+=1
else:
while m <= i:
nu = fractions(random.randint(1, self.r * n), random.randint(1, self.r * n))
if nu<=self.r:
m += 1
return symbol,syb,numerical,i
#3.識別運算子和分數的轉換
def get_calculate(a,b,c):#四則運算
if c=='+':
results=a+b
elif c=='-':
results=a-b
elif c=='×':
results=a*b
else:results=a/b
return results
def get_conversion(fraction):#假分數轉化真分數
if fraction.numerator%fraction.denominator==0:
return '%d'%(fraction.numerator/fraction.denominator)
elif fraction.numerator>fraction.denominator:
a=int(fraction.numerator/fraction.denominator)
b, c = fraction.numerator - a * fraction.denominator, fraction.denominator
return '%d%s%d%s%d' % (a,'』',b,'/',c)
else:
b, c = fraction.numerator, fraction.denominator
return '%d%s%d' % (b,'/',c)
#4.生成算式列表和查重
def get_formula(n,r):#生成題目和答案列表
exercises,answers,exercises1,exercises2=,,,
x=1while xsymbol, syb, numerical,i = com(r).get_arithmeticl()
results = numerical[0]
judge = true
for y in range(i):
calculate=get_calculate(results,numerical[y+1],symbol[y])
if calculate>=0:#判斷算式是否合法
answer=calculate
else:
judge=false
break
if judge:#查重
try:
num=answers.index(answer)#判斷重複答案的索引
if operator.eq(exercises1[num],symbol) and operator.eq(exercises2[num],numerical):
pass
except valueerror as e:#可以寫入
x+=1
else:pass
return exercises,answers
def text_s**e(filename, data):#filename為寫入檔案的路徑,data為要寫入資料列表.
file = open(filename,'a')
file.seek(0)
file.truncate() # 清空檔案
for x in data:
x='%s\n'%(x)
file.write(x)
file.close()
print('%s檔案儲存成功'%filename)
#6.main函式
def main():
args = get_parameter()
if args.n:
n = args.n
if args.r:
r = args.r
exercises, answers = get_formula(n, r)
for x in range(n):
answers[x] = '%d. %s' % (x + 1, get_conversion(answers[x]))
print('本次共生成題目%d道\n題目數值範圍為0-%d' % (n, r))
text_s**e('exercises.txt', exercises)
text_s**e('answers.txt', answers)
但是現在還不知道裡面的formula是什麼。在學習這個演算法中去學了有關argparse命令列控制模組
自動生成四則運算
軟體工程導論 作業要求 homework 11376 這個作業的目標 生成乙個自動生成四則運算的程式 學號3190704110 include int right 0 int wrong 0 void add else void minu else void mul else void di els...
四則運算自動生成
1 能夠自動生成四則運算練習題 2 可以定製題目數量 3 使用者可以選擇運算子 4 使用者設定最大數 如十以內 百以內等 5 使用者選擇是否有括號 是否有小數 6 使用者選擇輸出方式 codeblocks 姓名班級 位址 牛斌帥1605班 房旭1604班 在程式設計過程中我們也遇到了種種問題並進行解...
自動生成四則運算題目
主要功能 用於計算小學四則運算。設計思想 乙個能處理四則運算的程式,實現語言c 可以處理實數。源 include stdafx.h include calc win.h include calc windlg.h ifdef debug define new debug new endif afxe...