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:

为什么?因为可以说 i1 所以在条件的第一部分,我们看到 i 不等于 0,所以它是 True,在第二部分如果check等于8,我们进入if条件

理想情况下应该是 and -

if (i != '1' and i != '0') and len(check) == 8:

同样,在第二个条件下也使用and


但是考虑到这一点,我认为你应该理想地考虑字符串的长度和每个字符 10 完全不同,而不是 return 返回一个列表,其中一个第一个元素表示数组的长度是否正确,第二个元素表示字符是否都是10

例子-

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。

如果所有字符都是 10 ,则第二个元素将 return 1 ,否则为 0