我可能会这样做:#!/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 = ['*', '+', '-']
equation = 'num op num op num op num'
while 'op' in equation:
equation = equation.replace('op', choice(operators), 1)
while 'num' in equation:
equation = equation.replace('num', choice(nums), 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()
一些评论:每个函数通常只做一件事,所以如果一个函数计算一个方程,通常最好不要让它也打印方程。在
当你这样做的时候,弄清楚变量应该去哪里会变得容易得多,因为你不需要像每个函数做几个不同的事情时需要传递它们那么多。在
这里的主要游戏逻辑非常简单,你不需要把它从你的主game()函数(或者在我的例子中是main()函数)中分离出来,所以它不会使事情过于复杂而把它留在那里。如果您想进行更多的错误检查(例如,查看用户是否输入了一个无效的数字,如果是,您希望返回并要求更多输入),那么您可能需要再进行一些检查。在