下面的代码片段从用户获取两个数字。每个数字都由数字0或1组成。程序应该写出一个与给定的数字对相对应的新数字。规则很简单:当且仅当两个给定数的第i位不同时,答案的第i位是1。在另一种情况下,答案的第i位是0。
这是我解决问题的方法,它给了我想要的输出:
s1 = input()
s2 = input()
s = ''
for i in range(len(s1)):
if s1[i] != s2[i]:
s += '1'
else:
s += '0'
print(s)
这一行的方法产生相同的输出,我只是好奇知道它是如何做到的,但不能弄清楚。所以我现在在Stackoverflow上。
i=input;print(''.join('01'[a!=b]for a,b in zip(i(),i())))
步步讲解:
i=input
—在i
中存储以后调用的函数
zip(i(),i())
—如果用户输入1010
和1101
,这将返回[(1, 1), (0, 1), (1, 0), (0, 1)]
—两个字符串的元素配对
for a,b in
-a
和b
是zip
的配对(在示例中,它们首先被设置为a=1和b=1,然后a=0和b=1,等等)
'01'[a!=b]
-a!=b
将返回一个布尔值——True或False。True
= 1和False
= 0,因此您可以使用它进行索引。这里写着if a!=b: '1'
if a==b: '0'
''.join
-最后,将所有的'0'和'1'连接在一起,形成一个字符串并打印
如果你真的想让它成为联机的,去掉分号,像这样做:
print(''.join('01'[a!=b] for a, b in zip(input(), input())))
- Python会要求用户输入两个字符串
zip
用元组创建一个可迭代对象,所以"hi"one_answers";ho"将变成[(h,h), (i,o)]- 在列表推导式中,你有一个字符串'01',可以用0或1索引
- 这就是你的表达式
[a!=b]
所做的,它计算为True
(1)或False
(0) - 因为循环遍历所有元组,所以对于输入字符串中的每个字符都会发生这种情况
- 最后,
''.join
将列表中的所有元素连接起来,并打印出来