2013-04-27 98 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语句,第二个返回值赋值给变量,让您再次引用它的一种手段。