2016-09-08 2 views
1

Hallo Ich habe Probleme mit einer Übung, die mich fragt, Code zu schreiben, der eine Funktion, 3 Wörterbücher und ein optionales Argument enthält.Compiler mein optionales Argument in Python nicht zu verstehen

Hier ist mein Code:

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) 

Jedes Mal, wenn ich versuche, meinen Code jedoch zu laufen, mein Compiler heißt es, dass es 1 erforderlichen Positions Argument fehlt: 'num_tracks' für meine zweite print-Anweisung.

Aber das sollte kein Problem sein, wegen meiner If-else-Anweisung, es sei denn, ich habe meinen Code falsch geschrieben und der Compiler liest meine If-else-Anweisung nicht? Jede Rückmeldung würde sehr geschätzt werden, danke für Ihre Zeit.

Antwort

2

Sie benötigen die Funktion mit einem default for the argument to be optionaldef, z.B .:

# 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 

Argumente ohne Standard sind immer erforderlich.

+0

Vielen Dank, ich habe einen Standard zu meinem optionalen Argument hinzugefügt. Wenn ich meinen Code ausführe, bekomme ich keinen Syntaxfehler mehr, aber '15' erscheint immer noch in meiner zweiten und dritten Druckanweisung, obwohl ich sie nicht in meine zweite und dritte Druckfunktion aufgenommen habe, und ich setze meine if-else-Anweisungen machen num_track optional. Hat jemand eine Ahnung, wo ich falsch gelaufen bin? – PhantomDiclonius

+1

@PhantomDiclonius: Haben Sie den Standard als 'num_tracks =" 15 "' so eingestellt, wie es die (jetzt gelöschte) andere Antwort getan hat? Das würde es verursachen. Setze 'num_tracks = None' (das Standardzeichen für" not provided/not set "), und führe die Testüberprüfung für' num_tracks is not None' durch. Daher wird es nur verwendet, wenn ein reeller Wert angegeben wird. – ShadowRanger

+0

Ja zuerst hatte ich num_tracks = '15 ', dann habe ich es auf None gesetzt, wie du gesagt hast und es hat funktioniert, danke. :) – PhantomDiclonius

Verwandte Themen