2013-04-27 97 views
0

嗨,我正在爲codeacademy上的python在線教程,我已經創建了一個函數pyg拉丁語翻譯器,它使用raw_input並將它變成pyglatin中的一個單詞,但是,當我嘗試將此翻譯器變爲一個函數,需要一個單詞並返回一個單詞在pyg拉丁我得到一個錯誤。這些工作的方式有根本的區別嗎?初學者調試函數

這裏是功能譯者:

original = raw_input("Enter a word in English to translate to Pyg Latin:") 

vowels = ["a", "e", "i", "o", "u"] 

if len(original) > 0 and original.isalpha(): 
    word = original.lower() 
    if word[0] in vowels: 
     translation = word + "ay" 
     print translation 
    else: 
     translation = word[1:] + word[0] + "ay" 
     print translation 
else: 
    print "This is not a valid entry! Please try again." 

# Here is the function that comes up with an error: 

vowels = ["a", "e", "i", "o", "u"] 

def pyglatin(eng): 
    if eng.isalpha() and len(eng) > 0: 
     word = eng.lower() 
     if word[0] in vowels: 
      return word + "ay" 
     else: 
      return word[1:] + word[0] + "ay" 
    else: 
     return False 

當我嘗試和調用函數和類型pyglatin(螞蟻)爲例,看看這個詞螞蟻的翻譯,我得到這個錯誤:

回溯(最近通話最後一個):

文件 「」,1號線,在 pyglatin(螞蟻) NameError:名字 '蟻族' 沒有定義

請注意,所有的縮進都是正確的,但我可能沒有在這裏顯示正確的間距。我真的只想知道我的邏輯是否存在根本問題。 謝謝!

+4

你得到什麼錯誤?發佈完整的追溯。你的函數看起來不錯,所以它可能在代碼中的其他地方。 – Blender 2013-04-27 05:57:19

+2

這可能不會解決你的問題,但有幾點建議:'元音= [「a」,「e」,「i」,「o」,「u」]'可以用'vowels =「aeiou」 '因爲每個列表項只有一個字符長。 'len(eng)> 0'可以替換爲'eng',因爲如果字符串的長度大於零,那麼字符串是真的,否則就是僞造的。 – icktoofay 2013-04-27 06:01:54

+4

@icktoofay - 它比這更簡單:'eng.isalpha()'如果字符串爲空則返回false,所以這是唯一需要的測試。 – 2013-04-27 06:22:16

回答

2

File "", line 1, in pyglatin(ant) NameError: name 'ant' is not defined

pyglatin(ant)裝置在可變ant,這是未定義的運行它。爲了傳遞一個文本字符串,使用引號:

pyglatin('ant') 

many more ways代表在Python文字字符串,但是這是最簡單也是最明顯的。

0

很難知道,不知道你得到的錯誤是什麼。雖然也許:問題是,在你的程序的全球範圍內,你是不是將return ...分配給任何東西?這是什麼意思?舉個例子:

def hello(): 
    return 'Hello, world!' 

hello() 

輸出:沒有什麼可輸出在這種情況下,因爲你沒有提供任何measn引用的hello()返回值。但是,如果你要做到以下幾點:

print(hello()) 
--> Hello, world! 

greeting = hello() 
print(greeting) 
--> Hello, world! 

第一個例子,從hello()打印return語句,第二個返回值賦值給變量,讓您再次引用它的一種手段。