2015-05-04 60 views
-1

好的,所以我正在研究豬拉丁語翻譯器(就像Codecademy課程中的那種,但更先進),它的工作原理除了當我提示用戶如果他們想翻譯另一個單詞,但是我給用戶的if/else語句總是跳到其他語句,而不管輸入是什麼。該模塊不提供任何語法錯誤或任何錯誤,並且我沒有看到任何代碼錯誤。這是從我的程序,是給我的問題塊:Python 3:if/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() 

更具體地說,這些部件在編碼:

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() 

而且,

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() 

所以...任何想法爲什麼這可能會發生或如何解決它?

+2

輸出示例? –

+2

嘗試「upper()」,而不是「upper」。 – gustafbstrom

+0

@gustafbstrom謝謝你,工作。我完全忘了那部分。 DERP。 :P –

回答

3

str.upper是一種方法。如果你想要大寫字母的值,你應該調用這個方法。

3

你缺少開放並調用str.upper功能

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


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

時右括號當你有:

if again.upper == "Y": 

它比較again.upper這與字符串"y"的功能。這種比較永遠是錯誤的,因此它總會評估錯誤的分支。 其他語言不允許以這種方式使用函數,並可能會給您一個錯誤,這種缺少錯誤可能不是您所期望的。

如果你看看這個與REPL或類似的,你會看到這是怎麼回事,這個代碼片斷希望能幫助你瞭解這是怎麼回事:

test = "abcDEF" 
print(test.upper) 
print(test.upper()) 

此輸出:

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

您可以在此處看到此操作:http://ideone.com/gYyPnH