Python Anfänger braucht Hilfe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
bernd76
User
Beiträge: 6
Registriert: Mittwoch 30. Oktober 2019, 22:43

Hallo ,
wie kann ich mit 2 eingegeben Zahlen in einem Inputstring weiter rechnen. Bzw wie gebe ich einen Input mehr als 2 argumente.
Bsp:
a= input("1.Zahl")
b= input("2.Zahl")

Ich möchte nun beide variablen a und b in einen input haben, sodass ich mit den werten die eingegeben wurden, weiter arbeiten ( rechnen) kann.

Danke für eure Hilfe.

Lg Bernd
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du hast sie ja schon in variablen. Was dir fehlt ist die Konvertierung in eine Zahl. Das kann zb der Typ float sein.

Code: Alles auswählen

a = float(input("Zahl 1:"))
bernd76
User
Beiträge: 6
Registriert: Mittwoch 30. Oktober 2019, 22:43

vielleicht habe ich mich nicht richtig ausgedrückt: Ich möchte einen input("bitte geben sie 2 zahlen ein") erstellen. Wenn man jetzt zb 2 5 eingibt Dann sollen 2 und 5 getrennt ausgegeben werden sodass ich mit der 2 und der 5 jeweils weiter arbeiten kann. Ich möchte also auf die 2 Zahlen von nur einen input zugreifen können
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du das möchtest, musst du den String am Leerzeichen trennen mit der split Methode. Die resultierende Liste enthält deine Zahlen.
nezzcarth
User
Beiträge: 1762
Registriert: Samstag 16. April 2011, 12:47

Ich glaube, ich würde in dem Szenario solche Eingaben vermeiden und aktiv dafür sorgen, dass pro Eingabeaufforderung nur eine Zahl eingegeben wird. Ansonsten musst du die Zahlen eben anhand eines Trenners (z.B. Leerzeichen) mit der split-Methode von Strings trennen und separat konvertieren. Außerdem kannst du dir vielleicht überlegen, was passiert, wenn jemand etwas anderes oder mehr als zwei durch Leerzeichen getrennte Zahlen eingibt.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Also wenn du beide Variablen mit einem Input einlesen möchtest, würde ich das so lösen: (In diesem Besipiel ist auch die Eingabe von strings möglich. Das überlasse ich dir .)

Code: Alles auswählen

while True:
    try:
        a, b = input("Bitte gib deine zwei Zeichen/Zahlen getrennt mit einem Leerzeichen ein: ").split()
        break
    except ValueError:
        print("Fehler bei der Eingabe.")

print(f"A ist {a}")
print(f"B ist {b}")
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

@Jankie: wo kann in dem try-Block ein ValueError auftreten?
Fire Spike
User
Beiträge: 329
Registriert: Montag 13. Mai 2019, 16:05
Wohnort: Erde

beim splitten

Code: Alles auswählen

ValueError: not enough values to unpack (expected 2, got 1)
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

@Sirius3:
Wenn man z.B. nur eine Zahl oder mehr als zwei Zahlen eingibt. Oder löst man das anders?
Benutzeravatar
snafu
User
Beiträge: 6866
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich würde vor dem "break" noch ein "if a.isdigit() and b.isdigit():" setzen oder aber die Umwandlung mittels int() oder float() probieren.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

@snafu:


Das hier hatte ich noch im try drin, wusste aber nicht ob das so richtig ist, es funktioniert zwar, aber allerdings nur weil das int(a) dort einen ValueError auslöst, wenn der input ein string ist.

Code: Alles auswählen

if isinstance(int(a), int) & isinstance(int(b), int):
    break
da ist deine Lösung mit a.isdigit() besser.
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Jankie: Das ist ziemlich schräg. Natürlich ist ein `int`-Objekt ein Exemplar vom Typ `int` — die `isinstance()`-Aufrufe sind total überflüssig. Und ``&`` ist bitweise Verknüpfung, die sollte man nicht machen wenn man eigentlich das logische ``and`` meint.

Der Code hat letztlich den gleichen Effekt wie folgendes an der Stelle:

Code: Alles auswählen

int(a)
int(b)
break
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Das kam mir schon beim schreiben dumm vor was ich da gemacht habe.
Das mit dem "&" kommt davon, wenn man nebenbei noch Sachen zu C# durchliest, ups. Aber danke dass Ihr die Vorschläge immer noch verbessert, dann kann ich durchs helfen auch noch was lernen. :-)
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Jankie: ``&`` wäre auch in C# falsch, denn auch dort ist das die bitweise Verknüpfung. Die logische Verknüpfung ist dort ``&&``.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten