raw_input Mehrzeilige Eingaben?

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.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

raw_input Mehrzeilige Eingaben?

Beitragvon EnTeQuAk » Montag 11. September 2006, 16:31

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
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Beitragvon pyStyler » Montag 11. September 2006, 17:06

Hi,

Code: Alles auswählen

 def rawInput():
   a=raw_input('langer text: ')
   while a != '':
      a=raw_input('langer text: ')


vielleicht sowas da?

MfG
pyStyler
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Montag 11. September 2006, 17:45

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
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Beitragvon DatenMetzgerX » Montag 11. September 2006, 18:05

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
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Montag 11. September 2006, 18:18

: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
BlackJack

Beitragvon BlackJack » Montag 11. September 2006, 18:28

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.
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Dienstag 12. September 2006, 16:32

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
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Beitragvon DatenMetzgerX » Dienstag 12. September 2006, 16:56

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
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Dienstag 12. September 2006, 19:27

Ok nun geht es :D


Danke für eure Hilfe!
Vielen Vielen Dank!


MfG EnTeQuAk
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Dienstag 12. September 2006, 20:38

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...
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Beitragvon EnTeQuAk » Mittwoch 13. September 2006, 14:33

Rofl :D

Jo hast recht :D

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


MfG EnTeQuAk

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Holger Chapman