我正在创建二进制到十进制转换器。我试图检查用户输入的有效性,只允许程序继续,如果输入只包含零和1。这就是我到目前为止所做的:
while valueCheck == False:
value = input ("Please enter the binary value to convert to a decimal value.")
for i in value:
if not (i in "01"):
print("Please enter only zeroes and ones.")
break
else:
valueCheck = True
用户输入一个输入,如果有效,则valueCheck
设置为True
,终止循环,程序继续。如果输入无效,valueCheck
仍为False
,系统将再次要求用户输入。
但是,if not
检查无法按预期工作。仅当无效字符位于输入的索引0
中时,它才有效。
例如:
输入:5111
输出:Please enter only zeroes and ones
,用户再次要求输入。
输入:1115
输出:Please enter only zeroes and ones
,程序继续输入无效字符。该计划不应该继续。
我理解这种情况正在发生,因为for循环从最左边的索引值开始并检查。这就是为什么如果第一个元素包含无效字符,输出将按预期进行。如果第一个元素包含有效字符,那么程序将移至else
并终止循环?
如何使程序继续while
循环,直到输入中的所有字符都只有0和1,而不管它们在value
中的位置?
答案 0 :(得分:2)
是的,因为您在第一次检查后将valueCheck
设置为True
,正如您所说。
你可以利用这里else
循环中的for
子句,如果没有发生break
则执行,即取消else
子句:
while valueCheck == False:
value = input ("Please enter the binary value to convert to a decimal value.")
for i in value:
if not (i in "01"):
print("Please enter only zeroes and ones.")
break
else:
valueCheck = True
答案 1 :(得分:1)
您在处理第一个valueCheck
时将True
设置为1
,并且永远不会更改它。我的建议是(可能不是最好的风格,但代码逻辑的变化最小):
将valueCheck
设置为False