检查输入是否为二进制并包含两个1

时间:2017-02-21 03:57:14

标签: python

我需要一些建议来应对这一挑战。要求是查看输入是否有效(即只有0和1,没有空格,没有字母)和接受(包含两个1)。然后,如果输入有效并被接受,则将二进制转换为十进制。任何帮助,将不胜感激!

#Examples of invalid binary numbers: abc 10102011 10101FF 
#0000 1111 (note:contains a space)
#Examples of valid, rejected binary numbers: 00000000 1111 01110000001
#Examples of valid, accepted binary numbers: 1000001 11000000 1111

binary = str(input("Enter a binary number: "))
binary_list = list(binary)
valid = True
accepted = True
convert = ""
var = binary_list.count('1')

for character in binary_list:
  if (character != '1') and (character != '0'):
    valid = False


for character in binary_list:
  if (var != 2):
    accepted = False


if (valid == True and accepted == True):
  print("Input", binary ,"is valid and accepted")
  convert = int(binary, 2)
  print ("The number is ", convert)
elif (valid == False):
  print ("Input was invalid")
elif (valid == True and accepted == False):
  print ("Input was rejected") 

1 个答案:

答案 0 :(得分:1)

您可以使用set来检查输入是否仅包含01

>>> set("1101101000100001001010101")
{'0', '1'}

无论结果如何,它都应该只包含{'0', '1'}的某个子集。 (它有可能没有其中一个。)我们可以使用set.issubset()方法来检查这个。 (请注意第二个示例中的2。)

>>> set("11010001").issubset(('0', '1'))
True
>>> set("11010201").issubset(('0', '1'))
False

最后,就像您找到的那样,您可以使用str.count()来确定是否只有两个1

>>> "1001".count('1')
2

这是整个代码块。

if not set(binary).issubset(('0', '1')):
    print("Input was invalid binary.")
elif binary.count('1') != 2:
    print("Input was rejected.")
else:
    print("Input", binary, "was valid and accepted!")

注意陈述的重新排序;我们可以使用if / elif来检查个别失败案例,然后将成功案例放在{{1}中,而不是首先检查整个有效性并尝试确定失败点。阻止。

修改:如果您希望继续使用代码示例中列出的策略,可以在第一个else循环的break块中添加if,以停止找到失败案例后搜索。第二个for循环也是不必要的,因为您根本没有使用for,并且可以删除它(将character块保持在“外部”)。

另请注意,从ifbinary的转换是不必要的,因为binary_list可能会被迭代并拥有str方法。

.count()