input() abbrechen?


13.05.2021, 17:19

Hier ist der Code. Die Stelle, die Ich mit *** Markiert habe, dort fehlt der Input-abbruch-Befehl.

3 Antworten

Also kurz:

Zeile2 ist richtig:

import math as m

Du könntest das Programm so aufbauen, dass es bei einer zu späten Antwort in Zeile 8 auf Anfang() springt. Das funktioniert so einfach aber nicht, weil Du unten parallel eine zweite Programmlogik startest. Versucht man die mit in Anfang() zu packen, kommt man unter anderem aufgrund deines massiven Einsatzes von globalen Variablen in derbe Turbulenzen.

Stell die Frage vielleicht jetzt nochmal rein. Eventuell findet sich jemand, der ausreichend Zeit und Lust hat dir das Programm auf deiner Basis umzuschreiben.

Meiner Meinung nach solltest Du nochmal von vorne anfangen, den Einsatz globaler Variablen vermeiden und einen klaren Aufbau da reinbringen.

Theodor951Ernst 
Fragesteller
 19.02.2024, 14:49

das modul Mathe habe ich übrigens nochmal selber geschrieben, das heißt die 2. Zeile ist schon richtig. Und noch eine frage: Wie springe ich zu einer anderen Stelle im Programm?

0

So, ich hab mir jetzt doch kurz Zeit genommen. Dabei habe ich weitgehend versucht den Programmcode nicht zu stark zu verändern. Den Threading Timer habe ich rausgenommen und eine andere Lösung benutzt:

Änderungen in:

Zeile 92 - 102

Zeile 4, 5 und 27

https://pastebin.com/Syqy8i2Q

Theodor951Ernst 
Fragesteller
 15.05.2021, 07:21

Python 3.9.4 (tags/v3.9.4:1f2e308, Apr 6 2021, 13:40:21) [MSC v.1928 64 bit (AMD64)] on win32

Type "help", "copyright", "credits" or "license()" for more information.

>>> 

============== RESTART: C:\Users\theoe\Theo\Ich habe eine Frage.py =============
Wie viele Klassen hast Du absolviert? 4
Erechne diese Aufgabe in 10 Sekunden:
 84
+36 = 
 Traceback (most recent call last):
 File "C:\Users\theoe\Theo\Ich habe eine Frage.py", line 117, in <module>
  Ende()
 File "C:\Users\theoe\Theo\Ich habe eine Frage.py", line 93, in Ende
  if select.select([sys.stdin],[],[], 10)[0]:
io.UnsupportedOperation: fileno
>>> 

Habe diesen Quelltext in eine extra Datei geschrieben, damit falls es nicht so läuft wie es laufen sollte, das der alte Quelltext dann nicht verloren geht.

0
DieterTonne  15.05.2021, 11:50
@Theodor951Ernst

Kann ich hier so nicht nachvollziehen (Ausgeführt in VS Code):

/usr/bin/env /usr/local/bin/python3 /Users/tonne/.vscode/extensions/ms-python.python-2021.5.842923320/pythonFiles/lib/python/debugpy/launcher 52375 -- "/Users/tonne/import random as r.py"
Wie viele Klassen hast Du absolviert? 4
Erechne diese Aufgabe in 10 Sekunden:
 50
+99 =
 149
Richtig!!
Wiederholen oder beenden? (Wiederholen = 1 und beenden = 0) 1
Ok
Erechne diese Aufgabe in 10 Sekunden:
 62
+81 =
 Zu langsam! Das Richtige Ergebnis ist: 143
Wiederholen oder beenden? (Wiederholen = 1 und beenden = 0) 0
Ok. Du hast 1 Punkte
0
DieterTonne  15.05.2021, 12:25
@Theodor951Ernst
Das "io.UnsupportedOperation: fileno" deutet daraufhin, dass Du das Script in Idle ausführst. Das könnte zu diesem Problem führen. Führe das ganze entweder aus der Powershell, Bash (Linux) direkt aus, oder installiere dir eine vernünftige IDE. 
Ich benutze für kleinere Sachen VS Code:
https://code.visualstudio.com/ mit Python Extensions.
Ansonsten PyCharm:
https://www.jetbrains.com/pycharm/
In der Community Version ist auch die letztere umsonst.



0
DieterTonne  15.05.2021, 12:31
@Theodor951Ernst

Leider musst Du oben nach Links scrollen, irgendwie hat der Gutefrage-Edeitor das als Quelltext eingestuft.

0
Theodor951Ernst 
Fragesteller
 15.05.2021, 12:45
@DieterTonne

Irgentwie verstehe ich nicht ganz, was du mir da schreibst. Und was ist IDE? Und warm darf man das Script nicht in Idle audsführen?

0
DieterTonne  15.05.2021, 13:01
@Theodor951Ernst

Eine IDE ist eine https://de.wikipedia.org/wiki/Integrierte_Entwicklungsumgebung

Darunter sind eben auch VS Code und Pycharm zusammengefasst, eventuell sogar IDLE (die hier aber nicht funktioniert). Mit der Fehlermeldung bekommst Du es häufiger mal zu tun, wenn Du eben IDLE benutzt, was sowieso kaum jemand macht. Ein Beispiel mit Erklärung findest Du hier: https://www.py4u.net/discuss/14938,

Das Script funktioniert bei mir. Ob von der Kommandozeile mit

python3 scriptname.py

oder in

VS-Code ausgeführt.

Ob ich Python 3.9.0 oder 3.9.5 einsetze ist dabei völlig egal.

0
DieterTonne  15.05.2021, 13:52
@Theodor951Ernst

Hier übrigens auch in einer Bash auf MacOS. Dazu habe ich dann in der obersten Zeile eine Shebang Zeile eingefügt. Also:

#!/usr/bin/env python3

Jedenfalls:

popel:~ tonne$ ./opel.py
Wie viele Klassen hast Du absolviert? 4
Erechne diese Aufgabe in 10 Sekunden:
 86
+90 =
 176
Richtig!!
Wiederholen oder beenden? (Wiederholen = 1 und beenden = 0) 1
Ok
Erechne diese Aufgabe in 10 Sekunden:
 62
-34 =
 Zu langsam! Das Richtige Ergebnis ist: 28
Wiederholen oder beenden? (Wiederholen = 1 und beenden = 0) 0
Ok. Du hast 1 Punkte
0
DieterTonne  15.05.2021, 16:20
@Theodor951Ernst

Habe den Code jetzt auf Windows 10 getestet, so funktioniert der da wirklich nicht. Das liegt aber nicht an IDLE, sondern wohl daran, das Windows anders damit umgeht als eben Unix oder Unix ähnliche Systeme. Da muss doch noch eine andere Lösung her.

1
Theodor951Ernst 
Fragesteller
 18.05.2021, 16:58
@DieterTonne

Und ich arbeite mit Windows 10. Was macht eigentlich select.select auf anderen Geräten?

0
DieterTonne  18.05.2021, 19:36
@Theodor951Ernst

Auf UNIX-like Systemen wartet

select.select([sys.stdin],[],[], 10)[0]:

10 Sekunden lang auf eine Eingabe.

Der optionale timout ist auf 10 gesetzt. Das heißt, so wie ich das verwendet habe, wenn innerhalb eines Zeitraums von 10 Sekunden eine Eingabe stattfindet, wird der Code innerhalb von 'if' ausgeführt, ansonsten eben 'else'.

https://docs.python.org/3/library/select.html

0

Bevor Du die Frage jetzt erneut hier reingestellt hast, ist dir nicht aufgefallen das sie mit deinen Angaben schwer zu beantworten sein könnte?

Stelle bitte mal den Code, den Du bisher geschrieben hast zur Verfügung. Eventuell kann man darauf aufbauend dann helfen. Mit den bisherigen Infos und ohne deinen Code ist das sinnlos und sowieso nicht Zielführend.

Woher ich das weiß:Berufserfahrung
Theodor951Ernst 
Fragesteller
 12.05.2021, 14:44

Der Code ist leider etwas zu lang, um ihn zu ergänzen. wenn ich einfüge, und dann auf senden drücke, dann steht dort, das ich 3000 Zeichen zu viel eingegeben habe.

0