Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 陷入无限循环_Python - Fatal编程技术网

Python 陷入无限循环

Python 陷入无限循环,python,Python,我正试图用python编写一个程序,将十进制数转换为十六进制数。当我运行程序时,它会给我正确的转换,但它运行在一个无限循环上。我不确定无限循环到底发生在哪里。这是我的代码: def remainderToHex(remainder): if remainder <= 9: remainder = str (remainder) elif remainder == 10: remainder = "A" elif remainder =

我正试图用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" 
def remainderToHex(余数):
如果余数为0:
余数=商%divNum
convertedHex=余数到十六进制(余数)
商=int(商/divNum)
hexNum=convertedHex+hexNum
返回hexNum
def main():
decNum=int(原始输入(“请输入非负数或输入-1以退出:”)
而decNum>=-1:
hexNumber=decToHex(decNum)
打印decNum,“转换为十六进制为:”,十六进制编号
打印“谢谢”

谢谢

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


正如已经指出的,当decNum>=-1时,
=
应该是您正在执行的
。假设用户没有立即输入-1,那么
decNum
将永远不会小于-1,while循环将永远不会结束。相反,使用if语句。如果用户输入-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的情况下,您也将保持循环。

我认为您想要做的是:

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的情况下,您也会继续循环。

好吧,在我输入答案之前,其他人都已经击败了我,所以我将删除它,并添加我认为唯一需要的其他一点智慧:如果您正在学习Python,您应该使用Python 3.x,而不是Python 2.x学习

我不想发动任何火焰之战,但Python2.x是一个死分支,未来是3.x

在2.x和3.x之间切换很容易,但是除非你需要,否则为什么要学习旧的呢


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

好吧,在我输入答案之前,其他人都已经击败了我,所以我将删除它,并添加我认为唯一需要的其他一点智慧:如果你在学习Python,你应该学习Python 3.x,而不是Python 2.x

我不想发动任何火焰之战,但Python2.x是一个死分支,未来是3.x

在2.x和3.x之间切换很容易,但是除非你需要,否则为什么要学习旧的呢


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

无限循环正在发生,因为
decNum
始终等于用户输入的任何值。因此while循环的条件始终为true

由于主功能中不需要重复计算,请将
while
if
交换,这是正确的说法,因为如果用户输入
-1
,您将选择退出。如果您的程序要求用户将多个值转换为十六进制,则需要
while
循环。如果是这种情况,请将
decNum
赋值语句也移动到循环中。每次将最后一个输入数字转换为十六进制时,这将要求为
decNum
输入一个新值。如果用户在任何迭代中输入
-1
,循环条件将失败,程序将退出循环


但是,如果用户输入
-1
时需要退出,则您的条件也不正确。如果decNum>-1或
而decNum!=-1
,以任何情况为准。

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

由于主功能中不需要重复计算,请将
while
if
交换,这是正确的说法,因为如果用户输入
-1
,您将选择退出。如果您的程序要求用户将多个值转换为十六进制,则需要
while
循环。如果是这种情况,请将
decNum
赋值语句也移动到循环中。每次将最后一个输入数字转换为十六进制时,这将要求为
decNum
输入一个新值。如果用户在任何迭代中输入
-1
,循环条件将失败,程序将退出循环


但是,如果用户输入
-1
时需要退出,则您的条件也不正确。如果decNum>-1或
而decNum!=-1
,无论哪种情况。

仅供参考,有一个内置函数
hex()
,它可以实现您想要的功能,。。。即使出于某种原因您不想使用
hex()
,该例程也有点难看。即使
返回“0123456789ABCDEF”[余数]
也更可取……我不应该为这段代码使用任何内置函数!仅供参考,有一个内置函数
hex()
,它可以实现您想要的功能,。。。即使出于某种原因您不想使用
hex()
,该例程也有点难看。即使
返回“0123456789ABCDEF”[余数]
也更可取……我不应该为这段代码使用任何内置函数!或者将
decNum
初始化为0,并将
raw\u输入
行置于t内