2015-07-19 76 views
-2
vowlist=['a','e','i','o','u'] 
def piglatin(s): 
    if len(s)==1: 
     if s[0] in vowlist: 
      return s[0]+'way' 
     else: 
      return s[0]+'ay' 
    elif s[0]==' '*len(s): 
     return ' ' 
    elif len(s)>1: 
     if s[0] in vowlist or (s[0]=='y' and s[1] not in vowlist): 
      return s[0:]+'way' 
     else: 
      return new(s) 
def new(s): 
    global str 
    if s[0] not in vowlist: 
     str=s[0]+new(s[1:]) 
    else: 
     return s[len(str):]+str[0:]+'ay' 
print piglatin('school') 
print piglatin('yttribium') 
print piglatin('yolo') 

這是我寫的代碼。它應該輸出:錯誤」類型爲'type'的對象沒有len()「

oolschay 
yttribiumway 
oloyay 

但它給錯誤object of type 'type' has no len()這是爲什麼?

+0

歡迎堆棧溢出。將來,請將您的代碼直接發佈到問題中(您可以使用CMD-K進行格式化),而不是像「CoderPad」這樣的第三方網站。你還應該用編程語言(在這種情況下是Python)標記它。我編輯了你的問題來解決它,但它會使你更有可能在將來得到答案 –

+0

你需要定義一個__len__函數。 參見[這裏] [1] [1]:http://stackoverflow.com/questions/27089682/python-typeerror-object-of-type-has-no-len – Canicious

+0

將來,給出完整的調試消息(例如,錯誤發生在哪條線上)。 – rohanp

回答

0

str是Python中的一種類型。爲您的變量使用不同的標識符。更改此方法:

def new(s): 
    global str 
    if s[0] not in vowlist: 
     str=s[0]+new(s[1:]) 
    else: 
     return s[len(str):]+str[0:]+'ay' 

這樣:

def new(s): 
    global my_str 
    if s[0] not in vowlist: 
     my_str=s[0]+new(s[1:]) 
    else: 
     return s[len(my_str):]+my_str[0:]+'ay' 
+0

這是行不通的,因爲如果代碼進入'else'分支,'my_str'沒有被定義 –

+0

@DavidRobinson是不是'my_str'是全局的?我真的不知道代碼的完整上下文是什麼或者正在使用'new',但是我知道OP的問題出現的原因。 –

+0

我覺得OP在擁有'global str'的​​時候感到困惑。 –

相關問題