它打印diga和sign但不适用于c!有帮助吗?它应该是一个Denary到二进制转换器,但只有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))
答案 0 :(得分:3)
您只需在最高digc
/ if
语句的一个中设置else
。如果32/denaryno<1
为True
,则根本不设置digc
。
将digc
设置在函数顶部(0
或其他任何您想要的内容)。这适用于所有数字变量,digd
,dige
等。
应该做的是使用数字列表,每次将数字除以一个因子时,都会在该列表中附加0或1。
您可能需要查看divmod()
function;它返回商和余数。你也可以在这里做一些循环来减少这里需要的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)))
答案 1 :(得分:1)
def bin_convert(x, count=8):
return "".join(map(lambda y:str((x>>y)&1), range(count-1, -1, -1)))
这里的功能包括easy-&gt; important
str()
返回一个字符串
range()
是一种从1个号码到另一个号码的列表。像这样写range(count-1, -1, -1)
倒数。
"".join()
是一种采用迭代并将各个部分放在一起的方法。
map()
是一种获取函数并将其应用于迭代的方法。
lambda
是一种在一行中编写函数的方法。我很懒,本来可以写另一个def func_name(y)
,它也会起作用。
>>
是一种移位的方法。 (我相信理解这个是理解你的问题的关键因素)