Seite 1 von 1

If-abfrage mit Wörtern

Verfasst: Dienstag 4. Januar 2011, 18:22
von FeuerderVeränderung

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 ()

Re: If-abfrage mit Wörtern

Verfasst: Dienstag 4. Januar 2011, 18:29
von Leonidas
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?

Re: If-abfrage mit Wörtern

Verfasst: Dienstag 4. Januar 2011, 18:32
von FeuerderVeränderung
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.

Re: If-abfrage mit Wörtern

Verfasst: Dienstag 4. Januar 2011, 18:42
von Leonidas
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

Re: If-abfrage mit Wörtern

Verfasst: Dienstag 4. Januar 2011, 18:43
von DasIch
Vergleiche deinen Code mal allein vom Aussehen und Übersichtlichkeit her z.B. mit diesem.

Re: If-abfrage mit Wörtern

Verfasst: Dienstag 4. Januar 2011, 18:54
von str1442
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.

Re: If-abfrage mit Wörtern

Verfasst: Dienstag 4. Januar 2011, 19:34
von Xynon1
Hatte wir den Code nicht schonmal ?

Der hier ,oder ?
Achja, bitte nutze die Python-Tags.

Re: If-abfrage mit Wörtern

Verfasst: Mittwoch 5. Januar 2011, 14:27
von FeuerderVeränderung
@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

Re: If-abfrage mit Wörtern

Verfasst: Mittwoch 5. Januar 2011, 14:40
von cofi
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.