1 variable für 2 werte

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
kornyclown

hallo zusammen.
ich bin unter anderem gelernter kameramann und habe vor ein paar tagen angefangen mich in python einzulesen.
heute hatte ich eine coole idee für eine praktische verwendung meines bisherigen wissens.
ich habe für kamera- und filminteressierte einen normalbrennweitenkalkulator geschrieben. der anhand der höhe und breite eines kamerasensors die dazu entsprenchende "normalbrennweite" errechnet.

der sieht so aus:
while True:
y = input("Höhe in mm: ")
x = input("Breite in mm: ")
z = (y*y) + (x*x)
print "Normalbrennweite = ", z**0.5, "mm"

das funktioniert ausgezeichnet aber ich hatte vor das ganze zu erweitern.
da vielen die größe des sensors (in mm) oft nicht bekannt ist, sehr wohl aber der name des formats wollte ich das ganze so stricken dass man einfach den namen des formats eingaben kann und direkt die entsprechende "normalbrennweite" geprintet bekommt.
ein beispiel:
die größe des kleinbildformates beträgt 24mm höhe, 36mm breite (y=24mm, x=36mm)
ich dachte mir das jetzt ungefähr so:
while True:
input("Format: ")
kleinbild = (y = 24), (x = 36)
z = (y*y) + (x*x)
print "Normalbrennweite = ", z**0.5, "mm"

mir ist klar dass das ein peinliches anfänger denken ist. dennoch würde ich gerne wissen ob und wie man eine variable (kleinbild) für zwei werte (y,x) stehen lassen kann.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Willkommen im Forum!

Ja, das geht. Stichwort Tupel (und Listen, ...) alternativ Klassen.

Mit dem Tupel ist der Ausschnitt dann:

Code: Alles auswählen

...
y = input("Höhe in mm: ")
x = input("Breite in mm: ")
lens = (x, y)
...
P.S. Bitte nutze in Zukunft Code-/Python-Tags
bords0
User
Beiträge: 234
Registriert: Mittwoch 4. Juli 2007, 20:40

Meinst du sowas (ungetestet)?

Code: Alles auswählen

dimensions = {"kleinbild": (24, 36), "aps": (17, 30)}

format_name = raw_input("Format: ")
x, y = dimensions[format_name]
z = x * x + y * y
print "Normalbrennweite = %0.3f mm" % z ** 0.5
deets

@cornyclown

Im Gegensatz zu meinem Vorredner halte ich Tupel und Listen nicht fuer geeignet - das, was du suchst, ist ein "dictionary". Damit bildet man Schluessel (uA strings, wie in deinem Fall) auf Werte ab:

Code: Alles auswählen


FORMATE = dict(
    kleinbild=(36.0, 24.0)
    )

while True:
    x = raw_input("Format (%s) oder Breite:" % (", ".join(FORMATE.keys())))
    if x in FORMATE:
        x, y = FORMATE[x]
    else:
        x = float(x)
        y = float(raw_input("Hoehe:"))
    print x, y
    
    
kornyclown

bords0 hat geschrieben:Meinst du sowas (ungetestet)?

Code: Alles auswählen

dimensions = {"kleinbild": (24, 36), "aps": (17, 30)}

format_name = raw_input("Format: ")
x, y = dimensions[format_name]
z = x * x + y * y
print "Normalbrennweite = %0.3f mm" % z ** 0.5
ja, super! genau so hab ich mir das vorgestellt.
danke
cofi hat geschrieben:
P.S. Bitte nutze in Zukunft Code-/Python-Tags
sorry, wusste ich nich. ich werde dran denken
cofi hat geschrieben: Mit dem Tupel ist der Ausschnitt dann:

Code: Alles auswählen

...
y = input("Höhe in mm: ")
x = input("Breite in mm: ")
lens = (x, y)
...
das versteh ich noch nich ganz. ich muss nur lens= (x,y) hinschreiben?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

kornyclown hat geschrieben:das versteh ich noch nich ganz. ich muss nur lens= (x,y) hinschreiben?
Wichtig ist der rechte Teil: Du konstruierst ein Tupel, indem du die Werte durch Kommata getrennt in Klammern schreibst.
Das Auspacken hat bords0 schon demonstriert, daneben gibt es noch den Zugriff per Index, also

Code: Alles auswählen

x = lens[0]
y = lens[1]
Mehr dazu hier: http://tutorial.pocoo.org/datastructure ... -sequenzen
kornyclown

Code: Alles auswählen

frage = kann man in einer variablen zwei werte haben?
antwort1 = cofi
antwort2 = bords0
summe = antwort1 + antwort2
hilfsreich = ja
if summe > hilfsreich:
    print "Geil"
Geil
Antworten