2016-09-15 14 views
2

私はPythonでのコーディングの初心者です。私はCodeWarsの演習で練習してきました。私のif文は空リストのために 'None'を返し続けます

あり、基本的にはあなたがFacebook上で「好き」の表示機能を再作成したいと考え、この運動は、だすなわち、それは私のコードである数はあなたがここでポストなどに

を持って好きな方法を示し:

def likes(names): 
    for name in names: 
     if len(names) == 0: 
      return 'no one likes this' 
     elif len(names) == 1: 
      return '%s likes this' % (name) 
     elif len(names) == 2: 
      return '%s and %s like this' % (names[0], names[1]) 
     elif len(names) == 3: 
      return '%s, %s and %s like this' % (names[0], names[1], names[2]) 
     elif len(names) >= 4: 
      return '%s, %s and %s others like this' % (names[0], names[1], len(names) - 2) 

print likes([]) 
print likes(['Peter']) 
print likes(['Alex', 'Jacob', 'Mark', 'Max']) 

これはアウト出力します

None 
Peter likes this 
Alex, Jacob and 2 others like this 

私の主な問題はここにあるというのが私の最初の文は、文字列は「誰がこれを好きではない」を生成されていない「場合は、」時に引数:[]空です。この問題を回避する方法はありますか?

+0

何も返さない関数はすべて明示的に 'None'を返すので、' None'を返しています。 – Tobias

+2

'for'で行を削除すると、それは – Dunno

+0

ありがとう! –

答えて

7

namesが空のリストの場合、forループはまったく実行されないため、関数はNoneを返します。関数の構造を変更する必要があります(ヒント:少なくとも明示的ではなくループを必要としないこともあります)。ループを持つことに意味はなく、最初の繰り返しにはreturnがあります。

+0

ありがとうございました! –

+0

「forループは全く実行されません」と言うのは厳密に正しいですか?たとえば、このループに 'else'節を置くと、節の後の文が実行されます。 –

4

あなたが行ったforループは、リストの各要素に対して1回発生しますが、リストに要素がないため、ループが発生せず、戻り値は "None"になります

def likes(names): 
    #for name in names: #LOOK HERE: you definetly not need this loop 
    if len(names) == 0: 
     return 'no one likes this' 
    elif len(names) == 1: 
     return '%s likes this' % (names[0]) 
    elif len(names) == 2: 
     return '%s and %s like this' % (names[0], names[1]) 
    elif len(names) == 3: 
     return '%s, %s and %s like this' % (names[0], names[1], names[2]) 
    elif len(names) >= 4: 
     return '%s, %s and %s others like this' % (names[0], names[1], len(names) - 2) 
+0

On Line 6:' return '%sはこの'%(names [0]) 'を好きです。そうでなければエラーを返します。あなたのアンカーに編集するには小さすぎます – Ross

+0

Rossにこの修正をお願いします。 –

関連する問題