在lambda内打印

phw*_*hwt -1 python python-3.x

我目前正在使用这样的语法:

print(*list(map(lambda a: [something to do], input())))
Run Code Online (Sandbox Code Playgroud)

如果返回类型是字符串但不是数字,它工作正常.

例如.以下脚本用于在两个不同版本中查找三个的平方根

print(*list(map(lambda a: int(a)**(1/3), input())))
Run Code Online (Sandbox Code Playgroud)

SQRT = lambda a: a**(1/3)
print(SQRT(int(input())))
Run Code Online (Sandbox Code Playgroud)

当我输入9两个返回2.080083823051904(这是正确的)但是当我输入10第一个返回1.0 0.02.154434690031884第二个返回时.

我想知道有什么方法可以直接从lambda打印,返回一个数字而不会导致上面解决的问题?

Mar*_*ers 5

你在这里专注于错误的问题.这不是打印的问题; print()从等式中删除函数将给出相同的结果.

您遍历单个字符的输入字符串,产生的立方根10进入时分别'10'为输入提示,或9当你输入'9':

>>> list(map(lambda a: int(a)**(1/3), '10'))
[1.0, 0.0]  # [1 ** (1/3), 0 ** (1/3)]
>>> list(map(lambda a: int(a)**(1/3), '9'))
[2.080083823051904]  # [9 ** (1/3)]
Run Code Online (Sandbox Code Playgroud)

input()返回一个字符串对象,字符串是迭代的; 一系列单个字符.对于'10'迭代,给你'1''0':

>>> list('10')  # just iteration, pulling out the separate parts
['1', '0']
Run Code Online (Sandbox Code Playgroud)

你的第二个代码片段适用int()整个 input()字符串,因此你得到的平方根109:

>>> SQRT(int('10'))
2.154434690031884
>>> SQRT(int('9'))
2.080083823051904
Run Code Online (Sandbox Code Playgroud)

如果您想要输入的立方根,请不要使用map():

>>> CBRT = lambda a: a ** (1/3)
>>> CBRT(int('10'))
>>> CBRT(int('10'))
2.154434690031884
Run Code Online (Sandbox Code Playgroud)

旁注:*适用于任何可迭代的,包括map()生成的迭代器对象,因此print(*map(...))效果不错print(*list(map(...))),但不首先创建列表对象然后再次丢弃.