【问题标题】:error " object of type 'type' has no len() "错误“'type'类型的对象没有len()”
【发布时间】:2015-10-08 11:06:37
【问题描述】:
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') 

这是我写的代码。它应该输出:

oolschay
yttribiumway
oloyay

但它给出了错误object of type 'type' has no len()这是为什么?

【问题讨论】:

  • 欢迎来到 Stack Overflow。以后,请直接将您的代码发布到问题中(您可以使用 CMD-K 格式化),而不是像CoderPad 这样的第三方网站。您还应该使用编程语言(在本例中为 Python)对其进行标记。我已经编辑了您的问题以解决它,但这将使您将来更有可能得到答案
  • 你需要定义一个len函数。参考[这里][1] [1]:stackoverflow.com/questions/27089682/…
  • 以后,给出完整的调试信息(例如错误发生在哪一行)。

标签: python typeerror


【解决方案1】:

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'

【讨论】:

  • 这行不通,因为如果代码进入else 分支,则my_str 未定义
  • @DavidRobinson my_str 不是全球性的吗?我真的不知道代码的完整上下文是什么或在哪里使用new,但我知道为什么会出现 OP 的问题。
  • 我认为 OP 对拥有 global str 感到困惑。
猜你喜欢
  • 2012-08-02
  • 1970-01-01
  • 2021-08-03
  • 2018-10-01
  • 1970-01-01
  • 2016-02-15
  • 2021-06-14
  • 1970-01-01
相关资源
最近更新 更多