Neuling sucht Rat

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.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Code: Alles auswählen


# Geografiespiel
hauptstadt = { "Italien": "Rom", "Spanien":"Madrid","Portugal":"Lissabon"}
hs = hauptstadt.items()

for land, stadt in hs:
    eingabe = input("bitte die Hauptstadt von "+land+" eingeben:")
    if eingabe==stadt:
        print("Richtig")
    else:
        print("Falsch richtig ist",stadt)


kann mir da bitte jemand
for land, stadt in hs:
erklären?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ich gebe dir stattdessen einen Hinweis und ein Stichwort: Schau dir mal im Interpreter an, was `hs` ist und schlage "Tuple unpacking" (oder auch "sequence unpacking") im Tutorial nach.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

hauptstadt ist ein Dictionary
hs ist demzufolge ein view von hauptstadt in dem die Elemente(Schlüssel:Wert) gespeichert sind

Dann bedeutet
for land, stadt in hs:
das die Schleife so lange ausgeführt wird bis alle Land:Stadt Elemente durchgegangen sind?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Genau. Nur:

Code: Alles auswählen

>>> hauptstadt = { "Italien": "Rom", "Spanien":"Madrid","Portugal":"Lissabon"}
>>> list(hauptstadt.items())
[('Spanien', 'Madrid'), ('Italien', 'Rom'), ('Portugal', 'Lissabon')]
Was ich im speziellen meinte: `items` gibt dir einen Generator/View zurueck, der Tupel enthaelt.

Code: Alles auswählen

>>> hs = iter(hauptstadt.items())
>>> land, stadt = next(hs)
>>> land
'Spanien'
>>> stadt
'Madrid'
>>> land, stadt
('Spanien', 'Madrid')
>>> hs = iter(hauptstadt.items())
>>> next(hs)
('Spanien', 'Madrid')
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Dann sind die "items" quasi auch nur die jeweiligen Werte?
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Hm okay - ..jetzt bin ich wohl an dem Punkt angekommen wo ich einfach nur ???????????? sehe - und ich bin noch nicht mal bei OOp
format()
ist ja mal total :shock:
BlackJack

@Tengel: Wieso denn? Wo liegt das konkrete Problem?
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Code: Alles auswählen


x = 100/7
y = 2/7
print("Zahlen:")
print(x,y)
print()

#2: Format f
print("Format f")
print("{0:f} {0:f}{1:f}".format(x,y))
print("{0:15.10f}{1:.25f}".format(x,y))
print()

#3: Format e
print("Format e")
print("{0:e}".format(x))
print("{0:12.3e}".format(x))
print("{0:3e}".format(x))
print()

#4: Format %
print("Format %")
print("{0:%}".format(y))
print("{0:12.3%}".format(y))
print("{0:3%}".format(y))


Das ist das "kleine" Beispiel aus dem Buch - ...es gibt noch eins das Fast 2 Seiten lang ist - und das hat schon wenig Spass gemacht zum abtippen - und die Erklärung dazu ist nahezu nicht existent.
BlackJack

@Tengel: Da kann man in die Python-Dokumentation schauen. Das es '%' gibt wusste ich bisher noch gar nicht, und das einzige was ich bisher von den anderen gezeigten wirklich gebraucht habe ist 'f'. Ganz grob ist das 'a.bf' wobei a die Gesamtanzahl der Stellen und b die Stellen nach dem Komma angibt. Beides ist optional. Man kann bei a noch eine führende 0 angeben, dann wird auch vor dem Komma mit 0en aufgefüllt.
Sirius3
User
Beiträge: 18265
Registriert: Sonntag 21. Oktober 2012, 17:20

@Tengel: format ersetzt Platzhalter in einem String durch Werte, die übergeben werden. Da man mit format verschieden Objekte unterschiedlich formatieren kann, ist die Dokumentation dazu entsprechend lang. Wenn Du aber einmal damit umgehen kannst, willst Du es nicht mehr hergeben ;-)
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Traceback (most recent call last):
File "D:/Phyton/Übungen/ausgabe_tabelle.py", line 16, in <module>
print("{0:>4}{1:>12}{2:>4}{3:>13}{4:>13}",format("Nr","Name","Anz","EP","GP"))
TypeError: format() takes at most 2 arguments (5 given)



was genau will mir das sagen ...ich habs 1:1 wies im Buch steht - und die Ausgabe davor wird auch anders wie im Buch ausgegeben - langsam nimmt mir dieser format() sch... wirklich denn Spaß
BlackJack

@Tengel: Du hast hier aus einem Punkt ein Komma gemacht und damit nicht die `format()`-Methode auf Zeichenketten sondern die eingebaute `format()`-Funktion aufgerufen.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Ja ist mir als ich mich an die Übung gemacht habe auch aufgefallen.
Behoben - jetzt kommt an einer anderen Stelle ein Fehler aber nun ja:>

Code: Alles auswählen

umrechnungsfaktor_inch = 2.54

print("{0:>7} {1:>7}".format("Inch","cm"))
for inch in range(15,41,5):
    print("{0:>7.2f} {1:>7.2f}".format(inch,inch*umrechnungsfaktor_inch))




Ist meine Lösung und die Ausgabe stimmt - ob das jetzt "richtig" programmiert ist lass ich mal im Raum stehen.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Code: Alles auswählen

umrechnungsfaktor_inch = 2.54

print("{0:>7} {1:>7}".format("cm","Inch"))
for cm in range(15,41,5):
    print("{0:>7.2f} {1:>7.2f}".format(cm,cm*umrechnungsfaktor_inch))
:wink:
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Ok - warum genau ist meins nicht farbig?
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Ich wollte jetzt gar nicht auf das highlighting hinweisen, sondern darauf, dass Du cm mit inch verwechselst...

[ code ] foo bar [ /code ]

vs.

[ python ] bzw. [ code=python ] foo bar [ /python ] bzw. [ /code ]

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Ja das ist mir nicht entgangen - aber das krieg ich gerade noch hin ohne Hilfe zu ändern :), im Gegensatz zur "bunten Ausgabe"
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

a = "Hallo Hallo Hallo Hallo"
print("{0:5}".format(a))



müsste das nicht eigentlich abgeschnitten werden?
BlackJack

@Tengel: Nein, das ist eher als Minimalwert zu sehen. Wenn man abschneiden will kann man „slicing” auf der Zeichenkette verwenden.
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Naja was heißt "wollen" ich dachte nur das der String halt so formatiert wird das er nur die angegebene Elementanzahl "unterbringen kann" - ist mir nur beim rumprobieren aufgefallen.
Antworten