我正在尝试在python中创建一个程序,将十进制数转换为十六进制数。当我运行程序时,它给了我正确的转换,但它在无限循环上运行。我不确定无限循环在哪里发生。这是我的代码:
def remainderToHex(remainder):
if remainder <= 9:
remainder = str (remainder)
elif remainder == 10:
remainder = "A"
elif remainder == 11:
remainder = "B"
elif remainder == 12:
remainder = "C"
elif remainder == 13:
remainder = "D"
elif remainder == 14:
remainder = "E"
elif remainder == 15:
remainder = "F"
return remainder
def decToHex(decNum):
hexNum = ""
quotient = decNum
divNum=16
if quotient == 0:
hexNum = 0
while quotient > 0:
remainder = quotient % divNum
convertedHex= remainderToHex(remainder)
quotient = int (quotient / divNum)
hexNum = convertedHex + hexNum
return hexNum
def main():
decNum=int(raw_input("Please enter a non negative number OR enter -1 to quit: "))
while decNum >= -1:
hexNumber = decToHex(decNum)
print decNum, "convered to hex is: ", hexNumber
print "Thank you"
谢谢!
答案 0 :(得分:8)
你在做while decNum >= -1
。假设用户没有立即输入-1,那么decNum
永远不会小于-1,而while循环将永远不会结束。相反,使用if语句。如果用户输入-1,则结束该过程,否则进行转换。
正如已经指出的那样,>=
应为>
答案 1 :(得分:2)
我认为你想要做的是:
if __name__ == "__main__":
decNum = 0
while decNum > -1:
decNum=int(raw_input("Please enter a non negative number OR enter -1 to quit: "))
hexNumber = decToHex(decNum)
print decNum, "convered to hex is: ", hexNumber
print "Thank you"
但是,您也可以使用简单的if语句,可能是更好的方法,除非您不会在循环内部做更多的事情。另请注意,使用>= -1
即使在-1的情况下也会保持循环。
答案 2 :(得分:1)
发生无限循环,因为decNum
总是等于用户输入的任何值。所以while循环的条件总是正确的。
由于main函数不需要重复计算,因此将while
与if
交换,这是正确的语句,因为如果用户输入{{1},您可以选择退出}}。如果您的程序要求用户将多个值转换为十六进制,则需要-1
循环。如果是这种情况,请将while
赋值语句也移动到循环中。每次最后一个输入数字转换为十六进制时,这将要求decNum
的新值。如果用户在任何迭代中输入decNum
,则循环条件将失败,程序将移出它。
但是,如果您需要在用户输入-1
时退出,则您的情况也不正确。它可以是-1
或if decNum > -1
,无论哪种情况。
答案 3 :(得分:-1)
好吧,在我完成输入之前,其他所有人都打败了我的答案,所以我将其删除,并添加我认为必要的其他智慧:如果你正在学习Python ,你应该学习Python 3.x,而不是Python 2.x。
我不打算开始任何火焰战争,但是Python 2.x是一个死分支,未来是3.x
在2.x和3.x之间移动很容易,但为什么要学习旧版,除非你需要?
(是的,我知道那里还有很大的2.x代码库)