For loop utilizing != for string character 在 Python 中不起作用
For loop utilizing != for string character not working in Python
我是学习 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。任何帮助我指明正确方向的帮助将不胜感激。
首先第一个if
条件是错误的-
if (i != '1' or i != '0') and len(check) == 8:
为什么?因为可以说 i
是 1
所以在条件的第一部分,我们看到 i
不等于 0
,所以它是 True,在第二部分如果check
等于8
,我们进入if条件
理想情况下应该是 and
-
if (i != '1' and i != '0') and len(check) == 8:
同样,在第二个条件下也使用and
。
但是考虑到这一点,我认为你应该理想地考虑字符串的长度和每个字符 1
或 0
完全不同,而不是 return 返回一个列表,其中一个第一个元素表示数组的长度是否正确,第二个元素表示字符是否都是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
然后您可以在您的主代码中(或您调用该函数的任何地方)与此列表进行比较,并确定所有错误的地方。
如果长度错误,第一个元素将 return 0
,否则为 1。
如果所有字符都是 1
或 0
,则第二个元素将 return 1
,否则为 0
。
我是学习 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。任何帮助我指明正确方向的帮助将不胜感激。
首先第一个if
条件是错误的-
if (i != '1' or i != '0') and len(check) == 8:
为什么?因为可以说 i
是 1
所以在条件的第一部分,我们看到 i
不等于 0
,所以它是 True,在第二部分如果check
等于8
,我们进入if条件
理想情况下应该是 and
-
if (i != '1' and i != '0') and len(check) == 8:
同样,在第二个条件下也使用and
。
但是考虑到这一点,我认为你应该理想地考虑字符串的长度和每个字符 1
或 0
完全不同,而不是 return 返回一个列表,其中一个第一个元素表示数组的长度是否正确,第二个元素表示字符是否都是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
然后您可以在您的主代码中(或您调用该函数的任何地方)与此列表进行比较,并确定所有错误的地方。
如果长度错误,第一个元素将 return 0
,否则为 1。
如果所有字符都是 1
或 0
,则第二个元素将 return 1
,否则为 0
。