对于循环利用!=用于在Python中不起作用的字符串字符

时间:2015-08-30 03:33:31

标签: python python-3.4

我是学习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。任何有助于指出我正确方向的帮助都将非常感激。

1 个答案:

答案 0 :(得分:2)

首先,第一个if条件是错误的 -

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

为什么呢?因为我们假设i1所以在条件的第一部分,我们看到i不等于0,所以它是真的,而在第二部分中check等于8,我们输入if条件。

理想情况下应该是and -

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

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

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

然后你可以在主代码中(或者你从中调用函数的任何地方)对这个列表进行比较,并确定所有错误。

如果长度错误,它会在第一个元素中返回0,否则返回1。

如果所有字符都是110,则会在第二个元素中返回0