Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo,

als Beginner übe ich Einstiegsprogramme auf Python. Hier geht es um Berechnung einer mathematischen Funktion (Wertebereich)

Ich schreibe ein Python-Programm das vom Benutzer zwei Zahlenwerte x_anfang und x_ende  (Ganzzahlen) anfordert.
Die mathematische Funktion soll dann für alle Werte in diesem Wertebereich berechnet werden:

y = ½ x³ – ½ x² + 2x + 3

Die jeweiligen x und y Werte sollen auf dem Bildschirm ausgeben werden.

---------------------

Das Programm habe ich so geschrieben:

from math import *

x_anfang=float(input("Eingabe_Anfangswert:"))
x_ende=float(input("Eingabe_Endwert:"))
sw=float(input("Eingabe_Schrittweite:"))

x=float

y = 1/2*x**3 - 1/2*x**2 + 2*x + 3

for x in arange(x_anfang, x_ende, sw):

    print("x=", x)
    print("y=", y)
    #print()

Nach dem "RUN" erhalte ich Eingabenaufforderungen, aber danach Fehlermeldung:

>>> 
 RESTART: C:/....... Berechnung math Funkion.py 
Eingabe_Anfangswert:1
Eingabe_Endwert:3
Eingabe_Schrittweite:1
Traceback (most recent call last):
  File "C:/........... Berechnung math Funkion.py", line 9, in <module>
    y = 1/2*x**3 - 1/2*x**2 + 2*x + 3
TypeError: unsupported operand type(s) for ** or pow(): 'type' and 'int'
>>> 

Was ist mein Fehler und wie kann ich das Programm fehlerfrei und lauffähig machen? Bitte um Korrektur.

 

 

Geschrieben (bearbeitet)

Ich halte nichts davon, Lösungen zu geben. Man lernt mehr, wenn man sich die selbst erarbeitet.

Aber deinen Fehler zeige ich dir gern, du hast ihn nämlich bereits dort stehen.

vor 8 Stunden schrieb ankon:

TypeError: unsupported operand type(s) for ** or pow(): 'type' and 'int'

pow(), bzw dein ** erwartet also einen bestimmten Datentyp zur Verarbeitung.

Und du übergibst ihm..

vor 8 Stunden schrieb ankon:

x_anfang=float(input("Eingabe_Anfangswert:"))
x_ende=float(input("Eingabe_Endwert:"))

 

Bearbeitet von RubberDog
Geschrieben (bearbeitet)

Huhu,

also ich kenne mich jetzt nicht so sehr mit Python aus, aber rein syntaktisch hat dein x doch gar keinen Wert zu dem Zeitpunkt, wo du damit y berechnen möchtest. Natürlich gibt es dann einen Fehler.

Du solltest sowohl die Berechnung als auch die Ausgabe in die Schleife packen.

@RubberDog er übergibt seiner Berechnung nicht x_anfang bzw. x_ende, sondern lediglich x, was aber nur einen Typ besitzt und keinen Wert, afaik.

Bearbeitet von Rienne
Geschrieben
vor 14 Minuten schrieb Rienne:


@RubberDog er übergibt seiner Berechnung nicht x_anfang bzw. x_ende, sondern lediglich x, was aber nur einen Typ besitzt und keinen Wert, afaik.

In der for-schleife versucht er aber genau das mit x_anfang und x_ende.

Geschrieben

 

vor 1 Minute schrieb RubberDog:

In der for-schleife versucht er aber genau das mit x_anfang und x_ende.

Nein, eben nicht. Die Formel wird außerhalb der Schleife berechnet und er verwendet dort x und x eine Klasse von Typ "float".

x=float
print(x)

Ausgabe:
<class 'float'>

Gefordert ist auch laut Aufgabe, dass nur Ganzzahlen verwendet werden sollen und keine Fließkommazahlen. Die Umwandlung ist somit überflüssig. Zu mal die range()-Funktion mit Fließkommazahlen ebenfalls nicht umgehen kann.

Geschrieben (bearbeitet)

Mal ganz davon abgesehen, dass die Aufgabenstellung ganze Zahlen fordert:

Ich habe den Code getestet und die Berechnung selber klappt einwandfrei mit Zahlen vom Typ float. Das Problem ist einfach, dass zum Zeitpunkt, wo y berechnet werden soll, x keinen verwertbaren Wert enthält.

vor 28 Minuten schrieb RubberDog:

In der for-schleife versucht er aber genau das mit x_anfang und x_ende.

Ich finde es immer wieder interessant, wie schnell einige doch die rudimentären Abarbeitungsschritte eines Algorithmus' übersehen bzw. nicht sehen. Das ist genauso wie in vielen Programmiersprachen beispielsweise die Klammern bei einer Schleife vergessen werden und entsprechend natürlich nur die erste Zeile hinter dem Schleifenkopf abgearbeitet wird und man sich wundert, warum das Programm nicht das macht, was man möchte. :)

vor 22 Minuten schrieb Whiz-zarD:

Zu mal die range()-Funktion mit Fließkommazahlen ebenfalls nicht umgehen kann.

Wie gesagt, ich habe bisher noch nie mit Python gearbeitet, aber laut Google und der Suchergebnisse kann arange() sehr wohl mit Fließkommazahlen umgehen. (https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.arange.html )

Allerdings muss man dafür, soweit ich gesehen habe das Modul numpy importieren.

Und ob man dieser Operation dann einfach eine Variable zuordnen kann, weiß ich auch nicht.

Bearbeitet von Rienne
Geschrieben
vor 3 Stunden schrieb Rienne:

Wie gesagt, ich habe bisher noch nie mit Python gearbeitet, aber laut Google und der Suchergebnisse kann arange() sehr wohl mit Fließkommazahlen umgehen. (https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.arange.html )

Allerdings muss man dafür, soweit ich gesehen habe das Modul numpy importieren.

Und ob man dieser Operation dann einfach eine Variable zuordnen kann, weiß ich auch nicht.

Ich hatte bis jetzt auch nur sehr wenig mit Python zu tun gehabt und ich dachte, dass sei ein Schreibfehler gewesen, da ich arange() nicht kannte und auch nicht zum Standard gehört aber offenbar gibt es aber wohl ein Package mit dieser Funktion. Mea Culpa.

Ich denke auch nicht, dass das NumPy-Package eingebunden werden sollte, da auf Ganzzahlen beschränkt wurde und die range()-Funktion aus dem Standard unterstützt nur Ganzzahlen.

https://www.pythoncentral.io/pythons-range-function-explained/

Geschrieben

x_anfang, x_ende, und sw sollten Ganzzahlen sein, du verwendest aber floats. Die Berechnung von y muss mit in die Schleife (muss ja für jeden Wert von x neu berechnet werden).

Wenn du dir mal die Fehlermeldung anschaust, beschwert Python sich, dass pow nicht mit den Typen int und type klar kommt. Klar, zu dem Zeitpunkt wo du pow aufrufst ist x ja auch erstmal nur als float definierst (was übrigend auch eine Ganzzahl sein sollte, und kein Float). Es halt also bis jetzt nur einen Typ, aber noch keinen Wert. Diesen erhält es erst in der Schleife. Das heißt wiederum, dass wenn du die Berechnung in der Schleife machst x dann auch einen Wert hat und nicht mehr nur ein Typ ist. Generell würd ich die Definition von x eh einfach weg lassen, bei Python brauchst du das nicht

 

Geschrieben
Vielen Dank an alle.
Ich habe Programm-Code wie folgt geändert:



from math import *

x_anfang=float(input("Eingabe_Anfangswert:"))
x_ende=float(input("Eingabe_Endwert:"))
sw=float(input("Eingabe_Schrittweite:"))

for x in range(x_anfang, x_ende, sw):

    y = 1/2*x**3 - 1/2*x**2 + 2*x + 5

    print("x=", x)
    print("y=", y)
    #print()



es ergab sich folgende Meldung (beim "RUN"):

RESTART: C:/....../....Berechnung math Funkion.py
Eingabe_Anfangswert:1
Eingabe_Endwert:3
Eingabe_Schrittweite:1
Traceback (most recent call last):
  File "C:/.../..Berechnung math Funkion.py", line 11, in <module>
    for x in range(x_anfang, x_ende, sw):
TypeError: 'float' object cannot be interpreted as an integer
>>>


1. es scheint mir zu sein, dass mein PC die "numpy" nicht verwenden 
kann. Ich verstehe, dass "numpy" soll eine Bibliothek für 
Befehle/Funktionen ... zu sein und bei mir ist die "nupmy" ist nicht 
dabei. Kann ich die Numpy importieren aus internet? Wenn ja chan welchen 
Spreicherort?


2. Ich habe   -arange- (fliessende komma) zu -range- geändert.


3. Ich habe die Zeile
x=float
intfernt.  In der Fehlermelnung wird mitgeteilt, dass   "TypeError: 
'float' object cannot be interpreted as an integer"

Warum interpretiert das Programm die Variable x (? oder was?) als 
integer?
Ich habe niergendwo  'integer'   zugewiesen. Hat das stillschweigend 
passiert? Wo/wie genau? Was muss man ändern damit das nicht passiert?
Geschrieben

Das wurde doch schon von @Whiz-zarDoben geschrieben. Range funktioniert nur mit Integer und nicht mit Float. Du sagst aber, dass deine eingelesenen Werte vom Typ Float sein sollen. Wenn du das änderst, sollte es eigentlich funktionieren.

Zu numpy: Nicht-Standard-Module müssen afaik vor dem Einbinden in einen Quelltext installiert bzw. gespeichert sein. 

Geschrieben (bearbeitet)
vor 11 Stunden schrieb ankon:

x_anfang=float(input("Eingabe_Anfangswert:"))

Wie kommst du denn genau auf diese Zeile? Kannst du das Teil für Teil erklären? Wenn nicht, dann fehlen dir die Grundlagen, die du dir erst anlesen solltest, bevor du versuchst, dich irgendwie durchzuschlängeln, indem du Code hinzufügst/änderst/entfernst, den du nicht verstehst.

Die Teile in der Zeile, die zu erklären wären, sind:

x_anfang

float(...)

input(...)

"Eingabe_Anfangswert:"

Wenn du verstanden hast, was jeder dieser Teile tut, dann gehst du weiter zu dieser Zeile:

vor 11 Stunden schrieb ankon:

for x in range(x_anfang, x_ende, sw):

Hier zu erklären wären:

for ... in ...

x

range(...)

x_anfang

x_ende

sw

Sobald du diese Teile (und die oben) verstanden hast, kannst du dir auch erklären, was die Fehlermeldung bedeutet. Wenn dir an irgendeiner Stelle beim Erklären nicht klar ist, was das tut, dann musst du dir das entweder in einem Tutorial oder der Python-Dokumentation durchlesen (oder von mir aus fragst du hier).

Bearbeitet von arlegermi

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...