2016-09-05 8 views
0

私は各繰り返しで関数mainrt()を呼び出すwhileループを持っています。Python:whileループから関数を呼び出す際の問題

if __name__ == "__main__": 
    inp = sys.stdin.read() 
    inpList = inp.split('\n') 
    inpList.pop() 
    for n in inpList: 

     i = 0 
     p = 0 
     n = int (n) 
     while True: 
      i += 1 
      p = n*i 
      if n == 0: 
       print "INSOMNIA" 
       break 
      else: 
       res = True 
       res = mainrt(p) 
       if res == False: 
        print p 
        break 

そしてmainrt()i)が(stdin.readから関数によって適切に処理された入力の最初の行の入力を取るよう

def mainrt(n): 
    #print n 

    while True: 
     rem = n % 10 
     if rem in diMon: 
      pass 
     else: 
      diMon.insert(rem,rem) 

     if len(diMon) == 10: 

      return False 
      break 

     n = n/10 
     if n == 0: 
      return True 
      break 
     else: 
      continue 

問題があるが、2行目入力はそのまま出力されます。これは、関数 例えば

INPUT 
3 
5 

OUTPUT SHOLD BE 
30 
90 

But instead I get 
30 
5 

によって処理されていない理由入力された第2の時間を処理していない機能? これまでの実行時エラーはありません。

答えて

1

mainrt関数では、diMonというリストが宣言されていないので、グローバル変数であり、そのリストをクリーンアップしないようです。つまり、mainrtは、if len(diMon) == 10:の2番目の入力の最初のチェックでFalseを返します。 mainrtの先頭にdiMonを宣言するか、whileループの最後でそれをクリアする必要があります。

EDIT: は、今私はあなたのコードは、1つのより多くの時間をチェックし、私はあなたがforループの最初

for n in inpList: 

    diMon = [] 
    i = 0 
    p = 0 
    n = int (n) 
でダイモンを宣言することをお勧め
関連する問題