input() reagiert komisch

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
snakemake
User
Beiträge: 32
Registriert: Sonntag 6. Juni 2010, 19:20

Donnerstag 10. Juni 2010, 11:16

Hallo,

ich lerne gerade Python neu und übe ein bisschen mit elifs und so rum. Dabei ist mir bei input() etwas aufgefallen:

Code: Alles auswählen

print("Wir berechnen das Minimum von drei eingegebenen Zahlen.")

print("Erste Zahl:")
x = int(input())

print("Zweite Zahl:")
y = int(input())

print("Dritte Zahl:")
z = int(input())

if x<y and x<z:
    print("Zahl",x," ist das Minimum")
elif y<z and x>y:
    print("Zahl",y," ist das Minimum")
elif z<x and z<y:
    print("Zahl",z," ist das Minimum")
Ich benutze übrigens Python 3. Wenn ich das Modul laufen lasse, dann will ich bei "Erste Zahl:" etwas eingeben, aber IDLE reagiert nicht. Dann drück ich enter und der fragt mich wieder nach der ersten Zahl und wenn ich dann eine Zahl eingebe, dann krieg ich folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "/home/pinky/Desktop/minimum.py", line 4, in <module>
    x = int(input())
ValueError: invalid literal for int() with base 10: 'Erste Zahl:7'
Ist klar, dass er sagt, dass ich kein int eingebe, weil "Erste Zeile" wieder erscheint, aber warum erscheint es nochmal? Was ist denn an "x = int(input())" falsch? Ich hab das aus einem Lehrbuch so abgeschrieben, deshalb kann ich nicht verstehen, warum es bei denen so steht und bei mir nicht klappt.
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

Donnerstag 10. Juni 2010, 11:28

Zum Verhalten von IDLE kann ich leider nichts sagen.

Zur Logik Deines Codes erlaube ich mir den Hinweis auf min:

Code: Alles auswählen

min(...)
    min(iterable[, key=func]) -> value
    min(a, b, c, ...[, key=func]) -> value
    
    With a single iterable argument, return its smallest item.
    With two or more arguments, return the smallest argument.
https://www.xing.com/go/invite/18513630.6a91d4
snakemake
User
Beiträge: 32
Registriert: Sonntag 6. Juni 2010, 19:20

Donnerstag 10. Juni 2010, 11:35

Dass es eine Funktion min gibt ist mir klar. Ich wollte allerdings mal verzweigte Bedingungen, logische Operatoren usw. alles in einem Code ausprobieren. Und die im Lehrbuch programmieren min halt selbst. Das Problem liegt da halt bei der Anweisung "x = int(input())".
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

Donnerstag 10. Juni 2010, 11:39

Das Problem liegt eher in IDLE. Wenn Dein Skript auf der Konsole ausgeführt wird, funktioniert alles tadellos.
https://www.xing.com/go/invite/18513630.6a91d4
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Donnerstag 10. Juni 2010, 13:08

Ich meine mich dunkel erinnern zu koennen, dass sich Idle und input (oder raw_input) nicht gut vertragen. Also solche Skripte besser in der Konsole ausfuehren!
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Donnerstag 10. Juni 2010, 13:57

Noch besser, gleich einen richtigen Editor verwenden.

http://wiki.python.org/moin/PythonEditors
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Donnerstag 10. Juni 2010, 14:19

Und wieder wird in das alte Horn geblasen: IDLE ist grundsätzlich schuld, wenn irgendwas nicht klappt und IDLE mit im Spiel ist. Hat einer von denen, die hier auf IDLE herumhacken, den gezeigten Code mal in IDLE ausgeführt? Bei mir läuft er nämlich einwandfrei - gilt sowohl für die IDLE-Versionen von Python 3.0 als auch für 3.1.

@Rebecca: Evtl. verwechselst du das mit der Linux-Version von SciTE - da klappt es nicht mit der Eingabe. Von IDLE ist mir das nicht bekannt.
snakemake
User
Beiträge: 32
Registriert: Sonntag 6. Juni 2010, 19:20

Donnerstag 10. Juni 2010, 14:23

Hallo,

also mit der Konsole hat es wunderbar geklappt. Bei IDLE hats nicht geklappt. Warum kriegt es IDLE denn nicht hin? Es ist doch letztendlich selbst nur ein Editor, bei dem man die Skripte auch ausführen kann, wenn ich das richtig verstanden hab. Ich bin neu in Python, kenne mich deshalb mit IDLE noch nicht so gut aus, aber bisher hatte ich damit nur Probleme. Immer irgendwelche Ausnahmen, Dinge, die IDLE anders macht als Konsole usw. :shock:
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Donnerstag 10. Juni 2010, 15:41

snakemake hat geschrieben:kenne mich deshalb mit IDLE noch nicht so gut aus, aber bisher hatte ich damit nur Probleme. Immer irgendwelche Ausnahmen, Dinge, die IDLE anders macht als Konsole
Sooo kaputt ist IDLE nun auch wieder nicht, dass es - deiner Beschreibung gemäß - praktisch unbenutzbar ist. Gerade für Einsteiger ist IDLE eine gute Wahl, weil es direkt mit dabei ist und in aller Regel gut funktioniert.

Welches Betriebssystem benutzt du?
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Donnerstag 10. Juni 2010, 16:24

Um ehrlich zu sein, kann ich mir fast gar nicht vorstellen ohne IDLE oder aehnliches zu arbeiten. Um schnell man einen Ausdruck zu testen oder um irgendwelche Zwischenergebnisse mal schnell zu berechen ist das ausgezeichnet. Ich vermisse zwar nach wie vor manchmal die History, aber man gewoehnt sich dran. Aehnlich bei Haskell. Dort gibt es den Winhugs. Spart einfach Zeit.
Benutzeravatar
b.esser-wisser
User
Beiträge: 272
Registriert: Freitag 20. Februar 2009, 14:21
Wohnort: Bundeshauptstadt B.

Donnerstag 10. Juni 2010, 16:52

hendrikS hat geschrieben:Ich vermisse zwar nach wie vor manchmal die History, aber man gewoehnt sich dran.
..<alt> + <p>, oder meinst du da was ganz anderes?
Aber ich benutze normalerweise Ipython (da funzen die u""-Literals nicht, "u=lambda s: s.decode(sys.stdin.encoding)" hilft als würg-around).

hth, Jörg
Wir haben schon 10% vom 21. Jahrhundert hinter uns!
heiliga horsd

Donnerstag 10. Juni 2010, 18:14

Hatte auch bei einem Freund mal das Problem, letzendlich lag das Problem darin, dass IDLE 2.6 gestartet war und nicht 3.1

Übrigens: Ich hatte mit IDLE auch noch nie Probleme und finde es recht nützlich.
bords0
User
Beiträge: 170
Registriert: Mittwoch 4. Juli 2007, 20:40

Donnerstag 10. Juni 2010, 20:30

Oder vielleicht den Namen input "überschrieben"? Gerade bei komischem, völlig unerklärlichem Verhalten, ist das manchmal der Fall.

Hast du es nochmal mit neu gestarteter IDLE ausprobiert?
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Freitag 11. Juni 2010, 03:31

b.esser-wisser hat geschrieben:..<alt> + <p>, oder meinst du da was ganz anderes?
Extrem guter Tip. Super. :D
Antworten