我找不到任何相关内容,所以我不得不在这里问。对于那些熟悉python的人来说,我确信这是一个简单的问题。
python 2:
print raw_input() == 0 or hash(tuple(map(int, raw_input().split(' '))))
python 3:
print(input()==0 or hash(tuple(map(int,input().strip().split()))))
我试图理解为什么'或'在打印声明中。 有问题的代码在print语句中有一个布尔运算符,比较boolean和int。这就是我需要向我解释的内容。它显然特定于python。在input()== 0返回true的情况下,代码会打印什么?我们如何比较布尔值和散列值,再次,我们在print语句中进行布尔比较的是什么?
答案 0 :(得分:2)
在Python中,与or
或and
的比较使用了两个功能:
所以,当你有这样的事情时:
print(input()==0 or hash(tuple(map(int,input().strip().split()))))
它将遵循操作顺序,检查input()
是否返回0
。由于or
是下一个词,如果它是真的,那么下一个词对结果没有影响,也不会被评估。如果发生这种情况,它会打印True
,因为这是input()==0
返回的内容。
如果这是假的,它将评估下一部分,获取输入,将其映射为整数,将其转换为元组,并对其进行散列。然后它将返回该哈希值,无论它是否为真值(0
以外的数字,包含内容的序列或集合等)。
答案 1 :(得分:1)
Python将首先评估input()==0
是否为True
。如果是,则Python将打印它并忽略该行的其余部分。如果输入不等于0并且评估为False
,那么它将被忽略,并且无论其如何评估,都将打印的其余部分。因此,即使该行的其余部分评估为False
,Python也会打印其结果。
更清晰的例子是根据用户输入设置某些内容的名称,并要求默认值。
name = raw_input("What is your name?")
print ("So your name is...")
print (name or "John Smith")
name
将被评估为True
或False
。由于空字符串将被视为False
,如果用户输入任何内容,则Python将在or
运算符后打印默认名称。
答案 2 :(得分:0)
我猜你的代码是Python3,否则input()
的结果不太可能有strip
方法。
以下是代码的长形式,并附有解释。
# Read a line of input. Returns a string.
a = input()
# Compare to integer 0, always False.
# Effectively, this ignores the first line of input.
b = a == 0
# Separate function to represent lazy evaluation.
def y():
# Get a second line of input, as a string.
c = input()
# Strip leading and trailing whitespace, still a string.
# This line is useless since split() with no argument does this.
d = c.strip()
# Split the line by any runs of whitespace. Returns a list of strings.
e = d.split()
# For each string in the list, convert it to an integer in base 10.
# Return an iterator (not list) of ints.
# Most people would write (int(s) for x in e) for a generator
# comprehension, or [int(s) for x in e] for a list comprehension.
m = map(int, e)
# Consume the iterator into a tuple of ints.
# Note that it can't be a list, because lists aren't hashable.
t = tuple(m)
# Hash the tuple, returning a single int.
return hash(t)
# If b is truthy, set x to it. Otherwise, evaluate y() and set x to that.
# Unlike many languages, the arguments to or are *not* coerced to bool.
# Since b is False, y() will be evaluated.
x = b or y()
# Print the result of y().
# i.e. the hash of the tuple of ints on the second line.
# This is essentially a meaningless number.
print(x)