Seite 1 von 1

Newbie - Frage zur for-Schleife und print mit %

Verfasst: Montag 13. August 2018, 16:49
von pganster
Hallo liebe Mitglieder :) ,

ich bin neu in Python eingestiegen und versuche seit nun einiger Zeit folgendes zu lösen:

Eine Rangfolge mit den Plätzen
1.
2.
3.
4.

Zu denen die Namen
1. Wolfgang
2. Hans
3. Dieter
4. Max

gelistet werden sollen, so ausgeben:
Gratuliere Wolfang zum 1 Platz
Gratuliere Hans zum 2 Platz
(...)


Mein Code sieht folgendermaßen aus:

[b]>>>a = ["Wolfgang", "Hans", "Dieter", "Max"]
>>>b = [1,2,3,4]

>>>zip (a,b)

>>>for x in zip (a,b):
... print "Gratuliere %s zum %d-ten Platz" %(a,b)

Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError: %d format: a number is required, not list.[/b]

Selbstverständlich freue ich mich über jegliche Tipps und Tricks, mit denen man einfacher auf die Lösung kommt. Aber eine Lösung zu meinem Code wäre wünschenswert.

LG
Philipp

Re: Newbie - Frage zur for-Schleife und print mit %

Verfasst: Montag 13. August 2018, 17:12
von ThomasL
mach in deiner for-schleife mal ein print x, print type(x) und schau mal was x ist.
deine Klammer (a,b) ist nicht das was du willst.

Re: Newbie - Frage zur for-Schleife und print mit %

Verfasst: Montag 13. August 2018, 17:31
von nezzcarth
Um einen bei Eins beginnenden, fortlaufenden Zähler zu erhalten, würde man eigentlich nicht erst eine "vorgefüllte" Liste, sondern einfach 'enumerate' verwenden.

Code: Alles auswählen

for i, item in enumerate(items, 1):
    ....

Re: Newbie - Frage zur for-Schleife und print mit %

Verfasst: Montag 13. August 2018, 17:32
von __blackjack__
Eine Liste mit fortlaufenden Zahlen ist auch nicht so das wahre. Da würde man eher die `enumerate()`-Funktion verwenden. Und vielleicht auch nicht mehr ``%`` sondern die `format()`-Methode.

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8
from __future__ import absolute_import, division, print_function


def main():
    names = ['Wolfgang', 'Hans', 'Dieter', 'Max']
    for place, name in enumerate(names, 1):
        print('Gratuliere {} zum {}. Platz.'.format(name, place))


if __name__ == '__main__':
    main()

Re: Newbie - Frage zur for-Schleife und print mit %

Verfasst: Dienstag 14. August 2018, 21:54
von pganster
Ich danke jedem von Euch für die schnelle Hilfe und den nützlichen Tipps - ich werde es direkt mal ausprobieren.

Viele Grüße

Re: Newbie - Frage zur for-Schleife und print mit %

Verfasst: Donnerstag 16. August 2018, 19:07
von pganster
__blackjack__ hat geschrieben: Montag 13. August 2018, 17:32 Eine Liste mit fortlaufenden Zahlen ist auch nicht so das wahre. Da würde man eher die `enumerate()`-Funktion verwenden. Und vielleicht auch nicht mehr ``%`` sondern die `format()`-Methode.

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8
from __future__ import absolute_import, division, print_function


def main():
    names = ['Wolfgang', 'Hans', 'Dieter', 'Max']
    for place, name in enumerate(names, 1):
        print('Gratuliere {} zum {}. Platz.'.format(name, place))


if __name__ == '__main__':
    main()
Hallo Blackjack,

vielen Dank für deinen Code - er funktioniert, wie erwartet, einwandfrei. Ich konnte alles nachvollziehen, außer den If-Befehl. Wie hängt der If teil mit dem oberen main () Teil zusammen. Kannst du mir das bitte etwas genauer erläutern.
Ich bin ein totaler Anfänger und es wäre wunderbar, wenn du mir etwas Hilfe zum Verstehen gibst.

LG
Philipp

Re: Newbie - Frage zur for-Schleife und print mit %

Verfasst: Donnerstag 16. August 2018, 20:49
von __blackjack__
@pganster: `__name__` ist eine Zeichenkette die den Namen des Moduls enthält wenn man es importiert aber den Wert '__main__' wenn das Modul als Programm ausgeführt wird. So kann man das Modul importieren ohne dass die `main()`-Funktion deswegen ausgeführt wird.