Was ist bei diesem Python Programm falsch?

6 Antworten

Also im Editor mit Strg+g an Zeile 7 im Skript springen und dortige Zeile für ein eigenständiges (manuelles) debuggen zu Gemüte führen, denn darauf wird sich in deiner Fehler-Meldung bezogen.

Dann: Inhalt der Message verstehen. Du hast es mit einem "impliziten Typen-Casting" zu tun, welches hier von dir zwar angenommen wird, aber nicht richtig umgesetzt werden kann. Bei PHP funktioniert dies!

Ersetzen durch ein "explizites" dürfte helfen. Oder aber typischer: Vorab im Rahmen verwandter Klassen entsprechende Definitionen bilden, sofern du das Programm möglichst eigenständig zu schreiben gedenkst und daher möglichst wenig auf die in der Api bereits gegebenen Funktionen zurückgreifen willst.

Im Studium ist dies zunächst typischer, ansonsten kannst du jedoch auch die Api-Doku lesen, und dann sofort die richtige Funktion verwenden. Bloß noch Argumente übergeben und gut!

Falls du nicht selber debuggen willst, kannst du natürlich auch mit dem Debugger deiner Python-IDE arbeiten. Das setzt allerdings eigene Einarbeitung voraus und ist gerade in kleineren Programme nicht schneller, also eher zeitintensiv.

Woher ich das weiß:Studium / Ausbildung

Der Fehler steht da doch schon. Du versucht mit einer Zeichenkette zu rechnen. Also mit Buchstaben und so.

Du musst deine eingaben als Zahl festlegen.

So zum Beispiel:

print("Regelmäßige quadratische Pyramide ausrechnen ")

print("Bitte a eingeben")
a = float(input())

print("Bitte h eingeben")
h = float(input())

o=a*a+4*a*h/2

v=a*a*h/3
print("Oberfläche:", o," Volumen:",v)

Statt float kannst du auch int nehmen. Dann kannst du aber nicht mit Kommazahlen rechnen

Woher ich das weiß:Berufserfahrung – FISI Tägliche PC-Probleme, Ausbilder, 1st Level Supervisor
Oli550 
Fragesteller
 28.04.2020, 10:51

Danke

0

Python ist so nett und verrät dir doch den Fehler:

TypeError: can't multiply sequence by non-int of type 'str'

Bei deinem input() bekommst Du einen String und keine Zahl. Du musst deinen String erst in eine Zahl umwandeln. Z.B. h = int(h)

Oli550 
Fragesteller
 28.04.2020, 10:44

Danke

0

Die Funktion input() speichert deine Eingabe in einen String. Damit kannst du eben sehr schlecht rechnen :)

Schreib am Besten eval(input()).

Mit eval wird überprüft um welchen Datentyp es sich handelt.

LG Tim

mertkert  28.04.2020, 10:47
Mit eval wird überprüft um welchen Datentyp es sich handelt.

Nein, wird nicht. Du meinst wohl type().

0
Uhrenstein  28.04.2020, 10:51
@mertkert

Nein. Eval überprüft deine Eingabe und guckt welcher Datentyp passend ist.

Wenn ich 1 eingeben wird die Variable als int interpretiert.

0
mertkert  28.04.2020, 11:13
@Uhrenstein

Eval interpretiert den Eingabestring als Python-Ausdruck und führt diesen aus. Das ist eine komplett andere Baustelle.

eval("test") gibt mir daher einen Fehler, aber nur sofern keine Variable test existiert - dann gibt es nämlich deren Inhalt zurück, welchen Typ auch immer der haben mag.

eval("True") gibt den bool-Wert True, eval("true") gibt mir einen Fehler, eval("'true'") gibt mir den String "true". eval("(1+1)*2") gibt den int-Wert 4 zurück, obwohl ich diesen String eben nicht einfach per int() in eine Zahl umwandeln könnte.

Fazit: Wenn ich den Typ eines Objekts wissen will, verwende ich dafür die vorgesehene Funktion type().

0
Uhrenstein  28.04.2020, 11:16
@mertkert

Ich gebe dir jetzt einfach mal recht.

Schönen Tag dir noch :D

0