python3:if/else语句直接跳到els

2024-06-16 14:00:20 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,所以我正在研究一个Pig拉丁语翻译程序(就像Codecademy课程中的一个,但是更高级),它可以工作,除了当我提示用户是否要翻译另一个单词时,但是不管输入什么,我给用户的if/else语句总是跳转到else。该模块没有给出语法错误或任何东西,我也没有看到任何错误的代码。这是我的程序块给我带来的问题:

def translator():
    job = input("Are you translating TO or FROM PygLatin? ")
    if job.upper() == "TO":
        word = input("Alright, what's the word we're translating? ")
        wordlength = len(word)
        firstletter = word[0]
        choppedword = word[1:wordlength]
        completeword = choppedword + firstletter + pyg
        print("Okay! Your translated word is...")
        time.sleep(3)
        print(completeword)
        time.sleep(3)
        redo = input("Wanna translate something else? Y/N ")
        if redo.upper == "Y":
            print("Awesome!")
            time.sleep(3)
            translator()
        else:
            print("Oh, okay then... Bye " + name + "!")
            sys.exit()
    elif job.upper() == "FROM":
        word = input("Alright, what’s the word we’re translating? ")
        wordlengthtwo = int(len(word))
        firstletterindex = int(wordlengthtwo - 3)
        firstletter = word[firstletterindex]
        choppedword = word[0:firstletterindex]
        newword = str(firstletter.upper() + choppedword)
        print("Okay! Your translated word is...")
        time.sleep(3)
        print(newword)
        time.sleep(3)
        again = input("Wanna translate something else? Y/N ")
        if again.upper == "Y":
            print("Awesome!")
            time.sleep(3)
            translator()
        else:
            print("Oh, okay then... Bye " + name + "!")
            sys.exit()

更具体地说,编码中的这些部分:

^{pr2}$

而且

again = input("Wanna translate something else? Y/N ")
if again.upper == "Y":
    print("Awesome!")
    time.sleep(3)
    translator()
else:
    print("Oh, okay then... Bye " + name + "!")
    sys.exit()

所以。。。有什么想法可以解释为什么会发生这种情况或者如何解决它?


Tags: inputiftimejobsleepupperelseword
3条回答

调用str.upper函数时缺少左括号和右括号

if redo.upper() == "Y":
    ...


if again.upper() == "Y":
    ...       

str.upper是一个方法。如果希望字符串的值为大写,则应调用此方法。在

当您有:

if again.upper == "Y":

它将again.upper与字符串"y"进行比较。此比较将始终为false,因此它将始终计算false分支。 其他语言不允许以这种方式使用函数,可能会给您带来错误,这种缺少错误的情况可能不是您所期望的。在

如果您用REPL或类似的代码查看,您将看到发生了什么,此代码片段有望帮助您了解发生了什么:

^{pr2}$

该输出:

<built-in method upper of str object at 0xb73ce300>
ABCDEF

您可以在这里看到这一点:http://ideone.com/gYyPnH

相关问题 更多 >