If-abfrage mit Wörtern

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
FeuerderVeränderung
User
Beiträge: 12
Registriert: Dienstag 30. November 2010, 15:10

Code: Alles auswählen

def v_masse_masse ():
    print ("Geben sie bitte das Geschossgewicht in Gramm an")
    masse3=input ()       
    if (masse3==stay):
        print ("Der Wert wurde behalten")
    else:
        global masse2
        masse2=float (masse3)
        global masse
        masse=masse2/1000 
Hi,
also ich möchte das man stay eingibt wenn man den Wert in der Variable nicht ändern will. Allerdings "denkt" die if-abfrage stay sei eine Variable. Hab schon die Suchfunktion benutzt, aber nichts gefunden, auch habe ich ins Python Wiki geschaut und nichts gefunden.
Schonmal im Voraus vielen Dank für eure Antwort.

Kompleter Code:

Code: Alles auswählen

import math
def v_masse_masse ():
    print ("Geben sie bitte das Geschossgewicht in Gramm an")
    masse3=input ()       
    if (masse3==stay):
        print ("Der Wert wurde behalten")
    else:
        global masse2
        masse2=float (masse3)
        global masse
        masse=masse2/1000
def v_muendungsgeschwindigkeit_muendungsgeschwindigkeit ():
    print ("Geben sie bitte die Muendungsgeschwindigkeit in m/s an")
    muendungsgeschwindigkeit2=input ()
    muendungsgeschwindigkeit2=float (muendungsgeschwindigkeit2)
    if (muendungsgeschwindigkeit2==0):
        print ("Der Wert wurde behalten")
    else:
        global muendungsgeschwindigkeit
        muendungsgeschwindigkeit=float (muendungsgeschwindigkeit2)
def v_material_material ():
    print ("Geben sie das Gewicht des Materials in kg pro Kubikmeter an")
    spezifischesgewicht2=input ()
    spezifischesgewicht2=float (spezifischesgewicht2)
    if (spezifischesgewicht2==0):
        print ("Der Wert wurde behalten")
    else:
        global spezifischesgewicht
        spezifischesgewicht=float (spezifischesgewicht2)
def v_laenge_l ():
    print ("Geben sie bitte die Geschosslaenge in Milimeter an")
    l2=input ()
    l2=float (l2)
    if (l2==0):
        print ("Der Wert wurde behalten")
    else:
        l3=float (l2)
        global l
        l=l3/1000
def v_kaliber_d ():
    print ("Geben sie bitte das Geschosskaliber in Millimeter an")
    d2=input ()
    d2=float (d2)
    if (d2==0):
        print ("Der Wert wurde behalten")
    else:
        d3=float (d2)
        global d
        d=d3/1000
def v_form_cw ():
    print ("Geben sie bitte an die Form an.")
    print ("Quader=1")
    print ("Rechteck=2")
    print ("Halbkugel (Bei Patronen wählen)=3")
    print ("Kugel=4")
    print ("Kreisplatte=5")
    cw2=input ()
    cw2=int (cw2)
    global cw
    if (cw2==1):
        cw2=1.3
        cw=float (cw2)
    elif (cw2==2):
        cw2=1.3
        cw=float (cw2)
    elif (cw2==3):
        cw2=0.4
        cw=float (cw2)
    elif (cw2==4):
        cw2=0.45
        cw=float (cw2)
    elif (cw2==5):
        cw2=0.45
        cw=float (cw2)
    else:
        print ("Sie haben einen Fehler gemacht")
        v_form_cw ()
def v_strecke_strecke ():
    print ("Geben sie bitte die Strecke in Metern an (Bitte keine Zahlen mit Nachkommastellen)")
    global strecke
    strecke=input ()
    strecke2=int (strecke)
    strecke=strecke2
def geschossenergierechner ():
    energie=masse/2*muendungsgeschwindigkeit*muendungsgeschwindigkeit
    print ("Die Muendungsgeschwindigkeit ist:",muendungsgeschwindigkeit,"m/s")
    print ("Das Geschossgewicht ist:",masse,"kg oder",masse2,"g")
    print ("Die Muendungsenergie in Joule ist:",energie,"J")
    print ("Die Rechnung war:",masse,"/2*",muendungsgeschwindigkeit,"*",muendungsgeschwindigkeit,)
    menue_main ()
def materialrechner ():
    v=d*d*3.14/4*l
    v2=float (v)
    masse=spezifischesgewicht*v2
    masse2=masse*1000
    print ("Das Geschossgewicht ist:",masse,"kg oder",masse2,"g")
    print ("Die Rechnung war:(",d,"*",d,"*3.14/4*l)*",spezifischesgewicht,)
    menue_main ()
def streckenenergierechner ():
    flaeche=d*d*3.1415/4
    realestrecke=0
    energie=masse/2*muendungsgeschwindigkeit*muendungsgeschwindigkeit
    print ("Möchten sie die Rechnung anzeigen lassen")
    print ("Ja=0")
    print ("Nein=1")
    rechnung=float (input ())
    if (rechnung==0):
        while (realestrecke<strecke):
            energie2=0.5*1.2*1*flaeche*cw*muendungsgeschwindigkeit*muendungsgeschwindigkeit
            energie3=energie-energie2
            energie=energie3
            global muendungsgeschwindigkeit
            muendungsgeschwindigkeit=(energie3*2/masse)**0.5
            realestrecke=realestrecke+1
            rechnung=rechnung+1
            print ("Rechnung Nr.",rechnung,":((",energie,"-(0.5*1.2*1*",flaeche,"*",cw,"*",muendungsgeschwindigkeit,"*",muendungsgeschwindigkeit,"))*",energie3,"*2/",masse,")^2")
    else:
        while (realestrecke<strecke):
            energie2=0.5*1.2*1*flaeche*cw*muendungsgeschwindigkeit*muendungsgeschwindigkeit
            energie3=energie-energie2
            energie=energie3
            global muendungsgeschwindigkeit
            muendungsgeschwindigkeit=(energie3*2/masse)**0.5
            realestrecke=realestrecke+1
            rechnung=rechnung+1
    print ("Die Strecke war",strecke,"Meter lang")
    print ("Das Geschossgewicht liegt bei",masse,"kg oder",masse2,"g")
    print ("Die Energie beim Aufprall liegt bei",energie,"J")
    print ("Es trifft mit einer Geschwindigkeit von",muendungsgeschwindigkeit,"m/s")
    menue_main ()
def menue_main ():    
    print ("Energierechner=1")
    print ("Gewichtrechner=2")
    print ("Streckenergierechner=3")
    print ("Readme=4")
    auswahl2=input ()
    auswahl=int (auswahl2)
    if (auswahl==1):
        v_masse_masse ()
        v_muendungsgeschwindigkeit_muendungsgeschwindigkeit ()
        geschossenergierechner ()
    elif (auswahl==2):
        v_material_material ()
        v_laenge_l ()
        v_kaliber_d ()
        materialrechner ()
    elif (auswahl==3):
        v_muendungsgeschwindigkeit_muendungsgeschwindigkeit ()
        v_masse_masse ()
        v_strecke_strecke ()
        v_kaliber_d ()
        v_form_cw ()
        streckenenergierechner ()
    elif (auswahl==4):
        print ("Sie können bei allen abfragen außer der Form den Wert 0 eingeben")
        print ("um einen alten Wert zu behalten dies führt allerdings wenn noch kein Wert")
        print ("für die Variable existiert zum Program absturz")
        menue_main ()
menue_main ()
mfg Feuer der Veränderung
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also wenn du Strings nicht kennst dann solltest du dir das Tutorial ansehen.

Code: Alles auswählen

if masse3 == "stay":
Und das der Code grauenhaft ist, ist dir sicher bekannt, oder? Hast du Interesse den zu verbessern?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
FeuerderVeränderung
User
Beiträge: 12
Registriert: Dienstag 30. November 2010, 15:10

Vielen Dank,
ich habe vor den Code noch zu erweitern und zu verbessern.
Aber mal aus interesse was ist grauenvoll am Code? Ich persöhnlich erkenne nur 1-2 Stellen wo ich improviesiert habe.
mfg Feuer der Veränderung
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

In keiner bestimmten Reihenfolge, einige Punkte sind schlimmer als andere:
  • Hält sich nicht an PEP8 (komische Spaces vor Klammern) etwa
  • Viel zu dicht, ein paar Newlines würden der Lesbarkeit helfen
  • Grausame Namen, insbesondere die Prefixe, aber auch bei ``v_muendungsgeschwindigkeit_muendungsgeschwindigkeit`` wird mir ganz anders. Da ist der Name fast schon lang genug um die maximale Zeilenlänge zu sprengen.
  • Die Klammern um die Statements wie ``if`` sind total nutzlos, sollte man der übersicht halber weglassen.
  • Floats auf Gleichheit prüfen ist idR keine gute Idee.
  • Nummerierte Namen? Ohje
  • ``print`` unterstützt auch Multi-Line-Strings.
  • Statt der Kommasyntax wäre String-Formatting wohl schöner.
  • Diese ewig lange Zeile ist 1) ewig lang 2) voller magischer Zahlen.
  • Dieses Modul ist nicht sinnvoll importierbar
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Vergleiche deinen Code mal allein vom Aussehen und Übersichtlichkeit her z.B. mit diesem.
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Aber mal aus interesse was ist grauenvoll am Code? Ich persöhnlich erkenne nur 1-2 Stellen wo ich improviesiert habe.
Jede Funktion schmeisst IO Abfragen und die vorherige Aufbereitung dieser (print("Ja = 1")) mit der eigentlichen Verarbeitung durcheinander. Anstatt geeignete Datenstrukturen zu benutzen legst du einen Haufen Variablen an und fuehrst die Berechnung mit diesen durch. Deine Namen sind nicht sehr aussagekräftig und von der restlichen Struktur des Programmes losgelöst und zeigen schon Probleme auf, zb. die Nummierung der einzelnen Massen. Unnötige Verwendung von globals, alle Funktionen sind miteinander verbunden. Du kannst keine einzeln ausfuehren, ohne zb vorher eine bestimmte andere ausgefuehrt zu haben. Deine Funktionen haben offensichtlich eine gemeinsame Struktur, aber diese wird nur durch Namen dargelegt. Statische If Abfragen um die Art der Berechnung ("Kugel = 5") zu ermitteln, wenn du auch einfach die Struktur reifizieren könntest und eine Liste von Strukturen benutzen könntest. Der wichtigste Schritt zur Verbesserung des Programmes ist die Separierung der einzelnen Verantwortlichkeiten, die deine Funktionen erfüllen müssen.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Hatte wir den Code nicht schonmal ?

Der hier ,oder ?
Achja, bitte nutze die Python-Tags.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
FeuerderVeränderung
User
Beiträge: 12
Registriert: Dienstag 30. November 2010, 15:10

@all Vielen dank für die Kritik ich werde versuchen sie zu beherzigen, allerdings ist keines der globals so wie ich es sehe nutzlos würde nämlich auch nur eines fehlen würde das Programm nicht mehr funken, dass einzige was ich mir vorstellen kann ist das man die globals alle an den Programmstart setzt und in den Namen steckt ein System der erste Teil (v=variable) beschreibt was es ist, der zweite wofür die Variable ist und der dritte den Namen der Variable.
Und was die vielen Prints und Leertasten zwischen dem Befehl und den Klammern angeht bin ich einfach nur von einer Scriptsprache in einem Spiel geschädigt ;)
@Xynon1 Nicht ganz, ich habe beschlossen das Interface weg zulassen und mich statdessen ganz auf funktionalität des Programmes zu konzentrieren.

Nochmals vielen Dank für eure Kritik
mfg Feuer der Veränderung
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

FeuerderVeränderung hat geschrieben:@all Vielen dank für die Kritik ich werde versuchen sie zu beherzigen, allerdings ist keines der globals so wie ich es sehe nutzlos würde nämlich auch nur eines fehlen würde das Programm nicht mehr funken, dass einzige was ich mir vorstellen kann ist das man die globals alle an den Programmstart setzt und in den Namen steckt ein System der erste Teil (v=variable) beschreibt was es ist, der zweite wofür die Variable ist und der dritte den Namen der Variable.
Nein, das geht am Problem vorbei. Natuerlich sind sie nicht nutzlos, denn das ist ein Strukturproblem. Aber du kannst ohne weiteres den Code so umschreiben, dass er `return` benutzt. Werte sollten Funktionen als Parameter betreten und als Rueckgabewerte verlassen. Du benutzt weder Parameter noch Rueckgabewerte, dann kann das Programm nur so aussehen. Aber ein Problem sind sie trotzdem, weil man einen komplett undurchsichtigen Datenfluss hat.
Antworten