2017-11-21 5 views
1

私は大学ではこの練習をしなければなりません。基本的には、関数findurls(urls、s、k)を作成する必要があります。urlsはURLのリストで、sは文字列、nは文字列がURLを返すために必要な時間です。たとえば、私のリストに "Python"という文字列が少なくとも2回含まれているURLがある場合、関数は2回以上出現する文字列 "Python"を持つリストのURLのみを返します。私はこのコードを書いた:URLを読んで文字列を含むウェブサイトのURLをn回返す

def findurl(urls,s,k): 
    count = 0 
    for url in urls: 
    f = ul.urlopen(url) 
    r = f.read() 
    if s in url: 
    count += 1 
    if count <= k: 
    return url 

残念ながら、それは、単一のURLを返しますが、私は、少なくとも2回起こる私のリスト上の少なくとも4つのURLは文字列「のPython」を持っていることを確実に知ります。どのように私はこれを修正するのですか?

編集:

デフfindurl(URLを、S、K):

...:  for url in urls: 
...:  f = ul.urlopen(url) 
...:  r = f.read() 
...:  for s in url: 
...:   count = url.count(s) 
...:  if count >= k: 
...:  return url 
...: 
...: 

、今ではやや...働く私はこのように、あなたの提案に私のコードの感謝を修正しました。多くの 'Python'文字列を持つhttp://www.python.org/は返されません。私はテキストにURLを変換する必要があります、それらをエンコードする?

+1

ヒント 'string.count(substring)'は、部分文字列が文字列に何回あるかを示します。 – Reti43

答えて

0

これは宿題に関する質問ですので、私はあなたにコードを提供していないだけで、あなたのコードを修正するためのいくつかの提案と方法を提供していません。

コードに間違いがあります。私の理解では、文字列が別の文字列に現れる回数を数えたいと思っています。あなたのコードはそうではありません。どれくらい多くのURLにsがあるのか​​を数えます。

また、<=>=である必要があります。現在、kが0より大きい限り、これは常に最初の繰り返しに戻ります。

第3に、複数の一致するURLを保存しません。この具体的なケースでは、リスト内包表記やfilterの機能を参照することをお勧めします。いずれの場合でも、def行を含む2行のコードでこれを行うことができます。

+0

それは、私が講義のスライドに載せたかどうかを確認するための練習だけではなく、残念ながら私はそうではない、段階的な宿題ではありません。私は>記号を変更してstring.count(部分文字列)を使ってみましたが、今は何も返しません。私はこのレッスンまで私が勉強したことすべてでそれをしなければならないので、フィルターを使用することはできません。フィルター機能はまだ行っていません。 – LordGriffith

+0

リスト内包表記を使用しましたか?この場合、リストの理解は完璧です。 list comprehensionsは、 '' condition(foo)が ''(foo)のfooの場合は '' bar(foo) ''の形式で書くことができます。 –

関連する問題