編程需求
# 隨機(jī)生成兩個(gè)100以內(nèi)的數(shù)字
# 隨機(jī)選擇加法或是減法
# 總是使用大的數(shù)字減去小的數(shù)字
# 如果用戶答錯(cuò)三次廓推,程序給出正確答案
源代碼
import random
#定義加法運(yùn)算
def add(x,y):
? ? return x+y
#定義減法運(yùn)算
def loss(x,y):
? ? return x-y
#定義判斷函數(shù)
def exam():
? ? #將函數(shù)存入字典
? ? cmds={'+':add,'-':loss}
? ? #隨機(jī)生成兩個(gè)有一百以內(nèi)的隨機(jī)數(shù)
? ? nums=[random.randint(1,100)for i in range(2)]
? ? #為了保證不出現(xiàn)負(fù)數(shù)的情況,所以需要對(duì)兩個(gè)數(shù)進(jìn)行降序排列,確保大的數(shù)字在前面,小的數(shù)字在后面
? ? nums.sort(reverse=True)
? ? #隨機(jī)決定是加法運(yùn)算還是減法運(yùn)算
? ? op=random.choice('+-')
? ? #先讓系統(tǒng)算出正確答案
? ? result=cmds[op](*nums)
? ? #輸出題目讓用戶作答
? ? prompt="%s%s%s="%(nums[0],op,nums[1])
? ? #每一道題目有三次作答機(jī)會(huì)
? ? for i in range(3):
? ? ? ? #可能出現(xiàn)的錯(cuò)誤
? ? ? ? try:
? ? ? ? ? ? #讓用戶輸入答案
? ? ? ? ? ? answer=int(input(prompt))
? ? ? ? #任何報(bào)錯(cuò)都終止本次循環(huán)進(jìn)入下一次循環(huán)
? ? ? ? except:
? ? ? ? ? ? continue
? ? ? ? #如果用戶答對(duì)了就退出循環(huán),詢問(wèn)用戶是否繼續(xù)
? ? ? ? if answer==result:
? ? ? ? ? ? print("你真棒!答對(duì)了")
? ? ? ? ? ? break
? ? ? ? #答錯(cuò)了就再來(lái)一次,直到三次機(jī)會(huì)用完
? ? ? ? else:
? ? ? ? ? ? print("答錯(cuò)了,請(qǐng)?jiān)賮?lái)一次")
? ? #當(dāng)用戶三次都不對(duì),則告訴答案
? ? else:
? ? ? ? print('%s%s'%(prompt,result))
#定義主函數(shù)
def main():
? ? while True:
? ? ? ? #調(diào)用函數(shù),輸出題目
? ? ? ? exam()
? ? ? ? try:
? ? ? ? ? ? #讓用戶選擇是否繼續(xù)做題
? ? ? ? ? ? choice=input('是否繼續(xù)(y or n)')
? ? ? ? #索引錯(cuò)誤
? ? ? ? except IndexError:
? ? ? ? ? ? continue
? ? ? ? #用戶強(qiáng)制中斷
? ? ? ? except (KeyboardInterrupt,EOFError):
? ? ? ? ? ? print('用戶中斷程序')
? ? ? ? ? ? #跟用戶輸入了n一樣,退出程序
? ? ? ? ? ? choice == 'n'
? ? ? ? #用戶輸入y則繼續(xù)
? ? ? ? if choice=='y':
? ? ? ? ? ? continue
? ? ? ? #用戶輸入n則退出
? ? ? ? if choice=='n':
? ? ? ? ? ? print('Bye-bye')
? ? ? ? ? ? break
#測(cè)試
main()
程序運(yùn)行結(jié)果
64-5=59
你真棒!答對(duì)了
是否繼續(xù)(y or n)y
79-79=0
你真棒!答對(duì)了
是否繼續(xù)(y or n)y
92+46=138
你真棒!答對(duì)了
是否繼續(xù)(y or n)