2013-09-01 4 views
1

Так вот мой код:Может кто-нибудь помочь исправить мой код?

with open('lines.txt') as f: 
for i in f: 
    line = input('line: ') 
    if line not in i.split('\n'): 
     print(line, i.split('\n'), end='\n') 
    else: 
     continue 

Он должен принести строки из текстового файла и попросить меня напечатать первый, второй, третий и т.д. Пока нет больше строк в файле, и если Я ошибаюсь, он печатает «Нет!». но он говорит: «Нет!» для каждого ввода, который я вводил, так что мне нужно сделать, чтобы этот код работал?

+1

Эй! [Рад видеть, что вы написали код:)] (http://stackoverflow.com/a/18555902/1971805) – TerryA

+0

Я тоже;) Спасибо за помощь !! – samir

+0

Должен ли он повторно запрашивать одну и ту же строку при неправильном вводе? В настоящее время это не так, он просит следующую строку. Последние две строки не делают ничего значительного. –

ответ

4

Хорошая попытка! Вот решение, используя полезный метод строки, чтобы позаботиться об этих надоедливых символах новой строки. Это делает то, что вы хотите, запрашивая ввод строки за строкой, и если вы ошибаетесь, он переходит на следующий.

with open('lines.txt') as f: 
    for i in f: 
     i = i.rstrip() 
     line = input('line: ') 
     if line != i: 
      print('No!') 
3

.split() возвращает список. Вероятно, вы хотели проверить, есть ли строка в списке.

Do:

if line in i.split('\n'): 
+0

Да, я пробовал, что не работал, и мне нужно убедиться, что это первая или вторая или третья строка, поэтому они должны быть в порядке, есть ли у вас еще какие-то подсказки? :) – samir

+0

@samir В любой строке? Тогда вы можете захотеть получить содержимое всего файла, выполнив 'f.read() 'и разделите это. Затем вы можете сделать 'if line in i.split ('\ n')' – TerryA

+0

Список упорядочен – Dcow

1

Вы сравниваете строку в списке в строке

if line != i.split('\n')[0]: 

Вы могли бы попробовать по сравнению с первым элементом в массиве:

if line != i.split('\n')[0]: 

Или, если вы можете спокойно игнорировать начальные и конечные пробелы:

if line != i.strip() 

Блок else, который у вас есть, будет представлять второй, непроверенный вход после каждой правильно введенной строки, это то, что вы намеревались?

1

Вы должны просто соответствовать всей строке? В этом случае все, что вы хотите,

if line != i.strip(): 

Если вам нужно игнорировать двойные пробелы и т.д. Это гораздо сложнее, вам нужно будет сделать следующее:

match = True 
myWords = line.strip().split() 
fileWords = i.strip().split() 
for myWord, fileWord in zip(myWords, fileWords): 
    if myWord != fileWord: 
    match = False 
if Match: 
    line = input('line: ') 
else: 
    print('No') 

ли проблемы требуют вы не перейдите на следующую строку, если вы получите ошибку ??

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