einfaches Progr. zur geometr. Berechnung: Hilfe, plz

Code-Stücke können hier veröffentlicht werden.
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Montag 6. März 2006, 14:57

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
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
mr.hide
User
Beiträge: 108
Registriert: Montag 29. August 2005, 14:02

Montag 6. März 2006, 15:01

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...
Grüße
Matthias

- Fluchen befreit von Kummer und Leid -
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Montag 6. März 2006, 15:31

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
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
mr.hide
User
Beiträge: 108
Registriert: Montag 29. August 2005, 14:02

Montag 6. März 2006, 15:36

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 ...
Grüße
Matthias

- Fluchen befreit von Kummer und Leid -
helmut
User
Beiträge: 57
Registriert: Mittwoch 2. November 2005, 07:45
Wohnort: Dormagen

Montag 6. März 2006, 16:31

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
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Montag 6. März 2006, 16:55

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:
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Montag 6. März 2006, 17:03

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.
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Montag 6. März 2006, 17:31

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()
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Benutzeravatar
jens
Moderator
Beiträge: 8481
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 6. März 2006, 18:09

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Burning Fox
User
Beiträge: 3
Registriert: Dienstag 24. Januar 2006, 14:08

Montag 6. März 2006, 18:48

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
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Montag 6. März 2006, 18:51

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
--- Heiko.
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Montag 6. März 2006, 19:23

hi,
Danke, das sind doch mal hilfreiche Einträge :)
Ich setze mich mal dahinter

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

Montag 6. März 2006, 19:26

Und die ganze sache mit dem Formatoperator %d ist auch nicht nötig!
mfg

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

Montag 6. März 2006, 21:37

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
Zuletzt geändert von Craven am Dienstag 13. Januar 2009, 13:03, insgesamt 1-mal geändert.
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Montag 6. März 2006, 21:52

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.
Zuletzt geändert von Rebecca am Montag 6. März 2006, 21:54, insgesamt 1-mal geändert.
Antworten