当使用for/argument()时,Iterable错误为int。使用map时出错。我要去哪里

2024-03-28 19:37:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试了使用map和using for循环的bith方法,但它不起作用,我知道for循环必须列出、元组或字符串。那么,我如何使这项工作

一,

def narcissistic(value):
  x = ((value)== sum((c)**len(value) for c in list(value)))
  return x    

二,

def narcissistic(value):
   x=(value== (map(lambda c :sum(c**len(value)),value)))
   return x

Tags: 方法字符串inmapforlenreturnvalue
1条回答
网友
1楼 · 发布于 2024-03-28 19:37:46

您的问题归结为对不同对象类型的混淆。Python是一种强类型语言,因此每个对象在任何给定时刻都有一个清晰的类型,并且该语言通常不会自动将任何内容转换为另一种类型

根据您得到的错误,您正在使用int参数调用您的函数。当您试图调用len或在value上迭代时,这会给您带来麻烦。Pythonint没有长度,也不可编辑,因此在这种情况下失败是可以理解的

您要做的是创建value号的字符串表示形式。然后,您可以在字符串的字符上循环,并自由地获取其len

不过还有另一个问题。您还试图对生成器表达式中的c变量执行指数运算。这不起作用,因为c是一个字符串,而不是一个数字。它是一个一位数的字符串,但仍然是一个str实例!要对其进行数学运算,需要使用int将其转换回一个数字

以下是函数的固定版本:

def narcissistic(number):
    num_str = str(number)
    return sum(int(c)**len(num_str) for c in num_str) == number

我已经用number重命名了非常通用的value名称,希望这能使每个事物的类型更加清晰

相关问题 更多 >