Python 创建一个函数,验证一个数字是否为二进制,长度是否为8位

Python 创建一个函数,验证一个数字是否为二进制,长度是否为8位,python,Python,我正在尝试编写一个函数,它可以验证用户输入的数字是0还是1,长度是8位。 我知道我需要不断循环,直到它是正确的,但我不能让它验证输入正确。 请告诉我我做错了什么!我想学习:您的代码包含很多复杂和错误。首先,您希望接受像“00000001”这样的字符串,但这不是一个有效的整数表示形式,因此如果它本身不包含错误,那么您的第一次测试将使它失败 你在函数的中间有一个用户输入命令,它假设一个给定的数字是否是一个有效的8位整数,它看起来像是坏的设计,而不是你要解决的问题的一部分。 最后,您只需检查输入的是8

我正在尝试编写一个函数,它可以验证用户输入的数字是0还是1,长度是8位。 我知道我需要不断循环,直到它是正确的,但我不能让它验证输入正确。
请告诉我我做错了什么!我想学习:

您的代码包含很多复杂和错误。首先,您希望接受像“00000001”这样的字符串,但这不是一个有效的整数表示形式,因此如果它本身不包含错误,那么您的第一次测试将使它失败

你在函数的中间有一个用户输入命令,它假设一个给定的数字是否是一个有效的8位整数,它看起来像是坏的设计,而不是你要解决的问题的一部分。 最后,您只需检查输入的是81还是80,但这也不是您想要做的。由于00000000既不是有效的字符串文字,也不是有效的整数,因此该检查将不起作用

你可能在追求这样的东西:

def get8bit():
    while True:
        try:
            bNum = int(input('Please enter your 8 bit number'))
        except:
            print('Please only enter numbers 0 and 1')
        return bNum

def valid8bit(x):
    validChoices = [00000000,11111111]
    while x not in validChoices:
        x = int(input('Please only enter an 8 bit number:'))
        if x == validChoices:
         break
    return x

def convertodeci(y):
    y = y ** 2
    return y
    
user = get8bit()
thisValid = valid8bit(user)
userTodeci = convertodeci(thisValid)
print(userTodeci)
有很多方法可以跳过一只猫,正如@Enzo所建议的,这是另一种方法:

def valid8bit(s):
    return len(s) == 8 and all(ch in '01' for ch in s)

x = input('Enter an 8 digit binary number:')
print(valid8bit(x))

什么是程序给出错误结果的输入?您显示的代码没有正确缩进,因此它根本无法运行,也不能是给出正确或错误结果的代码。无效输入可能是8 0或8 1以外的任何内容,因此如果他们输入000000 20,则无效。这是否回答了您的问题?当他们进入00000020时,你的程序的结果是什么?很多方法都可以达到这个目的,我做了一些更字面的东西,但当然你的工作很好,在实践中@enzo更可取,如果尝试一下的话it@mkrieger1你说得对,我太笨了。谢谢你们向我指出这些错误!我是一名一年级学生,所以我非常感激我想要变得更好的反馈!我完全明白我在哪里犯了这些错误。我认为我完全需要花更多的时间思考函数应该如何工作,而不是在跳转时对它们进行编码,并为它们不工作而感到沮丧work@Greg对代码不起作用感到沮丧是作为一名程序员的一部分,尽早习惯并不是坏事。@MarkRansom是正确的,沮丧伴随着领域,但我认为你的回答很好。问问你自己,为什么我要把这个放在这里,我要解决什么问题?有没有其他解决方案没有这个问题?但最重要的是,我在这里真正想做什么,以及一旦您了解了所选语言的所有基本语言结构,那么分解它的最基本方法是什么?Python是一个不错的选择。
def valid8bit(s):
    try:
        return int(s, 2) in range(256)
    except ValueError:
        return False