2017-06-28 10 views
0

の条件がFalseの場合、再帰的なメソッドを呼び出して呼び出しようとしています。 COUNT_NUMが0である方法は、単に自分自身を繰り返し続け、両方printメソッドは無限ループに入ります

ない私はあなたがしているので、あなたが無限ループに実行されている間違った

import urllib.request 
from bs4 import BeautifulSoup 

URL = input("Enter URL: ") 
COUNT = input("Enter count: ") 
POS = input("Enter position: ") 

def retrieveNames(url, count=1, position=1): 
    """ Retrieves a name from url """ 

    POSITION_NUM = int(position) 
    COUNT_NUM = int(count) 

    if (POSITION_NUM< 1): return 

    html = urllib.request.urlopen(url).read() 
    soup = BeautifulSoup(html, "html.parser") 

    tags = soup("a") 
    countNum = COUNT_NUM - 1 

    tag = tags[POSITION_NUM-1] 
    print("COUNT:", countNum > 0) 
    while countNum > 0: 
     retrieveNames(tag.get("href"), countNum, position) 

    print(tag.contents[0]) 
    return 

retrieveNames(URL, COUNT, POS) 
+2

'while count> 0:'を 'if count> 0:'に置き換えたいと思うかもしれません。さもなければ、whileループは 'count> 0'なら永遠に実行されます。あるいは、代わりに 'count = COUNT_NUM-1'の代わりに' while'ループ内で 'count - = 1'を設定してください。 –

+0

OK、 'count'変数は、別の名前にする必要がありますが、' count> 0'はFalseを返します。それでは、どうやってループを続けますか? :/ –

+0

@JimFasarakisHilliardあなたはそれを詳述できますか? whileループの条件が偽であるため、それがどうなるかわからない –

答えて

0

をやっているかわからを返すときけれども、私が取得することですあなたの関数を再帰的に呼び出します。つまり、変数countnumは元の関数呼び出しと再帰呼び出しの複数のスコープに存在します。これは、retrieveNamesを呼び出すときにcountnumに何が起こっても、whileループ内のcountnumの値には影響しないことを意味します。したがって、whileループから抜け出すことはありません。 それでは、あなたがやりたいことは、リターンcountnumのいずれかである:

while countNum > 0: 
    countNum = retrieveNames(tag.get("href"), countNum, position) 
return countNum 

OR if文にwhile文を変更します。

関連する問題