首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将函数中的变量更改为在主代码中使用?

如何将函数中的变量更改为在主代码中使用?
EN

Stack Overflow用户
提问于 2016-09-30 17:34:52
回答 2查看 46关注 0票数 0

我对Python非常陌生,我很难搞清楚以下几点:

代码语言:javascript
复制
import random
import sys

print("Welcome to this Maths quiz.")
playerName = str(input("Please enter your name: "))
playerAge = int(input("Please enter your age: "))
if playerAge < 11:
    print("This quiz is not for your age.")
    sys.exit(0)
else :
    print("Great! Let's begin.\n")

quizQuestions = ["9(3+8)", "7+9*8", "(9+13)(9-5)", "50*25%", "104-4+5*20"]
quizAnswers = ["99", "79", "88", "12.5", "0"]
quizSync = list(zip(quizQuestions, quizAnswers))
random.shuffle(quizSync)
quizQuestions, quizAnswers = zip( * quizSync)
questionNumber = 1
quizScore = 0

def displayQuestion(quizQuestions, quizAnswers, questionNumber, quizScore):
    print("Question " + str(questionNumber) + ": " + quizQuestions[questionNumber - 1] + "\n")
    questionAnswer = str(input())
    if questionAnswer == quizAnswers[questionNumber - 1]:
        print("\nCorrect!\n")
        quizScore += 1
    else :
        print("\nIncorrect! The answer is: " + quizAnswers[questionNumber - 1] + "\n")

while questionNumber < 6:
    displayQuestion(quizQuestions, quizAnswers, questionNumber, quizScore)
    questionNumber += 1

print("You have a total score of: "+str(quizScore))

如果玩家问对了问题,我希望函数"quizScore“中的变量"displayQuestion”增加1。然而,在测试结束后,最后的打印函数总是打印分数为0,即使玩家的问题是正确的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-30 18:29:56

虽然这不是最短的答案,也就是使用另一个全局变量。相反,它将向您展示如何通过使用被认为是有害的避免使用全局变量( 面向对象编程(OOP) )。为了实现这一点,您问题中的大部分代码可以封装到下面名为MathQuiz的单个类中。

除了消除几乎所有的全局变量,它还提供了一个可用的模板,您可以创建任意数量的独立数学测试。

代码语言:javascript
复制
import random
import sys

class MathQuiz:
    def __init__(self, questions, answers):
        quizSync = list(zip(questions, answers))
        random.shuffle(quizSync)
        self.quizQuestions, self.quizAnswers = zip(*quizSync)
        self.quizScore = 0

        print("Welcome to this Maths quiz.")
        self.playerName = str(input("Please enter your name: "))
        self.playerAge = int(input("Please enter your age: "))
        if self.playerAge > 10:
            print("Great! Let's begin.\n")
        else :
            print("This quiz is not for your age.")
            sys.exit(0)

    def run(self):
        for questionNumber in range(len(self.quizQuestions)):
            self._displayQuestion(questionNumber)

        print("You have a total score of: " + str(self.quizScore))

    def _displayQuestion(self, questionNumber):
        print("Question " + str(questionNumber) + ": "
              + self.quizQuestions[questionNumber-1]
              + "\n")
        questionAnswer = str(input())
        if questionAnswer == self.quizAnswers[questionNumber-1]:
            print("\nCorrect!\n")
            self.quizScore += 1
        else :
            print("\nIncorrect! The answer is: "
                  + self.quizAnswers[questionNumber-1]
                  + "\n")

quiz = MathQuiz(["9(3+8)", "7+9*8", "(9+13)(9-5)", "50*25%", "104-4+5*20"],
                ["99", "79", "88", "12.5", "0"])
quiz.run()
票数 0
EN

Stack Overflow用户

发布于 2016-09-30 17:38:31

您必须在函数中声明它为全局变量,以便它可以修改全局范围中的变量。

代码语言:javascript
复制
def displayQuestion(quizQuestions, quizAnswers, questionNumber):
    global quizScore    
    ...
    quizScore += 1

尽管如此,如果可以的话,通常应该避免全局变量,并尝试重新设计程序,将变量作为参数和返回值传递,或者使用类封装数据。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39797042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档