2012-07-26 11 views
40

Voglio creare un programma Python che accetta più righe di input dell'utente. Ad esempio:Come leggo più righe di input non elaborato in Python?

This is a multilined input. 
It has multiple sentences. 
Each sentence is on a newline. 

Come posso ricevere più righe di input non elaborato?

+3

Se stai prendendo più linee di input, come fai a sapere quando l'input è terminato? – Blckknght

+1

Hanno un ciclo che accetta raw_input fino a quando l'utente non entra in "done" o qualcosa del genere. – Pramod

+1

Immagino che tu stia puntando all'input dell'utente, ma puoi aggiungere newlines \ n al prompt, ad esempio: raw_input ('foo \ nbar:') –

risposta

54
sentinel = '' # ends when this string is seen 
for line in iter(raw_input, sentinel): 
    pass # do things here 

per ottenere ogni linea come una stringa si può fare:

'\n'.join(iter(raw_input, sentinel)) 

Python 3:

'\n'.join(iter(input, sentinel)) 
+4

Sono un pitonista da circa 6 anni e non ho mai saputo di questa altra forma di 'iter()'. Lei signore è un genio della bellezza! – inspectorG4dget

+4

Come si imposta EOF come carattere sentinella? – MadTux

+0

@jamylak - questo non consente un prompt in 'raw_input'? Sembra che tu non possa passare parametri alla funzione nel primo argomento di 'iter'. – Randy

6

linee continuare a leggere fino a quando l'utente immette una riga vuota (o cambiare stopword a qualcos'altro)

text = "" 
stopword = "" 
while True: 
    line = raw_input() 
    if line.strip() == stopword: 
     break 
    text += "%s\n" % line 
print text 
3

In alternativa, si può provare sys.stdin.read()

import sys 
s=sys.stdin.read() 
print s 
+1

Fornisci maggiori dettagli, come il codice di esempio che mostra come usare questa funzione. –

1

Basta estendere questa risposta https://stackoverflow.com/a/11664652/4476612 invece di qualsiasi parola di arresto si può solo verificare se una linea è lì o no

content = [] 
while True: 
    line = raw_input() 
    if line: 
     content.append(line) 
    else: 
     break 

si otterrà il linee in una lista e poi unisciti a \ n per ottenere il tuo formato.

print '\n'.join(content) 
Problemi correlati