我现在读10年级(9年级),我正在为学校做一个程序,在python上把二进制数转换成十进制数,反之亦然。我的编码知识不是很好,所以程序可能没有它可以,所以请与我忍受的效率。你知道吗
下面的代码正在检查用户输入是否只包含1和0,并且不超过8位的最大值。当我运行它并输入一个无效的数字时,它工作正常,循环正常,但当我输入一个有效的数字时,它会继续返回到input命令,并要求我输入一些东西,而不是跳出循环并转到下一个东西。请帮帮我!你知道吗
max_8bits = 1
only_bin = 1
while max_8bits > 0 or only_bin > 0:
b2d_num = input("Enter a binary number:")
for i in range(len(b2d_num)):
if b2d_num[i] == "0" or b2d_num[i] == "1":
if i == len(b2d_num):
only_bin -= 1
else:
print("Only enter a binary number! (0's and 1's)")
break
if len(b2d_num) > 8:
print("Only enter up to 8 bits!")
elif len(b2d_num) <= 8:
max_8bits -= 1
条件
i == len(b2d_num)
永远不会是True
,因为最后一次循环迭代是使用i == len(b2d_num) - 1
。你知道吗例如
主要的问题是,您从未设置退出循环的标志。在0-7的循环中,永远不会有索引
8
。 当您break
退出for
循环时,您没有正确地管理这些值。建议:代码:
条件
if i == len(b2d_num):
永远不会满足,因为range()
运算符不包含停止值,因此i
的最后一个值将是len(b2d_num) - 1
。你知道吗Python语言的目标是非常可读,您可以使用
bool
而不是int
来改进代码。这可能是一种改进:您在一篇评论中提到,您对遍历元素而不是使用位置访问的循环犹豫不决。它们比位置访问要快得多。下面是一个比较:
如您所见,使用对列表元素的位置访问会导致循环花费大约3倍的时间(这可能会有所不同,但这是一个很强的指示符)。使用
for elem in elem_list
可读性更强,速度更快。你知道吗相关问题 更多 >
编程相关推荐