陷入无限循环

时间:2015-01-30 20:27:46

标签: python

我正在尝试在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" 

谢谢!

4 个答案:

答案 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函数不需要重复计算,因此将whileif交换,这是正确的语句,因为如果用户输入{{1},您可以选择退出}}。如果您的程序要求用户将多个值转换为十六进制,则需要-1循环。如果是这种情况,请将while赋值语句也移动到循环中。每次最后一个输入数字转换为十六进制时,这将要求decNum的新值。如果用户在任何迭代中输入decNum,则循环条件将失败,程序将移出它。

但是,如果您需要在用户输入-1时退出,则您的情况也不正确。它可以是-1if decNum > -1,无论哪种情况。

答案 3 :(得分:-1)

好吧,在我完成输入之前,其他所有人都打败了我的答案,所以我将其删除,并添加我认为必要的其他智慧:如果你正在学习Python ,你应该学习Python 3.x,而不是Python 2.x。

我不打算开始任何火焰战争,但是Python 2.x是一个死分支,未来是3.x

在2.x和3.x之间移动很容易,但为什么要学习旧版,除非你需要?

(是的,我知道那里还有很大的2.x代码库)