Hallo,
ist es möglich, in einem Konsoleprogramm mit vielen aufeinanderfolgenden eingaben - eine Eingabekorrektur einzubauen?
Etwas wie: Strg+z ruft die letzte Eingabe nocheinmal auf.
Ich stelle mir das schwierig vor.
Gruß mathi
Eingabekorrektur in einem Konsoleprogramm
Du könntest eine Funktion schreiben, die eine ganze Reihe von Eingaben entgegennimmt, die am Ende noch einmal ausgibt und nachfragt, ob noch etwas geändert werden soll. Wenn nein, dann werden die Eingaben an den Aufrufer zurück gegegeben, wenn ja, dann kann man sich eine Eingabe aussuchen und die noch einmal tätigen. Und dann wird wieder gefragt, ob alles korrekt ist.
genau das habe ich im Moment, aber ich habe mich schon selber geärgert, 10 Eingaben und bei der 11. vertippt
was ich nicht möchte, sind zu viele sicherheitsabfragen, also z.B. nach 3 Eingaben:
was ich nicht möchte, sind zu viele sicherheitsabfragen, also z.B. nach 3 Eingaben:
Code: Alles auswählen
print 'Sind die Eingaben richtig? [J/n] '
Dann hast Du nicht dass was ich vorgeschlagen habe: Am Ende soll man sich die Eingabe *aussuchen*, die man noch einmal neu machen möchte. Man sagt dann einfach Eingabe 11 möchte ich noch einmal machen, ohne die anderen 10 noch einmal machen zu müssen.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Erinnert mich ein wenig an das gute alte Commodere Basic V2.0 aufm C64
Da hatten die BASIC Befehlszeilen auch Nummern. Diese konnte man listen mit LIST oder auch so was wie LIST 100-150. Naja, wenn man folgendes getippt hat, konnte man eine Zeile anlegen / ändern:
So ähnlich könnteste das doch auch basteln! Quasi nen dict mit Zeilennummer und Inhaltsstring.
Da hatten die BASIC Befehlszeilen auch Nummern. Diese konnte man listen mit LIST oder auch so was wie LIST 100-150. Naja, wenn man folgendes getippt hat, konnte man eine Zeile anlegen / ändern:
Code: Alles auswählen
10 print "Hallo Welt!"<RETURN>
Die Abfrage am Ende kann man übrigens auch komfortabler realisieren, in dem man mit readline arbeitet. So kann man die zu korrigierende Zeile direkt in die Eingabezeile von "raw_input" einfügen:
Auf der Eingabezeile wird nun direkt der Wert von "vorherige Eingabezeile" angezeigt.
Code: Alles auswählen
from __future__ import with_statement
import readline
class readline_insert(object):
"""A class which provides a facility to insert text to the command
line. Intend for you with the ``with`` statement:
::
with readline_insert('foo'):
print raw_input('Your Name is: ')
"""
def __init__(self, value):
self.value = value
def __enter__(self):
self.old_hook = readline.set_pre_input_hook(self.input_hook)
def __exit__(self, exc_type, exc_value, traceback):
readline.set_pre_input_hook(self.old_hook)
def input_hook(self):
readline.insert_text(self.value)
readline.redisplay()
# bei der Korrektur:
with readline_insert(vorherige_eingabe):
raw_input('Bitte korrigieren: ')
Code: Alles auswählen
from __future__ import with_statement
import readline
class readline_insert(object):
"""A class which provides a facility to insert text to the command
line. Intend for you with the ``with`` statement:
::
with readline_insert('foo'):
print raw_input('Your Name is: ')
"""
def __init__(self, value):
self.value = value
def __enter__(self):
self.old_hook = readline.set_pre_input_hook(self.input_hook)
def __exit__(self, exc_type, exc_value, traceback):
readline.set_pre_input_hook(self.old_hook)
def input_hook(self):
readline.insert_text(self.value)
readline.redisplay()
c=raw_input('eingabe')
# bei der Korrektur:
with readline_insert(c):
raw_input('Bitte korrigieren: ')
print c
Code: Alles auswählen
with readline_insert(c):
c=raw_input('Bitte korrigieren: ')
Für die ``with``-Answeisung braucht man ein ``from __future__ import with_statement`` als ersten Import im Modul.
@BlackJack:
Mißverständnis:
das 2. Schnippsel gehört in das erste--> die einzige Änderung ist die Zuweisung von
also: ersetze Zeile 30 durch Zeile 3
Mißverständnis:
das 2. Schnippsel gehört in das erste--> die einzige Änderung ist die Zuweisung von
Code: Alles auswählen
c=