自動生成四則運算

2022-09-10 03:45:08 字數 4045 閱讀 8238

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...