Python:为什么我的程序在一个接一个地插入片段时运行,而在全部插入时却不运行?

Python:为什么我的程序在一个接一个地插入片段时运行,而在全部插入时却不运行?,python,windows,python-2.7,Python,Windows,Python 2.7,因此,我用Python创建了这个非常简单的paber石头剪刀游戏(对不起,字符串不是英文的) 不管怎样,我在空闲状态下运行它,当我像这样插入它时,它会工作: 从随机导入随机输入-->输入 定义我的函数-->输入 调用我的函数-->回车 这样,它可以按预期运行 但当我把它们放在一起,然后按ENTER键时,它什么也不做,当我再次调用我的函数时,它说它没有定义。 另外,当我将它保存为.py并运行它时,它只会弹出0.5秒 我的代码是: from random import randint def myP

因此,我用Python创建了这个非常简单的paber石头剪刀游戏(对不起,字符串不是英文的)

不管怎样,我在空闲状态下运行它,当我像这样插入它时,它会工作:

  • 从随机导入随机输入-->输入
  • 定义我的函数-->输入
  • 调用我的函数-->回车
  • 这样,它可以按预期运行

    但当我把它们放在一起,然后按ENTER键时,它什么也不做,当我再次调用我的函数时,它说它没有定义。 另外,当我将它保存为.py并运行它时,它只会弹出0.5秒

    我的代码是:

    from random import randint
    def myProgram():
        kpk = raw_input("Kivi, paber või kaarid?")
        random = randint(0,2)
        result = ""
        if kpk == "kivi":
            kpk = 0
            if random == 0:
                result = "VIIK"
            elif random == 1:
                result = "Kivi < Paber --- KAOTASID"
            else:
                result = "kivi > kaarid --- VOITSID"
        elif kpk == "paber":
            kpk = 1
            if random == 0:
                result = "kivi < paber --- VOITSID"
            elif random == 1:
                result = "VIIK"
            else:
                result = "paber < kaarid --- KAOTASID"
        elif kpk == "käärid":
            kpk = 2
            if random == 0:
                result = "kivi > kaarid --- KAOTASID"
            elif random == 1:
                result = "paber > kaarid --- VOITSID"
            else:
                result = "VIIK"
        else:
            print "Sisend peab olema uks kolmest: Kivi, paber või kaarid"
            myProgram()
        print result
        kas = raw_input("Kas soovite uuesti mangida? (Y/N)")
        if kas == "Y" or kas == "y" or kas == "jah":
            myProgram()
        else:
            print "Mang on läbi!"
    myProgram()
    
    来自随机导入randint
    def myProgram():
    kpk=原始输入(“Kivi,paber või kaandry?”)
    random=randint(0,2)
    result=“”
    如果kpk==“kivi”:
    kpk=0
    如果random==0:
    结果=“VIIK”
    elif random==1:
    结果=“Kivi卡兰---沃伊特”
    elif kpk==“paber”:
    kpk=1
    如果random==0:
    结果=“kiviKARAND---KAOTASID”
    elif random==1:
    结果=“paber>Kaandar---VOITSID”
    其他:
    结果=“VIIK”
    其他:
    打印“西森德·佩伯·奥莱马·乌克斯·科尔梅斯特:基维,帕伯·维卡兰”
    我的计划()
    打印结果
    kas=原始输入(“是/否”)
    如果kas==“Y”或kas==“Y”或kas==“jah”:
    我的计划()
    其他:
    打印“läbi上的Mang!”
    我的计划()
    
    我猜这是您的问题的最低版本-

    >>> def blah():
    ...     return 1
    ... blah()
      File "<stdin>", line 3
        blah()
           ^
    SyntaxError: invalid syntax
    >>> blah()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'blah' is not defined
    
    如果没有空格,就会出现语法错误,因为函数定义后没有换行符。一种方法(正如您已经观察到的)是分别复制粘贴函数和函数调用(并确保通过按enter键/在末尾添加新行来定义函数)。(我不确定这是否是python shell中的某种bug,但python 2.x和python 3.x都是这样)


    请注意,这只是在将粘贴代码复制到shell时,而不是在将脚本保存为.py文件并运行它时,在将代码作为脚本运行时,则不需要换行符(尽管为了可读性,最好放在换行符中)。

    因此,我的代码似乎没有问题。它在空闲状态下运行得非常好,我运行->运行模块

    尽管如此,RUN->pythonshell什么也不做


    另外,我应该使用哪个程序来运行我的程序。现在,当我将它保存为test.py并运行它时,一个黑色窗口会弹出0.5秒,就是这样。默认情况下,它被设置为“Python”

    所有这些代码似乎都与您的实际问题无关,您是否可以将其简化为更简单的、仍然存在问题的代码,或者定义一个单行函数,然后调用它。您所说的“当我将它们放在一起,然后按ENTER键时”是什么意思?无论如何,如果我用python kpk.py运行你的程序,如果我删除字符串中的非ASCII字符,它运行得很好。我测试了你的程序,它运行得很好。同时,您的用户将运行程序,这是由您的块
    造成的:打印“Sisend peab olema uks Kolmestt:Kivi,paber või Kaandry”myProgram()
    如果他没有为
    Kivi输入正确的答案,他将被迫不回答多次,paber või Kaandry
    。如果您在python shell中以交互方式键入代码,则这是正确的,但如果您将其保存在
    .py
    文件中,则不需要换行符。@KlausPrinoth是的,是的,将其添加到了答案中。谢谢,我通过运行
    python test.py
    从命令行测试了您的程序,其中
    test.py
    代表您的程序。尝试运行命令行提示符(通过Win+R按钮->“cmd”->ENTER),以避免关闭窗口。谢谢!我对命令行很陌生,但这很有效!
    def blah():
        return 1
    blah()