einfaches Progr. zur geometr. Berechnung: Hilfe, plz

Code-Stücke können hier veröffentlicht werden.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Beitragvon Python 47 » Montag 6. März 2006, 21:53

Damit das Ergebniss in der Konsole erkennbar wird, brauchst du kein sleep!Ich denke, du meinst, das das Programm sich nicht sofort beenden soll, wenn du es kompilierst und dann mit cmd aufrufst, dazu brauchst du:

import os
os.system('pause')
mfg

Thomas :-)
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Beitragvon modelnine » Montag 6. März 2006, 21:54

Ein einfaches

Code: Alles auswählen

raw_input()


tuts auch.
--- Heiko.
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Beitragvon Craven » Montag 6. März 2006, 21:55

Wenn du Integers teilst, wird das Ergebnis auf ganze Zahlen gerundet.

Danke, jetzt versteh ichs :shock:
Jetzt brauche ich nur noch sleep :D

MfG,
Craven

Code: Alles auswählen

q = 'q = %s; print q %% repr(q)'; print q % repr(q)
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Beitragvon modelnine » Montag 6. März 2006, 22:02

Siehe den Tipp mit raw_input().

Er wartet dann einfach auf 'ne Tasteneingabe, und das ist ziemlich genau das was Du willst...
--- Heiko.
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Beitragvon Craven » Montag 6. März 2006, 22:10

Danke, jetzt versteh ichs
Jetzt brauche ich nur noch sleep

sry, ich hab die vorherigen einträge übersehen! ich werds morgen sofort einbauen, Danke!

MfG,
Craven

Code: Alles auswählen

q = 'q = %s; print q %% repr(q)'; print q % repr(q)
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Beitragvon Craven » Dienstag 7. März 2006, 17:47

Hi,
Ich hab jetzt eine neue Version von dem script fertig:

Code: Alles auswählen

ein = raw_input('---> ')
from math import pi
import os

if ein == "Zylinder":  # steht für Zylinder
    print """
    Zylinder
    """
    zhoehe = float(raw_input("Höhe "))
    zradius = float(raw_input("Radius "))
    zvolumen = zradius**2 * zhoehe * pi
    #     print "%d * %d = %d" % (zradius**2, zhoehe, zvolumen)
    print zvolumen


elif ein == "Kegel":   # steht für Kegel
    print """
    Kegel
    """
    khoehe = float(raw_input("Höhe "))
    kradius = float(raw_input("Radius "))
    kvolumen = 1.0/3.0 * kradius**2 * khoehe * pi
    #     print "1/3 * %d * %d = %d" % (kradius**2, khoehe, kvolumen)
    print kvolumen


elif ein == "Kugel":   # steht für Kugel
    print """
    Kugel
    """
    kuradius = float(raw_input("Radius "))
    kuvolumen = 4.0/3.0 * kuradius**3 * pi
    #     print "4/3 * %d = %d" % (kuradius**2, kuvolumen)
    print kuvolumen


else:
    raise'Ein Fehler ist aufgetreten'
    os.system('pause')


MfG,
Craven

Code: Alles auswählen

q = 'q = %s; print q %% repr(q)'; print q % repr(q)
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Beitragvon Python 47 » Dienstag 7. März 2006, 21:02

1.das raw_input am Anfang kommt erst nach den imports!
2.Man weiß bei deinem Programm gar nicht was man eingeben soll, da das raw_input ohne text kommt!
mfg



Thomas :-)
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Beitragvon Craven » Dienstag 7. März 2006, 21:15

1.) Danke für den Hinweis mit raw_input, das hab ich übersehen
2.) Ich musste das script kürzen, da ich in der Originalfassung ellenlange Kommentare drinhatte :wink:

Danke für die Hilfe

MfG,
Craven

Code: Alles auswählen

q = 'q = %s; print q %% repr(q)'; print q % repr(q)
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Beitragvon Python 47 » Dienstag 7. März 2006, 21:51

Denk aber daran, das Kommentare wichig für andere sind, die deinen Code lesen!
mfg



Thomas :-)
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 8. März 2006, 08:52

Was hälst du davon:

Code: Alles auswählen

from math import pi
import os, inspect


# Zeigt die Formeln an
debug = False
#~ debug = True


def zylinder(h, r):
    if debug:
        print "%f**2 * %f = " % (r, h)
    return r**2 * h * pi


def kegel(h, r):
    if debug:
        print "1/3 * %f**2 * %f = " % (r, h)
    return 1.0/3.0 * r**2 * h * pi


def kugel(r):
    if debug:
        print r
        print "4/3 * %f**3 = " % r
    return 4.0/3.0 * r**3 * pi



# Übersetzungen für den Eingabeprompt
args_translation = {
    "r": "Radius",
    "h": "Höhe"
}


# Definiert, welche Aktionen es gibt
actions = [zylinder, kegel, kugel]




def print_menu():
    """
    Erstellt ein Menü anhand der definierten Aktionen
    """
    print "Bitte wähle aus:"
    print
    for no, action in enumerate(actions):
        name = action.__name__
        name = name.capitalize()
        print no+1, name

    print
    numbers = range(len(actions))
    numbers = [str(i+1) for i in numbers]
    numbers = "/".join(numbers)
    print "(%s)" % numbers,



def get_action():
    """
    Liefert die Funktion anhand der Eingaben zurück
    Wirft einen NameError, wenn sie nicht gefunden wurde
    """
    # Auswahl durch den User
    ein = raw_input("?")

    for no, action in enumerate(actions):
        if ein == str(no+1):
            return action
    raise NameError("Aktion unbekannt")



def print_function(action):
    """ Aktuelle Funktionsnamen anzeigen """
    name = action.__name__
    name = name.capitalize()
    print "\n%s" % name
    print "-" * len(name)
    print



def get_inputs(action):
    """
    Eingaben für aktuelle Funktion machen
    """
    # benötigten Werte für diese Aktion feststellen
    function_args = inspect.getargspec(action)[0]

    if debug: print function_args

    # Eingabe der Werte
    inputs = {}
    for arg in function_args:
        name = args_translation[arg] # richtiger Name

        value = float(
            raw_input("%s ? " % name)
        )

        inputs[arg] = value

    if debug: print "inputs:", inputs

    return inputs



def main():
    """
    Hauptprogramm
    """
    # Menü Anzeigen
    print_menu()

    # Funktion auswählen
    try:
        action = get_action()
    except NameError, e:
        print "Fehler:", e
        return

    # Funktionsnamen anzeigen
    print_function(action)
   
    # Eingaben machen
    inputs = get_inputs(action)
   
    # Funktion ausführen
    volumen = action(**inputs)

    print "Das Volumen ist:", volumen



if __name__ == "__main__":
    while 1:
        main()
        ein = raw_input("\nNoch mal? (j/n)")
        if ein[0].lower() != "j": break
        print


Ist zwar um einiges Aufwändiger, aber man kann es leichter mit neuen Funktionen erweitern...

Man könnte vielleicht auch die eigentlichen Formeln in die actions packen. Aber mir fällt spontan nur eine eval variante ein :(

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Beitragvon Craven » Mittwoch 8. März 2006, 16:04

Danke für die arbeit die du dir gemacht hast, aber jetzt bin ich an dem augenblich angelangt, an dem ich nichts mehr verstehe :shock:
Ich lerne python jetzt seit ca 4 wochen, aber das ist zu viel des guten :wink:

MfG,
Craven

Code: Alles auswählen

q = 'q = %s; print q %% repr(q)'; print q % repr(q)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder