【问题标题】:Python Script not Working defPython 脚本不工作 def
【发布时间】:2013-10-14 12:10:59
【问题描述】:

下面的代码不断跳过“TryAgainQuestion()”函数:::: 我真的需要一些帮助!!!越来越烦了

    import time
    ranname = "0"

def AskForName():
    ranname = "1"
    name = input("Please enter your name: ")
    print("--------------------")
    print("  .:: ",name," ::.")
    print("--------------------")
    print("     ")
    time.sleep(2)
    Start()

def TryAgainQuestion():
    tryagain = input("Do you want to try again? (Y or N): ")
    if (tryagain == "y" or "Y"):
        AskForName()

    else:
        time.sleep(1)
        print("Made By: Daniel Parker")

def Start():
    if (ranname == "1"):
        TryAgainQuestion()

    if (ranname == "0"):
        AskForName()
Start()

谢谢, 丹

【问题讨论】:

  • 你不能在AskForName中更改ranname;相反,它被视为AskForName 的局部变量。看到这个问题:stackoverflow.com/questions/10588317/…
  • 如果您的导师不知道这里出了什么问题,您可能需要考虑寻找更好的教育机构。
  • 另外,tryagain == "y" or "Y" 可能不会做你想做的事。试试tryagain in ["y", "Y"]
  • 学校导师也没有提到不必要的括号使用或非常非 Pythonic 的命名约定?看看:stackoverflow.com/questions/19355810/…
  • Learnign python,我认为你有一个严重的问题。我的意思是,你们学校的导师当然会。

标签: python function python-3.x


【解决方案1】:

这是一个范围问题:第二行的ranmameAskForName 函数中的不一样。需要在函数开头加上global ranname才能正常更新。

import time
ranname = "0"

def AskForName():
    global ranname
    ranname = "1"

【讨论】:

    【解决方案2】:

    正如@georgesl 所建议和所说的,这是范围问题(命名空间)

    请阅读this 指南,我正在按类附加工作代码:

    import time
    
    class myClass():
    
        def __init__(self):
            self.ranname = "0"
    
        def AskForName(self):
            self.ranname = "1"
            name = raw_input("Please enter your name: ")
            print("--------------------")
            print("  .:: ", name, " ::.")
            print("--------------------")
            print("     ")
            time.sleep(2)
            self.Start()
    
        def TryAgainQuestion(self):
            tryagain = raw_input("Do you want to try again? (Y or N): ")
            if (tryagain == "y"):
                self.AskForName()
    
            else:
                time.sleep(1)
                print("Made By: Daniel Parker")
    
        def Start(self):
            if self.ranname == "1":
                self.TryAgainQuestion()
    
            if self.ranname == "0":
                self.AskForName()
    
    def main():
    
        myclass = myClass()
        myclass.Start()
    
       #end of main
    
    if __name__ == "__main__":
        main()
    

    【讨论】:

    • 非常感谢,非常感谢您的帮助!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    相关资源
    最近更新 更多