仕事は、この機能の検索を必要とする、以下は私がこの割り当てを試み、解決するためになされたものである:
図、ファイルExercises.txtのファイルはタイトルで生成されますが、Answers.txtは答えで生成されました。Grade.txtは、最終的な答えの後に検索で発生しました:
前記コード生成部は、次の対象となります。
そのコードは次のとおりです。
#小学四则运算题目问题
#需要在生成题目的同时生成答案
import random
doc1 = open('Exercises.txt','w') #打开Exercises.txt文件编写
doc2 = open('Answers.txt','w') #同上
#随机生成四种运算(加减乘除)并生成对应答案
op = ['+','-','x','÷'] #题目生成语言列表
num1 = num2 = 0
for i in range(100): #题目循环
num = i + 1
num1 =random.randint(0,99)
num2 =random.randint(0,99)
opnum = random.randint(0,3) #随机生成0到3的整数以生成不同运算
if opnum == 3 and num2 == 0: #被除数不能等于0
opnum = random.randint(0,2)
doc1.write('第{:0>3}题 {:0>2}{}{:0>2} = \n'.format(num,num1,op[opnum],num2))
#下面四步是分组判断写入答案
if opnum == 0: #加法
doc2.write('第{:0>3}题 {} \n'.format(num,num1+num2))
elif opnum == 1: #减法
doc2.write('第{:0>3}题 {} \n'.format(num,num1-num2))
elif opnum == 2: #乘法
doc2.write('第{:0>3}题 {} \n'.format(num,num1*num2))
else : #除法
if isinstance(num1/num2,int): #判断答案是否为分数
doc2.write('第{:0>3}题 {} \n'.format(num,num1/num2))
else:
if num1 > num2:
doc2.write('第{:0>3}题 {}又{}/{} \n'.format(num,num1//num2,num1%num2,num2))
else:
doc2.write('第{:0>3}题 {}/{} \n'.format(num,num1,num2))
doc1.close #关闭文件并保存
:次のように対応する出力TXT文書が表示されたコード、変更する作業することができ
、ファイルの後に一度Exercises.txt実行を:
最初の実行後にAnswers.txtファイル:
これらは、コードの話題です。
検索部は、私は、困難に遭遇した最初の試みに、以下を行いました:
そのコードは次のとおりです。
data =[]
for line in open("Exercises.txt","r"): #设置文件对象并读取每一行文件
data.append(line) #将每一行文件加入到list中
num1 =0 #大循环数
num2 =1 #小循环数
ex1 =data[num1] #expression表达式
ex2 =data[num2]
tp1 =ex1[1:4]#topic题目数
tp2 =ex2[1:4]
num11 =ex1[7:9] #第一操作数
num12 =ex1[10:12] #第二操作数
num21 =ex2[7:9]
num22 =ex2[7:9]
op1 =ex1[9] #操作符
op2 =ex2[9]
list_repeat =[] #重复题目
exnum =len(data) #读取题目数
while num1 <=len(data):
while num2 <=len(data)-num1-1:
if op1 ==op2 and op1 in ['+','x']:
if num11 ==num21 or num11 ==num22:
list_repeat =list_repeat +tp1 +tp2
num2 =num2 +1
elif op1 ==op2 and op1 in ['-','÷']:
if num11 ==num21 and num12 ==num22:
list_repeat =list_repeat +tp1 +tp2
num2 =num2 +1
else:
num2 =num2 +1
num1 =num1 +1
num2 =num1 +1
print(list_repeat)
可視コードの計算が非常に大きい、話題は10000100000000倍であれば最小数を計算する必要このように見られるが、非常に非科学的である(私のコンピュータをテストするときに泣いてきた)、私は2番目の継続います試み。
その後、被験者が、あなたがこのような場合、対象における多くの時間を減らすことができたときに同じ答えを見つけ、私は最初の範囲、答えを狭めるで初めて最初に狭く、第一、第二時間とは異なる検索コンピュータは、計算時間を短縮するためにワークロード。
二回目のコードを次のとおりです。
#读取txt文件2
data_answer =[] #Answers.txt文件语句
data_Exercises =[] #Exercises.txt文件语句
for line in open("Answers.txt","r"): #设置文件对象并读取每一行文件
data_answer.append(line) #将每一行文件加入到list中
for line in open("Exercises.txt","r"): #同上
data_Exercises.append(line)
#生成一个只存有答案的列表
loopnum1 =0 #循环数
answers ="" #答案字符串
while loopnum1 <= len(data_answer) -1:
answer =data_answer[loopnum1] #答案语句
awnum =answer[7:-2] #答案数据
answers = answers +awnum +" "
loopnum1 =loopnum1 +1
awlist =answers.split(sep=" ") #答案列表
del awlist[-1] #删除最后一个空字符串
#索引相同答案的列表
loopnum2 =0 #循环数
repeat =""
while loopnum2 <= len(data_answer) -1:
item =awlist[loopnum2] #每个元素
itnum =str(awlist.count(item)) #每个元素重复个数
repeat =repeat +itnum +" "
loopnum2 =loopnum2 +1
rep =repeat.split(sep=" ") #所有元素出现次数的字符串
del rep[-1] #删除最后一个空字符串
#生成重复题目的题号
repnum =rep.count('2') #重复题目总数
loopnum3 =0
aimnum =""
repaimnum = 0
while loopnum3 <=repnum -1:
repaimnum =rep.index('2') +1 +loopnum3 #题号
aimnum =aimnum +str(repaimnum) +" "
rep.remove('2')
loopnum3 =loopnum3 +1
print("一共有{}道题目错误,他们的题号是{}".format(repnum,aimnum))
# 文本进度条,纯属好玩才加的
import time
scale = 50
print("检查重复题目开始".center(scale//2,"_"))
start = time.perf_counter()
for i in range(scale + 1):
a = "■" * i
b = "□" * (scale - i)
c = (i / scale) * 100
dur = time.perf_counter() - start
print("\r{:3^.0f}%[{}{}]{:.1f}秒".format(c,a,b,dur),end="")
# └百分数 └进度条 └秒数
time.sleep(0.1)
print("\n"+"检查结束".center((scale +8)//2,"_"))
プログレスバーを削除し、楽しみのために純粋にコードの42行の合計で、まだ完了していない、次のようには、現在の実行の結果です: