翻转一位数以使所有数字相同:代码是错误的吗?

时间:2016-09-02 11:16:48

标签: python python-3.x

尝试解决以下问题:

鉴于二进制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")

你能说明原因吗?

2 个答案:

答案 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")