小学数学速算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编辑  收藏  举报