-5

它打印 diga 和 digb 但不适用于 c!有什么帮助吗?它应该是一个 Denary 到 Binary 的转换器,但只有 1-64,一旦我破解了代码会增加这个!非常感谢

denaryno=int(input("Write a number from 1-64 "))
if 64%denaryno > 0:
    diga=0
    remaindera=(64%denaryno)
    if 32/denaryno<1:
        digb=1
        remainderb=(denaryno%32)
    else:
        digb =0
        if 16/remainderb<1:
            digc=1
            remainderc=(denaryno%16)
        else:
            digc=0
            if 8/remainderc<1:
                digd=1
                remainderd=(denaryno%8)
            else:
                digd=0
                if 4/remainderd<1:
                    dige=1
                    remaindere=(denary%4)
                else:
                    dige=0
                    if 2/remaindere<1:
                        digf=1
                        remainderf=(denary%2)
                    else:
                        digf=0
                        if 1/remainderf<1:
                            digg=1
                            remainderg=(denary%1)
                        else:
                            digg=0
print (str(diga)+str(digb))
4

2 回答 2

3

你只digc其中一个顶部设置if/else声明。如果32/denaryno<1True,则根本不设置digc

设置digc在函数的顶部(设置为0或您想要的任何其他内容)。这适用于所有数字变量、digddige等。

相反,您真正应该做的是使用数字列表,并在每次将数字除以一个因子时将 0 或 1 添加到该列表中。

你可能想看看这个divmod()函数;它返回商和余数。您还可以在此处进行一些循环以减少此处if所需的语句数量:

number = int(input("Write a number from 1-64 "))
digits = []
factor = 64
while number:
    quotient, number = divmod(number, factor)
    digits.append(quotient)
    factor //= 2
print(''.join(map(str, digits)))
于 2013-10-31T15:39:09.047 回答
1

哇,这是很多工作,你不必做所有这些。

def bin_convert(x, count=8):
    return "".join(map(lambda y:str((x>>y)&1), range(count-1, -1, -1)))

以下是包含此功能的功能,从简单->重要

str()返回一个字符串

range()是一种从一个号码到另一个号码的列表的方法。像这样写range(count-1, -1, -1)倒数。

"".join()是一种获取可迭代对象并将各个部分组合在一起的方法。

map()是一种获取函数并将其应用于可迭代对象的方法。

lambda是一种在 1 行中编写函数的方法。我很懒惰,本来可以写另一个def func_name(y),它也能正常工作。

>>是一种移位方式。(我相信理解这个是理解你的问题的关键组成部分)

于 2013-10-31T15:44:55.770 回答