Python:重构代码以删除全局变量

我目前在我的代码中使用一个名为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()
最佳答案
我可能会这样做:

#!/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()函数)中分解出来,这样,它不会使事情过于复杂而留下它在那里.如果你想进行更多的错误检查(例如,查看用户是否输入了无效的号码,并且你想要返回并要求更多输入,那么你可能想要更多一些.

相关文章

我最近重新拾起了计算机视觉,借助Python的opencv还有face_r...
说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Poolin...
记得大一学Python的时候,有一个题目是判断一个数是否是复数...
文章目录 3 直方图Histogramplot1. 基本直方图的绘制 Basic ...
文章目录 5 小提琴图Violinplot1. 基础小提琴图绘制 Basic v...
文章目录 4 核密度图Densityplot1. 基础核密度图绘制 Basic ...