Nummer wird nicht anerkannt python was tun?


19.06.2024, 11:31

Es sieht so aus, als hätte guterfrager5 Recht. Mein Programm hat selbst eine Zahl als String gezählt. Das ging nicht, weil ich rechnen wollte. Sein Kommentar hat geholfen.

guterfrager5  19.06.2024, 09:37

kannst du mal probieren, ob es geht, wenn du es so schreibst?

Kilometer = int(input("Butte Kilometer angeben"))

hab aber mit Python eigentlich nix am Hut sorry :D

Hacker21 
Beitragsersteller
 19.06.2024, 09:40

Gute Idee. Ich hätte eigentlich lieber eine Fehlermeldung, die man versteht, aber ok.

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet
print(type(kilometer))

Ausgabe ist <str>, da input() dir einen String zurückliefert.

An dieser Stelle musst du nach float oder double casten, ValueError auslösen und abfangen, wenn du Exception-Handling betreiben möchtest.

try:
    anfangspreis = 4.80
    kilometer = float(input("Bitte Kilometer angeben: "))
    kosten = 2.10    
    
    print ("Deine Kosten sind", anfangspreis + kosten * kilometer)
    
except ValueError:
    print ("Du musst eine Nummer eingeben!")

Hacker21 
Beitragsersteller
 24.06.2024, 07:06

TYSM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

So kann man nicht prüfen ob eine Variable eine Zahl ist

if Kilometer == int():

Du kannst z.b. mit

Kilomenter.isDigit()

prüfen ob der String eine Zahl ist. Das geht dann aber nur für Ganzzahlige positive Zahlen.

Besser wäre ein regulärer Ausdruck

import re

pattern = r'^-?\d+(\.\d+)?$'
if re.match(pattern, Kilometer):

Übrigens solltest du deine Variablen nicht mit einem Großbuchstaben am Anfang benennen, sondern nur in Kleinbuchstaben oder "dromedar case". Namen mit Großbuchstaben am Anfang werden für Klassen verwendet.


Hacker21 
Beitragsersteller
 19.06.2024, 11:21

It still doesn't work and gives this error:

#This is the request and my entry
Bitte Kilometer angeben66
#This is the error
Traceback (most recent call last):
  File "e:\Python\1st Python.py", line 8, in <module>
    print ("Deine Kosten sind", anfangspreis + kosten * kilometer)
                                               ~~~~~~~^~~~~~~~~~~
TypeError: can't multiply sequence by non-int of type 'float'
MonkeyKing  19.06.2024, 11:22
@Hacker21

Weil du es noch in int umwandeln musst, ohne Umwandlung ist es ein String und den kannst du nicht einfach mit einer Zahl multiplizeren

Kilometer = int(Kilometer)

Input liefert in Python immer einen String zurück.

Willst du diesen String für Berechnungen verwenden, wirst du um eine Umwandlung von String in deinen benötigten Zahlentypen nicht herum kommen.

if Kilometer == int():

Kilometer ist an dieser Stelle kein Int, sondern String.

Sinniger wäre also

if int(kilometer):

womit True zurückgegeben wird, wenn Kilometer als Integer zurückgegeben werden kann und False, wenn Kilometer Zeichen enthält, die nicht als Zahl interpretierbar sind.

Und unmittelbar danach solltest du dann das Typecasting einfügen, damit in der anschliessenden Berechnung auch tatsächlich eine Zahl in Kilometer vorhanden ist. Multiplikation mit Strings wird lustige Ergebnisse erzielen.