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.0和2.154434690031884第二个返回时.
我想知道有什么方法可以直接从lambda打印,返回一个数字而不会导致上面解决的问题?
你在这里专注于错误的问题.这不是打印的问题; 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)]
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()字符串,因此你得到的平方根10和9:
>>> 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(...))),但不首先创建列表对象然后再次丢弃.
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |