尝试解决以下问题:
鉴于二进制D仅包含数字0和1,我必须通过仅翻转一个数字来确定是否所有数字都可以相同。
输入是要测试的Ds数,然后是Ds,每行一个。例如:
3
11111001111010
110
100000000000000
输出是"是"或"否",即在这种情况下,运行将如下:
$ python3 first.py
3
11111001111010
NO
110
YES
100000000000000
YES
但是,此问题的自动评估程序判断以下代码错误:
T = int(input())
for i in range(T):
line = input()
ones = zeros = 0
for c in line:
if int(c) == 1:
ones += 1
elif int(c) == 0:
zeros += 1
else:
raise ValueError
if ones > 1 and zeros > 1:
print("NO")
break
if ones == 1:
print("YES")
elif zeros == 1:
print("YES")
你能说明原因吗?
答案 0 :(得分:2)
如果所有数字都相同,您的程序不会输出任何内容。您可以通过以下方式更改最后一部分来解决问题:
if ones == 1:
print("YES")
elif zeros == 1:
print("YES")
elif ones == 0 or zeros == 0:
print("NO") # assuming that one bit must be changed
请注意,您可以使用str.count
来计算零(或1),然后检查计数是1
还是len(line) - 1
:
T = int(input())
for i in range(T):
line = input()
zeros = line.count('0')
print('YES' if zeros == 1 or zeros == len(line) - 1 else 'NO')
答案 1 :(得分:0)
解决方案相当尴尬:我将答案输出为所有大写,其中预期输出为标题大纲。接受以下代码:
T = int(input())
for i in range(T):
line = input()
ones = zeros = 0
for c in line:
if int(c) == 1:
ones += 1
elif int(c) == 0:
zeros += 1
else:
raise ValueError
if ones > 1 and zeros > 1:
print("No")
break
if ones == 1:
print("Yes")
elif zeros == 1:
print("Yes")
elif ones == 0 or zeros == 0:
print("No")