带错误报告的二进制到十进制计算器

Binary to Decimal calculator with error report

写了一段代码,我想将二进制数转换为十进制数,如果输入包含非二进制数,程序应该自行终止。但是当我输入像 1112 这样的数字时,它会忽略 2 并继续使用剩余的二进制数进行计算。

这是大学的家庭作业,所以打算在没有二进制函数的情况下进行此计算。

binär = input()
binärZahl1 = "0"
binärZahl2 = "1"

for charh in binär:
    for char1 in binärZahl1:
        for char2 in binärZahl2:
            if charh == char1 or charh == char2:
                binär = binär[::-1]
                sum = 0
                for i in range(len(binär)):
                    if binär[i] == "1":
                        sum += 2**i
            elif charh != char2 or charh != char2:
                print("Bitte nur binäre Zahlen eingeben")
                break
print(sum)

那是因为你的 break 只跳出了最内层的循环。在您的情况下,您可以安全地删除两个最里面的循环(因为 binärZahl1binärZahl2 无论如何只有一个条目......)。像

binär = input()
binärZahl1 = "0"
binärZahl2 = "1"

for charh in binär:
    if charh == binärZahl1 or charh == binärZahl2:
        binär = binär[::-1]
        sum = 0
        for i in range(len(binär)):
            if binär[i] == "1":
                sum += 2**i
    elif charh != binärZahl1 or charh != binärZahl2:
        print("Bitte nur binäre Zahlen eingeben")
        break
print(sum)

按预期工作。请注意,您的示例中有一个错字,在您的 elif 中,您与 char2 进行了两次比较。

但是:仍然有一些非常不必要的循环。这通常会导致错误(例如,您一直在翻转 binär)。减去错误检查,您的整个代码可以缩短为

binär = input()

binär = binär[::-1]
sum = 0
for i in range(len(binär)):
    if binär[i] == "1":
        sum += 2**i
print(sum)

您仍然可以在其中检查循环内的有效性。 A