在lambda中打印

时间:2018-07-18 11:49:55

标签: python python-3.x

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

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.02.154434690031884一个。

我想知道有什么方法可以直接从lambda直接打印而不返回上面提到的问题的数字吗?

2 个答案:

答案 0 :(得分:5)

您在这里关注的是错误的问题。这不是打印的问题。从方程式中删除print()函数将为您提供相同的结果。

您正在遍历输入字符串的个字符,当在输入提示中输入1时分别生成0'10'的立方根,或输入9的{​​{1}}:

'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(...))相同,但没有创建列表对象,然后再次丢弃。

答案 1 :(得分:1)

通过对返回的if ($rezultat = @$polaczenie->query("INSERT INTO ranking (id, name, time) VALUES (NULL, '".$name."', '".$time."')")) { echo "ok"; } 字符串使用map,您会将字符串视为单个字符的序列,因此在输入input()时将其立方根分别为1和0

您应该使用发布的第二种方法,因为所有'10'lambda和拆包都不会为您解决的问题带来任何价值。