Newbie - Frage zur for-Schleife und print mit %

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
pganster
User
Beiträge: 4
Registriert: Montag 13. August 2018, 16:32

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
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

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.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

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):
    ....
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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()
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
pganster
User
Beiträge: 4
Registriert: Montag 13. August 2018, 16:32

Ich danke jedem von Euch für die schnelle Hilfe und den nützlichen Tipps - ich werde es direkt mal ausprobieren.

Viele Grüße
LG
Philipp
pganster
User
Beiträge: 4
Registriert: Montag 13. August 2018, 16:32

__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
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten