Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
str对象不可调用错误python_Python - Fatal编程技术网

str对象不可调用错误python

str对象不可调用错误python,python,Python,我一直在尝试用Python运行以下代码: def likes(names): dictionary_of_sizes = { 0:"no one likes this", 1:(lambda names: "{} likes this".format(names[0])), 2:(lambda names: "{} and {} like this".format(names[0], names[1])), 3:(lamb

我一直在尝试用Python运行以下代码:

def likes(names):
    dictionary_of_sizes = {
        0:"no one likes this", 
        1:(lambda names: "{} likes this".format(names[0])),
        2:(lambda names: "{} and {} like this".format(names[0], names[1])),
        3:(lambda names: "{}, {} and {} like this".format(name[0], names[1],names[2])),
        4:(lambda names: "{}, {} and {} others like this".format(names[0], names[1], len(names)-2))
    }
    return dictionary_of_sizes[len(names)](names) if len(names)<4 else dictionary_of_sizes[4]
def类(名称):
字典大小={
0:“没人喜欢这个”,
1:(lambda名称:“{}喜欢这个”。格式(名称[0]),
2:(lambda名称:“{}和{}类似于此”。格式(名称[0],名称[1]),
3:(lambda名称:“{},{}和{}类似于此”。格式(名称[0],名称[1],名称[2]),
4:(lambda名称:“{},{}和{}其他类似的名称”。格式(名称[0],名称[1],len(名称)-2))
}

返回大小为[len(names)](names)的字典(如果len(names)如果传递空字符串,它将写出错误消息。 您可以使用列表而不是字典:

def likes(names):
    options = ["no one likes this", 
                lambda names: "{} likes this".format(names[0]),
                lambda names: "{} and {} like this".format(names[0], names[1]),
                lambda names: "{}, {} and {} like this".format(name[0], names[1],names[2]),
                lambda names: "{}, {} and {} others like this".format(names[0], names[1], len(names)-2)
            ]
    if type(names) == list:
        return options[min(len(options),len(names))](names)
使用Python 3.6的f字符串: 产出:
您没有向我们显示引发异常的代码。当你不告诉我们你在做什么的时候,很难说出你做错了什么。但如果我这样做,它似乎会起作用:

>>> likes(["John","Harry"])
'John and Harry like this'
我怀疑您可能会这样调用
likes()

>>> likes(["John","Harry"])()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: 'str' object is not callable
>>> likes("")
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "<input>", line 7, in likes
TypeError: 'str' object is not callable

但是你真的应该放弃那些不必要的、难以阅读的
lambda
s,做一些类似的事情:

def likes(names):
    if len(names) > 3:
        names = names[:2] + [f"{len(names)-2} others"]
    elif len(names) == 0:
        names = ["no-one"]
    result = " and ".join(", ".join(names).rsplit(", ",1))
    if len(names) == 1:
        return result + " likes this"
    else:
        return result + " like this"

请发布错误的完整堆栈跟踪。提示:当
names
为空时会发生什么?另外,如果执行
names[3]
会发生什么?
>>> likes("")
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "<input>", line 7, in likes
TypeError: 'str' object is not callable
{0:"no one likes this", 
{0:(lambda names: "no one likes this"),
def likes(names):
    if len(names) > 3:
        names = names[:2] + [f"{len(names)-2} others"]
    elif len(names) == 0:
        names = ["no-one"]
    result = " and ".join(", ".join(names).rsplit(", ",1))
    if len(names) == 1:
        return result + " likes this"
    else:
        return result + " like this"