陷入无限循环

2024-06-02 14:45:05 发布

您现在位置: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" 

谢谢!在


Tags: 程序returnifdefintelifwhileremainder
3条回答

发生无限循环是因为decNum始终等于用户输入的任何值。所以while循环的条件总是为真。在

由于main函数中不需要重复计算,所以将whileif交换,这是这里的正确语句,因为如果用户输入{},则选择退出。如果程序要求用户将多个值转换为十六进制,则需要使用while循环。如果是这样,请将decNum赋值语句也移到循环中。这将要求每次将最后一个输入数字转换为十六进制时,decNum的新值。如果用户在任何迭代中输入-1,则循环条件将失败,程序将移出该循环条件。在

但是,如果用户输入-1,则您的条件也不正确。它可以是if decNum > -1或{},以哪种情况为准。在

我想你想做的是:

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,也会继续循环。在

你正在做while decNum >= -1。假设用户没有立即输入-1,那么decNum永远小于-1,while循环将永远不会结束。相反,请使用if语句。如果用户输入-1,则结束该过程,否则进行转换。在

正如已经指出的,>=应该是{}

相关问题 更多 >