from operator import add,sub
from random import randint,choice
#从operator、random模块导入函数
ops={'+':add,'-':sub}
#定义字典
MAXTRIES=2
def doprob():
op=choice('+-')
#随机选择操作符
nums=[randint(1,10) for i in range(2)]
#随机生成一个1-10的数字,2次。
nums.sort(reverse=True)
#将nums数组降序
ans=ops[op](*nums)
#取字典中add,sub值,而nums中的元素一次作为参数传给add或sub,例nums<span style="font-family: Arial, Helvetica, sans-serif;">[3,4]</span><span style="font-family: Arial, Helvetica, sans-serif;">相当于add(3,4)或sub(3,4)</span>
pr='%d %s %d='%(nums[0],op,nums[1])
oops=0
while True:
try:
if int(raw_input(pr))==ans:
print 'correct'
break
if oops==MAXTRIES:
print 'anwser\n%s%d'%(pr,ans)
else:
print 'incorrect...try again'
oops+=1
except ValueError as e:
print 'invalid input...try again '
#3次错误显示正确答案
def main():
while True:
doprob()
try:
opt=raw_input('Again?[y]').lower()
if opt and opt[0]=='n':
break
except EOFError as e:
break
if __name__=='__main__':
main()
难点在于这个ans=ops[op](*nums)
的理解。
~~~~by勿语星空丶