我是学习Python 3.4的初学者,我正在研究一个程序,我从用户那里读取位,并根据偶校验确定奇偶校验位。
我正在检查用户是否输入正确的8位,以及他们是仅输入1还是0。
用户使用input()函数输入值,并以字符串形式输入。我的错误比较功能如下:
#Check for errors in user defined string
def errors(check):
for i in check:
if (i != '1' or i != '0') and len(check) == 8:
result = 0 #return value means not binary, but right amount of digits
#break
elif (i != '1' or i != '0') and len(check) != 8:
result = 1 #Not binary and wrong amout of digits
break
elif len(check) != 8:
result = 2 #wrong amount of digits but binary
break
elif (i == '1' or i == '0'):
result = 3 #Binary, and correct amount of digits
else:
print('Error checking loop messed up')
return result
基本上是我的第一个if语句正在执行(即使我输入10101010),或者我的第二个if语句(101010101010,或1010ag1010之类的东西)。
我的输出如下:
enter a string of bits (must be 1 or 0, max. 8): 10101010
You entered a value that is not a 1 or 0
由于某种原因,该程序无法识别我的1和0。任何有助于指出我正确方向的帮助都将非常感激。
答案 0 :(得分:2)
首先,第一个if
条件是错误的 -
if (i != '1' or i != '0') and len(check) == 8:
为什么呢?因为我们假设i
是1
所以在条件的第一部分,我们看到i
不等于0
,所以它是真的,而在第二部分中check
等于8
,我们输入if条件。
理想情况下应该是and
-
if (i != '1' and i != '0') and len(check) == 8:
同样,在第二个条件下也使用and
。
但考虑到这一点,我认为你应该理想地考虑字符串的长度和每个字符1
或0
完全不同,而是返回一个列表,其中一个元素指示是否长度为数组是否正确,第二个元素表示字符是否全部为1
和0
。
示例 -
def errors(check):
result = []
if len(check) == 8:
result.append(1)
else:
result.append(0)
for i in check:
if i not in {'1','0'}:
result.append(0)
break
else:
result.append(1)
return result
然后你可以在主代码中(或者你从中调用函数的任何地方)对这个列表进行比较,并确定所有错误。
如果长度错误,它会在第一个元素中返回0
,否则返回1。
如果所有字符都是1
或1
,0
,则会在第二个元素中返回0
。