2014-01-02 3 views
-1

Я создал несколько тестовых программ, чтобы показать, что я имею в видуВ чем разница между методами ввода?

import os 
r = open('in.txt', 'r') 
for line in r.readlines(): 
    print line 

Над программа печатает каждую строку в «in.txt», которая является то, что я хочу с другими входными

for line in raw_input(): 
    print line 

I «ASDF», и это дает мне (она также не позволяет мне ввода нескольких строк)

a 
s 
d 
f 

Наконец,

for line in str(input()): 
    print line 

I вход «ASDF», и это дает мне (не позволяет мне ввода нескольких строк)

Traceback (most recent call last): 
    File "C:/Python27/test.py", line 1, in <module> 
    for line in str(input()): 
    File "<string>", line 1, in <module> 
NameError: name 'asdf' is not defined 

Может кто-то пожалуйста, скажите мне, что происходит? В чем разница между этими тремя методами ввода, кроме чтения файлов и стандартного ввода?

+0

Попробуйте ввести '' asdf'' вместо 'asdf'. Очевидно, вы пытаетесь получить доступ к переменной. –

ответ

3

raw_input() берет одну строку в качестве входных данных от пользователя и дает строку, а при прохождении через for ... in вы перебираете символы.

input() берет ввод и выполняет его как код Python; вы редко должны когда-либо использовать его.

(. В Python 3, input делает то же самое, как Python 2-х raw_input, и это не функция, как Python 2-х input)

Если вы хотите многострочный ввод, попробуйте:

lines = [] 
while True: 
    line = raw_input() 
    if line == '': break 
    lines.append(line) 

for line in lines: 
    # do stuff 
    pass 

Введите пустую строку в конец сигнала ввода.

+0

Стоит отметить, что в Python3.x 'raw_input()' был переименован в 'input()', а 'input()' Python2.x перешел в путь динозавров –

+0

Итак, как мне сделать то же самое, что и первой, но использовать raw_input() вместо чтения файла? – Adam

+0

@ Адам: У вас нет. 'raw_input()' всегда дает вам ** одну строку **; файл дает вам последовательность строк. –

0

В соответствии с вашим вторичным вопросом в ответе «Дверная ручка снегом», вот пример кода, но помните, ЭТО НЕ ХОРОШАЯ ПРАКТИКА. Для быстрого и грязного взлома это работает хорошо.

def multiline_input(prompt): 
    """Prompts the user for raw_input() until an empty string is entered, 
then returns the results, joined as a string by the newline character""" 

    tmp = "string_goes_here" #editor's note: this just inits the variable 
    tmp_list = list() 
    while tmp: 
     tmp_list.append(tmp) 
     tmp = raw_input(prompt) 
    input_string = '\n'.join(tmp_list[1:]) 
    return input_string 

for line in multiline_input(">> ").splitlines(): 
    print(line) 
+0

... это должно было бы быть «string_goes_here» перед введенным текстом ... – Doorknob

+0

О, стреляй, ты прав. Sec. Хорошо, исправлено. Darn hackjob кодера я! ;) –

Смежные вопросы