我需要一些建议来应对这一挑战。要求是查看输入是否有效(即只有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")
答案 0 :(得分:1)
您可以使用set
来检查输入是否仅包含0
和1
。
>>> 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
块保持在“外部”)。
另请注意,从if
到binary
的转换是不必要的,因为binary_list
可能会被迭代并拥有str
方法。
.count()