小学数学速算math_game_V1.1
昨天的代码,运行起来让小孩玩,他提出来几个问题:
1.10以内加法太容易了,能不能可以自己设置难度?
2.做题退出了,以前做过的题就没有统计了。
3.有些题做错了,有没有订正的功能。
所以,这次我对代码进行了优化(其实也是python的基础练习)。
math_gameV1.1新增功能:
1.增加了目录
def menu(): ''''游戏菜单''' global total_right,total_wrong,right_rate,max_random_num print('*'*50+'\n') print('1:开始游戏') print('2:游戏设置') print('3:查看游戏统计') print('4:错题订正') print('5:结束游戏') user_chose = input('请输入运行功能:') print('*'*50+'\n') #判断用户输入的功能 if int(user_chose) == 1: calculate() elif int(user_chose) == 2: max_random_num = int(input('请输入算式中的最大数:')) print('已经设置算式中数字最大值为%d'%max_random_num) elif int(user_chose) == 3: information = '目前回答正确%s道题\n目前回答错误%s道题\n目前正确率为%d%s\n'%(total_right,total_wrong,int(right_rate),'%') print('*'*50+'\n'+information+'*'*50+'\n') elif int(user_chose) == 4: make_corrections() elif int(user_chose) == 5: print('已经退出程序,下次继续加油哦') exit()
就是一个if判断,根据用户的输入,判断需要进行的操作。需要注意的是,input的类型str,需要用到int()进行类型转换。
2.退出游戏,再继续可以累积做题量
答对题的数量作为一个全局变量,退出‘做题’的循环,程序并没有结束。所以,再做题的时候total_right,total_wrong可以累加。
total_right = 0#全局变量,总的答对题目 total_wrong = 0#全局变量,总的答对题目 right_rate = 0#全局变量,答对比例
3.10以内加法太容易了,所以设置成可以自定义
首先,定义一个全局变量,可以定义算式中的最大数字,默认为5。
max_random_num = 5#设置算式中随机数字的最大值
从目录里选择‘游戏设置’的,会让用户设置算式中的最大数字。
max_random_num = int(input('请输入算式中的最大数:'))
4.如果做错了,提示正确答案。
total_wrong = total_wrong + 1#算错了就累积在正确题里边 right_rate = total_right/(total_right + total_wrong)*100 information = '真可惜,回答错误,正确答案为%d。\n目前回答正确%s道题\n目前回答错误%s道题\n目前正确率为%d%s\n'%(true_answer,total_right,total_wrong,int(right_rate),'%') print('*'*50+'\n'+information+'*'*50+'\n')
5.错题订正
思路:
1).如果答错,把算式中的两个数字[num1,num2]加入到错题的列表里。
wrong_list = []#错题列表
wrong_list.append([num1,num2])
2).订正的时候,把错题列表的第一个元素添加到一个临时列表里。
temp_wrong_list = wrong_list[0]#将列表的第一个元素放入临时列表
3).把临时列表的元素分别赋值给num1,num2,形成一个算式。
user_answer = input("输入z退出游戏\n%d + %d = "%(num1,num2)) true_answer = num1 + num2#计算正确答案
4).如果算对了,就把这个元素从错题列表中删除。
if user_answer == 'z':#如果输入 z 则退出程序 print('已经退出程序,下次继续加油哦') break#跳出循环 elif int(user_answer) == true_answer: wrong_list.pop(0)#如果回答正确,就把这个元素删除 random.shuffle(wrong_list)#打乱列表内元素排列 total_right = total_right + 1#订正对了就累积在正确题里边 total_wrong = total_wrong - 1#再从错题里边去除一道 right_rate = total_right/(total_right + total_wrong)*100 information = '你真棒,回答正确。\n目前回答正确%s道题\n目前回答错误%s道题\n目前正确率为%d%s\n'%(total_right,total_wrong,int(right_rate),'%') print('*'*50+'\n'+information+'*'*50+'\n') else: random.shuffle(wrong_list)#如果做错了,打乱列表内元素排列 right_rate = total_right/(total_right + total_wrong)*100 information = '真可惜,回答错误,正确答案为%d。\n目前回答正确%s道题\n目前回答错误%s道题\n目前正确率为%d%s\n'%(true_answer,total_right,total_wrong,int(right_rate),'%') print('*'*50+'\n'+information+'*'*50+'\n')
完整代码如下:
import random total_right = 0#全局变量,总的答对题目 total_wrong = 0#全局变量,总的答对题目 right_rate = 0#全局变量,答对比例 max_random_num = 5#设置算式中随机数字的最大值 wrong_list = []#错题列表 def random_num(mini_num, max_num): '''生成随机数,限定最大数和最小数''' num = random.randint(mini_num, max_num) #print(num) return num def menu(): ''''游戏菜单''' global total_right,total_wrong,right_rate,max_random_num print('*'*50+'\n') print('1:开始游戏') print('2:游戏设置') print('3:查看游戏统计') print('4:错题订正') print('5:结束游戏') user_chose = input('请输入运行功能:') print('*'*50+'\n') #判断用户输入的功能 if int(user_chose) == 1: calculate() elif int(user_chose) == 2: max_random_num = int(input('请输入算式中的最大数:')) print('已经设置算式中数字最大值为%d'%max_random_num) elif int(user_chose) == 3: information = '目前回答正确%s道题\n目前回答错误%s道题\n目前正确率为%d%s\n'%(total_right,total_wrong,int(right_rate),'%') print('*'*50+'\n'+information+'*'*50+'\n') elif int(user_chose) == 4: make_corrections() elif int(user_chose) == 5: print('已经退出程序,下次继续加油哦') exit() def calculate(): '''开始出题''' global total_right,total_wrong,right_rate,max_random_num,wrong_list while True:#用一个死循环重复做题 #小学一年级,所以设定10以内的加法 num1 = random_num(0, max_random_num) num2 = random_num(0, max_random_num) #print("%d + %d = "%(num1,num2)) #获取输入的答案 user_answer = input("输入z退出游戏\n%d + %d = "%(num1,num2)) #计算正确答案 true_answer = num1 + num2 #print(user_answer) if user_answer == 'z':#如果输入 z 则退出程序 print('已经退出程序,下次继续加油哦') break#跳出循环 elif int(user_answer) == true_answer: total_right = total_right + 1#算对了就累积在正确题里边 right_rate = total_right/(total_right + total_wrong)*100 information = '你真棒,回答正确。\n目前回答正确%s道题\n目前回答错误%s道题\n目前正确率为%d%s\n'%(total_right,total_wrong,int(right_rate),'%') print('*'*50+'\n'+information+'*'*50+'\n') else: wrong_list.append([num1,num2]) total_wrong = total_wrong + 1#算错了就累积在正确题里边 right_rate = total_right/(total_right + total_wrong)*100 information = '真可惜,回答错误,正确答案为%d。\n目前回答正确%s道题\n目前回答错误%s道题\n目前正确率为%d%s\n'%(true_answer,total_right,total_wrong,int(right_rate),'%') print('*'*50+'\n'+information+'*'*50+'\n') def make_corrections(): global total_right,total_wrong,right_rate,max_random_num,wrong_list while len(wrong_list) > 0: #print(len(wrong_list)) temp_wrong_list = wrong_list[0]#将列表的第一个元素放入临时列表 #print(temp_wrong_list[0]) num1 = temp_wrong_list[0]#临时列表的第一个元素赋值给num1 num2 = temp_wrong_list[1]#临时列表的第二个元素赋值给num2 #print('%s + %s ='%(num1,num2)) user_answer = input("输入z退出游戏\n%d + %d = "%(num1,num2)) true_answer = num1 + num2#计算正确答案 #print(user_answer) if user_answer == 'z':#如果输入 z 则退出程序 print('已经退出程序,下次继续加油哦') break#跳出循环 elif int(user_answer) == true_answer: wrong_list.pop(0)#如果回答正确,就把这个元素删除 random.shuffle(wrong_list)#打乱列表内元素排列 total_right = total_right + 1#订正对了就累积在正确题里边 total_wrong = total_wrong - 1#再从错题里边去除一道 right_rate = total_right/(total_right + total_wrong)*100 information = '你真棒,回答正确。\n目前回答正确%s道题\n目前回答错误%s道题\n目前正确率为%d%s\n'%(total_right,total_wrong,int(right_rate),'%') print('*'*50+'\n'+information+'*'*50+'\n') else: random.shuffle(wrong_list)#如果做错了,打乱列表内元素排列 right_rate = total_right/(total_right + total_wrong)*100 information = '真可惜,回答错误,正确答案为%d。\n目前回答正确%s道题\n目前回答错误%s道题\n目前正确率为%d%s\n'%(true_answer,total_right,total_wrong,int(right_rate),'%') print('*'*50+'\n'+information+'*'*50+'\n') #print(wrong_list[0]) if len(wrong_list) <= 0: print('已完成所有错题订正') def main(): '''主程序''' while True:#用一个死循环重复做题 menu() #calculate() if __name__ == '__main__': main()
posted on 2018-10-26 15:05 Aking_Huang 阅读(182) 评论(0) 编辑 收藏 举报