2017-08-12 242 views
0

我對python非常陌生,我在代碼中調用一個函數,它有一個while循環,代碼如下。問題是在循環的最後一個被更新的變量'n'沒有正確地改變它的值,而是得到值'0'。我已經通過pdb調試器進行了檢查。我無法理解它爲什麼會發生。我是PYTHON的新手。我錯了,它與C/C++? 這PROGRAMM產生隨機密鑰,我們必須坡口,這些隨機密鑰有時會 代碼之後重複:Python腳本執行錯誤

def answer(n, b): 


    cyclenum = 0 #his counts no. of times loop executes 

    desired_len = len(str(n)) 
    listofnums = [] 

    while True: 
     newnum = str(n) 
     if newnum in listofnums: 
      print(cyclenum) 
      break 

    bla=newnum.split() #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
    x5=int(bla[0]) 
    x4=[] 
    while(x5>0): 
     t=x5%10 
     x4.append(t) # in this para , the sole aim is to rearrange the 
     x5 = x5/10  # digits of the no. in descending order 
     x3 = sorted(x4, key=int, reverse=True) 
    x2=map(str,x3) 
    x1=''.join(x2)   
    bla=x1.split() 
    x=int(bla[0]) #!!!!!!!!!!!!!!!!!!!!!!!!!! 


    bla=newnum.split() 
    y5=int(bla[0]) 
    y4=[] 
    while(y5>0): 
     t=y5%10 
     y4.append(t) #if 0 comes in start due to ascending order 
     y5 = y5/10  # they are ignored 
     y3 = sorted(y4, key=int) 
    y2=map(str,y3) 
    y1=''.join(y2)   
    bla=y1.split() 
    y=int(bla[0]) 


    z = x - y 

    newz=0 
    if len(str(z)) != desired_len: 
    newz = map(int, str(z)) 
    lendiff = desired_len - len(str(z)) 
    newz = list(newz) 
    for i in range(0, lendiff): 
     newz.insert(0, 0)     #here ignored 0 are added 
    cyclenum += 1       #to keep the length constant 
    listofnums.append(newnum)     
    n = newz 


answer(n="210022",b=3) 

******************** **編輯1 對不起,縮進錯誤是一個錯誤

+2

您的代碼的縮進錯誤。爲了我們能夠幫助您,您需要以正確的格式提供代碼。另一方面,問題可能出現在'newz = 0'這一行,因爲你將'newz'分配給'n'。 – EsotericVoid

+0

如果我們知道該代碼應該做什麼,那將會更容易幫助您。請給我們一個總體概述,並在代碼中添加註釋,以解釋每個部分試圖實現的內容。我懷疑'bla = x1.split()'和'bla = y1.split()'沒有做你期望的。順便說一句,你可能應該使用'/ /'而不是'/';在Python 2中並不重要,但它在Python 3中有很大的不同。 –

+0

@Bit我認爲你得到我的問題,我對使用全局關鍵字 –

回答

0

您是否檢查過,當您執行它時,以下if語句的計算結果爲true?

if len(str(z)) != desired_len: 

這可以解釋爲什麼它停留在0

+0

中添加註釋爲你可以看到第一次迭代,表達式將評估爲假,即使'n'爲'0' –