Seite 1 von 1

raw_input Mehrzeilige Eingaben?

Verfasst: Montag 11. September 2006, 16:31
von EnTeQuAk
Hallo!

Kurtz und Knapp.

Gibt es eine Möglichkeit Mehrzeilige Eingaben mit z.B.

Code: Alles auswählen

raw_input('Gib etwas ein: ')
zu verwirklichen?

Also so, das der User mit der RETURN Taste einfach wie man es von einem Editor kennt eine Zeile runtergeht(einen Zeilenumbruch macht) und z.B. mit irgenteiner Taste (evtl., wenn Möglich mit einer Tastenkombination) zum Nächsten Dialog geht.

Wichtig, das es erstmal auf Konsole laufen muss. Wenn möglich für Windows und Linux und oder für beide seperate Lösungen.

Freue mich auf Antwort :D


MfG EnTeQuAk

Verfasst: Montag 11. September 2006, 17:06
von pyStyler
Hi,

Code: Alles auswählen

 def rawInput():
	a=raw_input('langer text: ')
	while a != '':
		a=raw_input('langer text: ')
vielleicht sowas da?

MfG
pyStyler

Verfasst: Montag 11. September 2006, 17:45
von EnTeQuAk
Ja das schaut schonmal gut aus ;)

Danke erstmal.

Was ich daraus gemacht habe ist:

Code: Alles auswählen

def rawInput():
   daten = raw_input('langer text: ')
   while daten != '':
       daten += '\n' + raw_input('langer text(Vortsetzung: ')
Hoffe das ich da nichts falsches gemacht habe ;)

So aber das ganze hilft mir leider nicht weiter ohne eine Abbruchbedingung.

Klar Kann ich das mit einer '' if '' Clausel machen... ABER Was denkt ihr währe sinfoll?

Und wo wir gerade dabei sind.

ich habe ja in '' daten '' die jeweiligen Daten.
Nun drücke ich Enter (um in die Nächste Zeile zu kommen).
Wenn ich jetzt z.B. zum Abbrechen ein '' ENDE '' Verlange (muss eingegeben werden zum abbrechen), wie kann ich kontrollieren, ob in dem gerade eingegebenen Codestück ein '' ENDE '' vorkommt?

Danke!

MfG EnTeQuAk

Verfasst: Montag 11. September 2006, 18:05
von DatenMetzgerX

Code: Alles auswählen

def rawInput():
   daten = raw_input('langer text: ')
   while daten != '':
       temp = '\n' + raw_input('langer text(Vortsetzung: ') 
       if temp.upper() == 'exit':   #Überprüfen bo Exit eingegeben wurde upper um auch aufzuhören wenn anfangs buchstaben gross war oder so...
           break
       daten += temp
Hoffe die einrückung stimmt, habe relativ Probleme das alles mit den leerschlägen zu machen :s

Verfasst: Montag 11. September 2006, 18:18
von EnTeQuAk
:K Keine Ahnung warum ich nicht selber drauf gekommen bin ;) Die Idee mit erst abfragen --> Kontrollieren und dann hinzufügen hatte ich auch :D

Aber ehrlich gesagt mir haperte es an der Abfrage ob '' exit '' in der Variablen ist. Wobei das eigentlich mehr als einfach ist ;D

So habe das ganze mal getestet... es geht ;) Nur einen Text, den man erst in Großbuchstaben umwandelt, und dann in kleinbuchstaben abfragt, ob er enthalten ist :D na ja ;) hab es aber auch nicht früher gemerkt.

Danke für eure Hilfe.

Mein Script schaut nun so aus:

Code: Alles auswählen

#/usr/bin/python
# -*- encoding: utf-8 -*-
def rawInput():
    global daten
    daten = raw_input('langer text: ')
    while daten != '':
        temp = '\n' + raw_input('langer text(Vortsetzung: ')
        if temp.upper() == 'EXIT':   #Überprüfen bo Exit eingegeben wurde upper um auch aufzuhören wenn anfangs buchstaben gross war oder so...
            break
        daten += temp
        
rawInput()
#Test --- Ausgeben, der eingegebenen Sachen
print 'Sie haben eingegeben:\n' + daten
Und nun eine andere Frage. Einen Abbruch. Kann man den auch per Tastenkürzel auslösen? Also z.B. [ALT] + [L]? Also wenn man das drückt, das dann automatisch die '' if '' Bedingung war ist oder so etwas in der Art.

Ist aber eher nebensäclich.

Danke!

MfG EnTeQuAk

Verfasst: Montag 11. September 2006, 18:28
von BlackJack
EnTeQuAk hat geschrieben:Mein Script schaut nun so aus:

Code: Alles auswählen

#/usr/bin/python
# -*- encoding: utf-8 -*-
def rawInput():
    global daten
    daten = raw_input('langer text: ')
    while daten != '':
        temp = '\n' + raw_input('langer text(Vortsetzung: ')
        if temp.upper() == 'EXIT':   #Überprüfen bo Exit eingegeben wurde upper um auch aufzuhören wenn anfangs buchstaben gross war oder so...
            break
        daten += temp
        
rawInput()
#Test --- Ausgeben, der eingegebenen Sachen
print 'Sie haben eingegeben:\n' + daten
Das ist eine Endlosschleife weil `temp` niemals 'EXIT' enthalten kann. Das erste Zeichen ist immer '\n' wie man in der Zeile vor dem Test sehen kann.

Und vergiss bitte das es die ``global`` Deklaration gibt. Für Rückgabewerte aus Funktionen benutzt man ``return``.

Code: Alles auswählen

def multiline_input(end_marker=''):
    result = list()
    while True:
        line = raw_input()
        if line == end_marker:
            break
        result.append(line)
    result.append('')   # Nur wenn das Ergebnis auch mit einem '\n' enden soll.
    return '\n'.join(result)

print 'Ihre Eingabe 1', multiline_input()
print 'Ihre Eingabe 2', multiline_input('ENDE')
Und nun eine andere Frage. Einen Abbruch. Kann man den auch per Tastenkürzel auslösen? Also z.B. [ALT] + [L]? Also wenn man das drückt, das dann automatisch die '' if '' Bedingung war ist oder so etwas in der Art.
Nicht einfach und plattformübergreifend. Für Unix kann man das und noch viel komfortablere mehrzeilige Eingaben mit `curses` (Standardbibliothek) und `urwid` (externes Modul) machen.

Verfasst: Dienstag 12. September 2006, 16:32
von EnTeQuAk
Gut das mit der Entdlosschleife hab ich noch gesehen ;)
Kann ja mal vorkommen.
Und vergiss bitte das es die ``global`` Deklaration gibt. Für Rückgabewerte aus Funktionen benutzt man ``return``.
Dann muss mir einer etwas klarstellen.

Folgedes Script:
(das von Oben aber an den rest es Scriptes etwas angepasst und in bearbeitung)

Code: Alles auswählen

def long_input():
    #global daten
    daten = raw_input(art + '\n')
    while daten != '':
        temp = raw_input('')
        if temp.upper() == 'EXIT':
            break
        daten += temp + '\n'
    #return daten
Variable '' daten '' kann in anderen Funktionen z.B.

Code: Alles auswählen

def schreiben():
    f = file('bestellung.txt', 'w')
    f.write(daten)
    f.close
    print 'Bitte gib folgende Daten in das Bestellformular ein.\n Bitte schreibe die Daten in die Hauptmessagebox Nicht einzeln!:'
    print '\n' + daten + '\n'
nicht aufgerufen werden.

Wenn ich die '' return '' Anweisung aus dem ersten Script "freischalte", also das Kommentar davor weg, kann ich trotzdem nicht die '' daten '' schreiben via '' schreiben() ''.
Erst wenn ich sie "Global" mache mit '' global daten '' kann ich sie auch schreiben und das ganze geht wieder einwandfrei.

Vielleicht habe ich das ganze noch nicht richtig verstanden aber wäre nett wenn mir das mal einer nochmal erläutern könnte wenn ich etwas falsch verstanden habe.

Ansonsten Danke für den Code! Ich werde ihn mal durchforsten und analysieren ;)

MfG EnTeQuAk

Verfasst: Dienstag 12. September 2006, 16:56
von DatenMetzgerX

Code: Alles auswählen

def long_input():
    #global daten
    daten = raw_input(art + '\n')
    while daten != '':
        temp = raw_input('')
        if temp.upper() == 'EXIT':
            break
        daten += temp + '\n'
    return daten

Code: Alles auswählen

def schreiben():
    f = file('bestellung.txt', 'w')
    f.write(long_input())    #Fuktion long_input aufrufen
    f.close
    print 'Bitte gib folgende Daten in das Bestellformular ein.\n Bitte schreibe die Daten in die Hauptmessagebox Nicht einzeln!:'
    print '\n' + daten + '\n'
Du must nicht die Variabel daten nehmen (da die nur in der funktion Long_input vorhanden ist) sondern die Funktion aufrufen, Diese gibt dir dann automatisch den Text zurück

Verfasst: Dienstag 12. September 2006, 19:27
von EnTeQuAk
Ok nun geht es :D


Danke für eure Hilfe!
Vielen Vielen Dank!


MfG EnTeQuAk

Verfasst: Dienstag 12. September 2006, 20:38
von birkenfeld
EnTeQuAk hat geschrieben:

Code: Alles auswählen

def rawInput():
   daten = raw_input('langer text: ')
   while daten != '':
       daten += '\n' + raw_input('langer text(Vortsetzung: ')
Ich schreibe ja sonst keine Spellingflames, aber "Vortsetzung" ist wirklich abgrundtief hässlich...

Verfasst: Mittwoch 13. September 2006, 14:33
von EnTeQuAk
Rofl :D

Jo hast recht :D

Sorry... war halt schnell zusammengebastelt, weil ich nicht den gesamten Code meines Programmes posten wollte.


MfG EnTeQuAk