我正在编写一个从整数输入计算二进制数的程序。我无法弄清楚如何反转输出代码以显示二进制数字。下面的程序可以工作,但不会以正确的顺序输出位。
例如,当我输入156
时,答案应该是00111001
的反义词,但是我无法让程序将其向后输出以显示10011100
。
这应该是一个从整数计算二进制数的程序。
它应该提示用户输入整数number = int(input("Enter number: "))
并计算二进制数,或者如果输入的数字类型不正确,则发出警告。
if number > 0:
while number != 0:
if number % 2 == 0:
code = "0"
new_number = number //2
number = new_number
else:
code = "1"
new_number = number //2
number = new_number
reverse_code = code[::-1]
print(reverse_code, end='') else:
print ("Invalid Input. System will now self-destruct.")
答案 0 :(得分:1)
您正在将每个元素(1或0)打印到循环中。您应该将所有1/0连接起来,并在最后反转。
编程循环时请注意。您正在尝试设置一个值,该值是根据特定迭代中的迭代构建的。当您的脚本计算code
的值(例如1
)时,它将反转该数字并跳转到下一个迭代,重复该过程。
解决方案是在所有迭代中逐步构建一个反向字符串。下一个代码定义一个空字符串,并在上一个结果之前连接0或1。
示例:
# Initialize reverse_code variable
reverse_code = ""
while number != 0:
if number % 2 == 0:
code = "0"
new_number = number //2
number = new_number
else:
code = "1"
new_number = number //2
number = new_number
reverse_code = code + reverse_code
print(reverse_code)
如果number = 10
:
1010
当while
循环开始迭代时,它将数字除以2,我们想反转除法结果以获得二进制代码。代替计算结果,我们可以在计算时间内创建结果。为此,我们将reverse_code
定义为一个空字符串。在每次迭代中,我们都将新项目(1或0)放在字符串之前,以获得反字符串。
reverse_code
在number=10
时的迭代值:
迭代0:
code
= 0
reverse_code
= code
+ reverse_code
=“ 0” +“” =“ 0”
迭代1:
code
= 1
reverse_code
= code
+ reverse_code
=“ 1” +“ 0” =“ 10”
....
迭代N:
code
= 1
reverse_code
= code
+ reverse_code
=“ 1” +“ 010” =“ 1010”
要评论的另一个问题是您的代码优化。观看代码,如果其他情况(如果您具有new_number
和number
变量分配,则不受先前变量code
的影响)。您可以提取公因子并简化代码。代码如下:
# Initialize reverse_code variable
reverse_code = ""
while number != 0:
# Calculate the `code` value
if number % 2 == 0:
code = "0"
else:
code = "1"
# Putting this here simplifies duplicate instructions
new_number = number //2
number = new_number
# Putting 0 or 1 (code) before semi-built string (reverse_code)
reverse_code = code + reverse_code
print(reverse_code)