Seite 1 von 2

einfaches Progr. zur geometr. Berechnung: Hilfe, plz

Verfasst: Montag 6. März 2006, 14:57
von Craven
Hi,
ich bin nicht der beste in Mathe, also dachte ich mir, es wäre schön, wenn ich ein Programm hätte, mit dem ich meine Ergebnisse überprüfen kann!
Ich hab mir in Wirtschaft und Recht ein kleines script gebastelt, das sich aber nicht ausführen lassen will :roll:

Code: Alles auswählen

import os
import sys
import math

print 'x = Zylinder; y = Kegel; z = Kugel'
raw_input()

if raw_input == x:
    print """
    Zylinder
    """
    input('Höhe') = a
    input('Radius') = b
    print "%d * %d = %d" % (b**b, a, c)
    print c
    print 'Das Ergebnis wird ohne pi angegeben!'

elif raw_input == y:
    print """
    Kegel
    """
    input('Höhe') = a
    input('Radius') = b
    print '1/3 * %d * %d = %d' % (b**b, a, c)
    print c
    print 'Das Ergebnis wird ohne pi angegeben!'

elif raw_input == z:
    print """
    Kugel
    """
    input('Radius') = b
    print '4/3 * %d = %d' % (b**b, c)
    print c
    print 'Das Ergebnis wird ohne pi angegeben!'

else:
    raise 'Ein Fehler ist aufgetreten.'
    exit()
IDLE sagt, es liegt in der 13. Zeile. "Cant assign to call"

Danke im voraus,
Craven

Verfasst: Montag 6. März 2006, 15:01
von mr.hide
Hi,

da stimmt was mit deiner Zuweisung nicht.

Du willst ja den "input" a zuweisen.

Also musst du auch schreiben:

Code: Alles auswählen

a = input("blabla")
Dann dürfte es gehen ... mal abgesehen von den anderen Fehlern.
Aber du wirst merken was ich meine...

Verfasst: Montag 6. März 2006, 15:31
von Craven
Danke für die schnelle Antwort, mr. hide!
Ich habs korrigiert, hab aber dafür jetzt Probleme mit dem "raw_input"! :oops:

Danke im Voraus,
Craven

Verfasst: Montag 6. März 2006, 15:36
von mr.hide
So als Denkanstoss,

wenn da raw_unput steht, wartet das system auf eine Eingabe.
Bei dir steht das 4 mal da also müsstest du 4 mal was eingeben.

So wie ich das Programm versteh willst du aber einmal was eingeben und das in eine variable speichern ...

Verfasst: Montag 6. März 2006, 16:31
von helmut
Der Wert, der über 'raw_input()' eingelesen wird, muss zur weiteren Verarbeitung einer Variablen zugewiesen werden:

Code: Alles auswählen

ein = raw_input()

if ein == x:
    tue was
elif ein == y:
    tue was anderes
"usw"
____________
Gruss, Helmut

Verfasst: Montag 6. März 2006, 16:55
von Craven
hi,
ich hab mein komplettes script dem angeglichen:

Code: Alles auswählen

import os
import sys
import math

ein = raw_input()

if ein == x:
    print """
    Zylinder
    """
    a = input("Höhe")
    b = input("Radius")
    print "%d * %d = %d" % (b**b, a, c)
    print c
    print "Das Ergebnis wird ohne pi angegeben!"

elif ein == y:
    print """
    Kegel
    """
    a = input("Höhe")
    b = input("Radius")
    print "1/3 * %d * %d = %d" % (b**b, a, c)
    print c
    print "Das Ergebnis wird ohne pi angegeben!"

elif ein == z:
    print """
    Kugel
    """
    b = input("Radius")
    print "4/3 * %d = %d" % (b**b, c)
    print c
    print "Das Ergebnis wird ohne pi angegeben!"

else:
    raise "Ein Fehler ist aufgetreten."
    exit()
Kann sich bitte jemand das ganze script ansehen, damit ich nicht verrückt werde? :wink:

MfG,
Craven

-> edit: Rechtschreibfehler :wink:

Verfasst: Montag 6. März 2006, 17:03
von Rebecca
Du willst, dass, wenn der User zum Bsp. ein x eintippt, der Zylinderteil ausgefuehrt wird? Dann muss es heissen:

Code: Alles auswählen

if ein == "x"
(Gaensefuesschen!)

Und du gibtst c aus, ohne es irgendwo zu berechnen!

Uebrigens benutzt du die Module, die du importierst, gar nicht.

EDIT: a, b, c sind nicht gerade sprechende Variablennamen.

Verfasst: Montag 6. März 2006, 17:31
von Craven
Ich dachte mir, dass man als erstes aufgefordert wird zwischen den drei Figuren zu wählen, dann wird man aufgefordert, Radius und Höhe anzugeben. Danach müsste die Lösung, also das Volumen ausgegeben werden.

Ich hab das script jetzt nochmal überarbeitet:
-Mit Anführungszeichen
-nicht benutzte Module entfernt
-Kommentare
-v (alias c) berechnet

Schaut bitte obs jetzt stimmt

Code: Alles auswählen

import sys

ein = raw_input()

if ein == "x":  # steht für Zylinder
    print "Zylinder"
    h = input("Höhe")
    r = input("Radius")
    v = r**2 * h
    print "%d * %d = %d" % (r**2, h, v)   #r ist der Radius, h die Höhe, v das Volumen
    print v
    print "Das Ergebnis wird ohne pi angegeben!"

elif ein == "y":   # steht für Kegel
    print "Kegel"
    h = input("Höhe")
    r = input("Radius")
    v = 1/3 * (r**r) * h
    print "1/3 * %d * %d = %d" % (r**2, h, v)
    print v
    print "Das Ergebnis wird ohne pi angegeben!"

elif ein == "z":   # steht für Kugel
    print "Kugel"
    r = input("Radius")
    v = 4/3 * r**2
    print "4/3 * %d = %d" % (r**2, v)
    print v
    print "Das Ergebnis wird ohne pi angegeben!"

else:
    raise "Ein Fehler ist aufgetreten."
    exit()

Verfasst: Montag 6. März 2006, 18:09
von jens
Warum hattest du Probleme mit raw_input() ??? Generell ist es immer zu empfehlen, auf input() zu verzichten, s. http://wiki.python.de/Thema_Sicherheit#InputRawInput

In deinem Falle benötigst du ja Zahlen und keine String, von daher mußt du einfach nur statt h = input("Höhe") ein h = float(raw_input("Höhe")) machen

Verfasst: Montag 6. März 2006, 18:48
von Burning Fox
Hi,
Ich glaube Craven meint das so:

Code: Alles auswählen

ein = raw_input()

if ein == "x": 
.
.
.
elif ein == "y":
Dann bringt IDLE einen Fehler:

Traceback (most recent call last):
File "C:\prog.py", line 18, in ?
ein = raw_input()
TypeError: 'str' object is not callable


cya,
BF

Verfasst: Montag 6. März 2006, 18:51
von modelnine
So als Anregung könnte auch folgendes Programm hilfreich sein was ich mal in einem anderen Thread geschrieben hab:

http://www.python-forum.de/viewtopic.php?p=29369#29369

Verfasst: Montag 6. März 2006, 19:23
von Craven
hi,
Danke, das sind doch mal hilfreiche Einträge :)
Ich setze mich mal dahinter

MfG,
Craven

Verfasst: Montag 6. März 2006, 19:26
von Python 47
Und die ganze sache mit dem Formatoperator %d ist auch nicht nötig!

Verfasst: Montag 6. März 2006, 21:37
von Craven
Hi,
So, ich hab mal 2 Stunden geschlafen und dann das Programm überarbeitet :D :

Code: Alles auswählen

print """
Geben Sie 'Kugel', 'Zylinder' oder 'Kegel' ein, um das Volumen dafür zu \n
berechnen, in dieser Version können Sie bis jetzt nur das Volumen \n
berechnen, weitere Versionen folgen noch :)
"""
ein = raw_input('---> ')
from math import pi
from time import sleep

if ein == "Zylinder":  # steht für Zylinder
    print """
    Sie haben den Zylinder gewählt; \n
    geben Sie nun Radius und Höhe an
    """
    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 """
    Sie haben den Kegel gewählt; \n
    geben sie nun Radius und Höhe an
    """
    khoehe = float(raw_input("Höhe "))
    kradius = float(raw_input("Radius "))
    kvolumen = 1/3 * kradius**2 * khoehe * pi
    #     print "1/3 * %d * %d = %d" % (kradius**2, khoehe, kvolumen)
    print kvolumen


elif ein == "Kugel":   # steht für Kugel
    print """
    Sie haben die Kugel gewählt; \n
    geben sie nun den Radius an.
    """
    kuradius = float(raw_input("Radius "))
    kuvolumen = 4/3 * kuradius**3 * pi
    #     print "4/3 * %d = %d" % (kuradius**2, kuvolumen)
    print kuvolumen


else:
    raise """
    ...
    """
    exit()
Ich hab jetzt 2 Probleme:
1.) Bei "Kegel" gibt es 0.0 aus
2.) Bei "Kugel" beträgt das Ergebnis nur ca 75% vom richtigen Ergebnis

Wie kann ich sleep einsetzen, damit das Ergebnis mit der console erkennbar ist?

MfG,
Craven

Verfasst: Montag 6. März 2006, 21:52
von Rebecca

Code: Alles auswählen

>>> print 1/3
0
>>> print 4/3
1
>>> print 1.0/3.0
0.333333333333
>>> print 4.0/3.0
1.33333333333
Wenn du Integers teilst, wird das Ergebnis auf ganze Zahlen gerundet.

Mach doch zum Schluss noch ein raw_input(""), dann kannst du das Ergebnis anschauen und danach einfach Return druecken.

Verfasst: Montag 6. März 2006, 21:53
von Python 47
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')

Verfasst: Montag 6. März 2006, 21:54
von modelnine
Ein einfaches

Code: Alles auswählen

raw_input()
tuts auch.

Verfasst: Montag 6. März 2006, 21:55
von Craven
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

Verfasst: Montag 6. März 2006, 22:02
von modelnine
Siehe den Tipp mit raw_input().

Er wartet dann einfach auf 'ne Tasteneingabe, und das ist ziemlich genau das was Du willst...

Verfasst: Montag 6. März 2006, 22:10
von Craven
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