Hi leute hänge grad fest an einer aufgabe undzwar
8-9. Magicians:Make a list of magician’s names .Pass the list to a function
called show_magicians(), which prints the name of each magician in the list .
8-10. Great Magicians:Start with a copy of your program from Exercise 8-9 .
Write a function called make_great()that modifies the list of magicians by adding the phrase the Greatto each magician’s name .Call show_magicians()to
see that the list has actually been modified .
def show_magicians(magicians):
""" print magicians names """
for magician in magicians:
print(magician)
magicians = ['freddy', 'robbin', 'krao']
show_magicians(magicians)
def make_great(magicians, great_mag):
""" build the print with the great """
while magicians:
magician = magicians.pop()
print(magician.title() + " the great ")
great_mag.append(magician)
for great_ma in great_mag:
magicians.append(great_ma)
magicians = ['freddy', 'robbin', 'krao']
great_mag = []
show_magicians(magicians)
print("\n")
make_great(magicians, great_mag)
show_magicians(magicians)
Und zwar sollte sich die liste zum schluss ändern aber sie bleibt immer noch die selbe könnt ihr mir helfen bitte ?
Funktion
Bitte die Code-Tags verwenden, so kann man deinen Sourcecode schwer entziffern.
Und du aenderst eben die Liste nicht, sondern erzeugst eine neue. Einen Eintrag in einer Liste aendern kann man auf diverse Arten und Weisen, aber am einfachsten ist wohl
Und wenn man ueber eine Liste iterieren will, und gleichzeitig den Index des Elementes braucht, weil man es ggf. in-place aendern will, dann kann man enumerate benutzen:
Last but not least: ich wuerde das niemals so machen, dass ich die Ursprungsliste veraender. Sondern immer einen neue Liste erzeugen, und die dann ggf. an "magicians" binden. Also reicht eine einfach List-Comprehension schon aus:
Natuerlich muss das als Teil einer Funktion gemacht und zurueck gegeben werden.
Und du aenderst eben die Liste nicht, sondern erzeugst eine neue. Einen Eintrag in einer Liste aendern kann man auf diverse Arten und Weisen, aber am einfachsten ist wohl
Code: Alles auswählen
liste[index] = ein_wert
Code: Alles auswählen
for i, wert in enumerate(liste):
Code: Alles auswählen
great_magicians = ["Great " + mage for mage in magicians]
Wenn die Liste gleich bleiben soll würde ich es so machen:
Du übergibst folgende Liste:
mit Enumerate wird für über den Index und den Wert gleichzeitig iteriert.
0 freddy
1 robbin
2 krao
Code: Alles auswählen
def make_great(magicians):
""" build the print with the great """
for index, magician in enumerate(magicians):
magicians[index] = "{} the great".format(magician)
return magicians
Code: Alles auswählen
magicians = ['freddy', 'robbin', 'krao']
0 freddy
1 robbin
2 krao
@Fakhro: Einrückung ist wichtig, daher solltest Du Code hier im Forum in Code-Tags packen.
Das hin- und her-schieben der Einträge der Liste `magicians` ist schlecht. In Python erzeugt man immer neue Listen, statt alte zu ändern. Statt der while-Schleife benutze eine for-Schleife. Auch ist daher die Aufgabenstellung schlecht, weil sie fordert, dass eine Liste geändert wird. Auch wenn Du das ignorierst, sollte `great_mag` eine lokale Variable sein, und nicht von außen kommen.
Bisher gibst Du nur einen String für jeden Magier aus, statt die geänderten Strings in eine Liste zu stecken. Was Du aber bekommst, ist, dass die Reihenfolge umgedreht ist, was man auch einfacher per `reverse` machen könnte.
Das hin- und her-schieben der Einträge der Liste `magicians` ist schlecht. In Python erzeugt man immer neue Listen, statt alte zu ändern. Statt der while-Schleife benutze eine for-Schleife. Auch ist daher die Aufgabenstellung schlecht, weil sie fordert, dass eine Liste geändert wird. Auch wenn Du das ignorierst, sollte `great_mag` eine lokale Variable sein, und nicht von außen kommen.
Bisher gibst Du nur einen String für jeden Magier aus, statt die geänderten Strings in eine Liste zu stecken. Was Du aber bekommst, ist, dass die Reihenfolge umgedreht ist, was man auch einfacher per `reverse` machen könnte.
Code: Alles auswählen
def make_great(magicians):
return [f"{m.title()} the great" for m in magicians]