作者:_忘却的思念_ | 来源:互联网 | 2022-12-10 12:30
我目前正在使用这样的语法:
print(*list(map(lambda a: [something to do], input())))
如果返回类型是字符串但不是数字,它工作正常.
例如.以下脚本用于在两个不同版本中查找三个的平方根
print(*list(map(lambda a: int(a)**(1/3), input())))
和
SQRT = lambda a: a**(1/3)
print(SQRT(int(input())))
当我输入9
两个返回2.080083823051904
(这是正确的)但是当我输入10
第一个返回1.0 0.0
和2.154434690031884
第二个返回时.
我想知道有什么方法可以直接从lambda打印,返回一个数字而不会导致上面解决的问题?
1> Martijn Piet..:
你在这里专注于错误的问题.这不是打印的问题; print()
从等式中删除函数将给出相同的结果.
您遍历单个字符的输入字符串,产生的立方根1
和0
进入时分别'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)]
input()
返回一个字符串对象,字符串是迭代的; 一系列单个字符.对于'10'
迭代,给你'1'
和'0'
:
>>> list('10') # just iteration, pulling out the separate parts
['1', '0']
你的第二个代码片段适用int()
于整个 input()
字符串,因此你得到的平方根10
和9
:
>>> SQRT(int('10'))
2.154434690031884
>>> SQRT(int('9'))
2.080083823051904
如果您想要输入的立方根,请不要使用map()
:
>>> CBRT = lambda a: a ** (1/3)
>>> CBRT(int('10'))
>>> CBRT(int('10'))
2.154434690031884
旁注:*
适用于任何可迭代的,包括map()
生成的迭代器对象,因此print(*map(...))
效果不错print(*list(map(...)))
,但不首先创建列表对象然后再次丢弃.