我可能会这样做:
#!/usr/bin/python
"""Equation solving game."""
from random import randint
from random import choice
def gen_randoms(lower,higher):
"""Generates four random numbers between provided bounds."""
integers = [randint(lower,higher) for x in range(4)]
return integers
def gen_equation(integers):
"""Generates a random equation from four provided integers."""
nums = [str(i) for i in integers]
operators = ['*',1)
return equation
def evaluate(equation):
"""Evaluates an equation."""
return eval(equation)
def main():
"""Main game function."""
lower = int(raw_input("Enter a lower integer constraint: "))
higher = int(raw_input("Enter a higher integer constraint: "))
nums = gen_randoms(lower,higher)
streak = 0
while True:
this_equation = gen_equation(nums)
print this_equation
user_answer = raw_input("What is the answer? ('Q' to quit) ")
if user_answer.lower()[0] == 'q':
break
gen_answer = evaluate(this_equation)
print 'The answer was: %d' % gen_answer
if gen_answer == int(user_answer):
streak += 1
print 'Correct!'
print 'Current streak: %d' % streak
else:
streak = 0
print 'Incorrect!'
if __name__ == "__main__":
main()
一些评论:
>每个函数通常只应该做一件事,所以如果一个函数评估一个方程式,通常最好不要打印方程式.
>当你这样做时,弄清楚变量应该去哪里变得容易得多,因为你不需要在每个函数执行几个不同的事情时都要传递它们.
>这里的主要游戏逻辑非常简单,你不需要将它从你的主游戏()函数(或者我的例子中的main()函数)中分解出来,这样,它不会使事情过于复杂而留下它在那里.如果你想进行更多的错误检查(例如,查看用户是否输入了无效的号码,并且你想要返回并要求更多输入,那么你可能想要更多一些.