我目前在我的代码中使用一个名为correct的全局变量.考虑到全局变形是不受欢迎的,有没有更好的方法来设置我的代码来“保护”全局变量?
from random import randint
from random import choice
lower = int(raw_input("Enter a lower integer constraint: "))
higher = int(raw_input("Enter a higher integer constraint: "))
correct = 0
def gen_randoms(lower,higher):
integers = list()
for x in xrange(4):
rand_int = randint(lower,higher)
integers.append(rand_int)
return integers
def gen_equation(integers):
nums = map(str,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)
print equation
return equation
def evaluate(equation):
answer = eval(equation)
print answer
return answer
def compare_answers(gen_answer,game):
global correct
user_answer = int(raw_input("What is the answer? "))
if user_answer == gen_answer:
correct += 1
print 'Correct!'
print 'Current streak: %s' % str(correct)
game()
else:
print 'Incorrect!'
correct = 0
game()
def game():
nums = gen_randoms(lower,higher)
this_equation = gen_equation(nums)
gen_answer = evaluate(this_equation)
compare_answers(gen_answer,game)
game()
最佳答案
我可能会这样做:
原文链接:https://www.f2er.com/python/439605.html#!/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()函数)中分解出来,这样,它不会使事情过于复杂而留下它在那里.如果你想进行更多的错误检查(例如,查看用户是否输入了无效的号码,并且你想要返回并要求更多输入,那么你可能想要更多一些.