我目前正在使用这样的语法:
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直接打印而不返回上面提到的问题的数字吗?
答案 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
和拆包都不会为您解决的问题带来任何价值。