2016-09-08 12 views
1

こんにちは私は、関数、3つの辞書、およびオプションの引数を含むコードを記述するよう練習問題を抱えています。ここでコンパイラがPythonでオプションの引数を理解していない

が私のコードです:私の第二の印刷文の「num_tracks」:私はしかし、私のコードを実行しようとするたびに

def make_album(artist_name, album_title, num_tracks): 

    """Return artist and album title name.""" 
    CD1 = {'sonic': artist_name, 'his world': album_title} 
    CD2 = {'shadow': artist_name, 'all hail shadow': album_title} 
    CD3 = {'silver': artist_name, 'dream of an absolution': album_title} 
    if num_tracks: 
     CD = artist_name + ' ' + album_title + ' ' + num_tracks 
    else: 
     CD = artist_name + ' ' + album_title 
    return CD.title() 

disc = make_album('sonic', 'his world', '15') 
print(disc) 

disc = make_album('shadow', 'all hail shadow') 
print(disc) 

disc = make_album('silver', 'dream of an absolution') 
print(disc) 

、私のコンパイラは1つの必要な位置引数が欠落していると述べています。

私のコードを間違って書き、コンパイラがif-else文を読んでいない限り、これは私のif-else文のために問題ではありませんか?どんなフィードバックも大変ありがとうございます。ありがとうございました。

答えて

2

あなたはdefault for the argument to be optional、例えばと機能をdefする必要があります。:デフォルトなし

# num_tracks=None means if not provided, num_tracks is set to None 
def make_album(artist_name, album_title, num_tracks=None): 
    ... 
    if num_tracks is not None: 
     CD = artist_name + ' ' + album_title + ' ' + num_tracks 
    else: 
     CD = artist_name + ' ' + album_title 

引数は常に必要とされます。

+0

ありがとうございます。私は省略可能な引数にデフォルトを追加しました。私のコードを実行すると、もう構文エラーが出ませんが、2番目と3番目の印刷機能にインクルードしていないのに、2番目と3番目の印刷文に '15'が表示されてしまい、 num_trackをオプションにするif-elseステートメント誰かが私が間違っていたことを知っていますか? – PhantomDiclonius

+1

@PhantomDiclonius:(今削除された)他の回答のやり方で、デフォルトを 'num_tracks =" 15 "'に設定しましたか?それが原因です。それは 'num_tracks = None'(" not provided/not set "のための標準的なセンチネル)であり、' num_tracks is not'のテストチェックを行います。したがって、実際の値が与えられたときだけ使用されます。 – ShadowRanger

+0

はい、最初はnum_tracks = '15 'だったので、あなたが言ったようにNoneに設定しました。それはうまくいきました。ありがとうございます。 :) – PhantomDiclonius

関連する問題