如何改进此代码的功能[关闭]

2024-04-17

a1 = input("Enter an 8 bit  binary number to convert: ")

a1 = list(a1)

ok = False;

if a1[0] == '0':
    ok = True

if a1[0] == '1':
    ok = True

if a1[1] == '0':
    ok = True

if a1[1] == '1':
    ok = True

if a1[2] == '0':
    ok = True

if a1[2] == '1':
    ok = True

if a1[3] == '0':
    ok = True

if a1[3] == '1':
    ok = True

if a1[4] == '0':
    ok = True

if a1[4] == '1':
    ok = True

if a1[5] == '0':
    ok = True

if a1[5] == '1':
    ok = True

if a1[6] == '0':
    ok = True

if a1[6] == '1':
    ok = True

if a1[7] == '0':
    ok = True

if a1[7] == '1':
    ok = True

if ok == True:
    print("Number is binary!")


n1 = 0

if a1[7] == '1':
    n1 = 1

if a1[6] == '1':
    n1 = n1 + 2

if a1[5] == '1':
    n1 = n1 + 4

if a1[4] == '1':
    n1 = n1 + 8

if a1[3] == '1':
    n1 = n1 + 16

if a1[2] == '1':
    n1 = n1 + 32

if a1[1] == '1':
    n1 = n1 + 64

if a1[0] == '1':
    n1 = n1 + 128

print("Denary number is: " + str(n1))

Use a set https://docs.python.org/3/library/stdtypes.html#set:

a1 = input("Enter an 8 bit  binary number to convert: ")

if set(a1) <= set('01'):
    print("Number is binary!")

这仅在以下情况下成立:set(a1)是一个子集set('01'):

>>> set('10011') <= set('01')
True
>>> set('10011abc') <= set('01')
False

您也可以只使用异常(并且int() https://docs.python.org/3/library/functions.html#int进行二进制 -> 整数转换):

try:
    n1 = int(a1, 2)
except ValueError:
    print("Not binary")
else:
    print("Number is binary")
    print("Denary number is: {}".format(n1))

这样做的另一个优点是可以一步将二进制输入转换为整数。

如果您不想或可以使用int(),用循环转换回来并使用<<左移 https://docs.python.org/3/reference/expressions.html#shifting-operations对于每个二进制数字,以及|二进制按位或 https://docs.python.org/3/reference/expressions.html#binary-bitwise-operations添加新数字:

n1 = 0
for digit in a1:
    n1 = (n1 << 1) | (1 if digit == '1' else 0)

这是一种获取数字的迂回方式,但至少您现在正在使用二进制逻辑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何改进此代码的功能[关闭] 的相关文章

随机推荐