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

它应该从文本文件中获取行并要求我输入第一、第二、第三等。直到文件中没有更多的行,如果我输入错误的行,它会打印“否!” 但它说“不!” 对于我输入的每一个输入,我该怎么做才能使这段代码工作?

4

4 回答 4

4

不错的尝试!这是一个使用有用rstrip的字符串方法来处理那些讨厌的换行符的解决方案。这就是你想要的,逐行要求输入,如果你弄错了,它会移动到下一个。

with open('lines.txt') as f:
    for i in f:
        i = i.rstrip()
        line = input('line: ')
        if line != i:
            print('No!')
于 2013-09-01T08:30:54.417 回答
3

.split()返回一个列表。您可能打算检查该行是否列表中。

做:

if line in i.split('\n'):
于 2013-09-01T08:12:35.760 回答
1

您正在将字符串与行中的列表进行比较

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

您可以尝试与数组中的第一个元素进行比较:

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

或者,如果您可以安全地忽略前导和尾随空格:

    if line != i.strip()

您拥有的 else 块将在每个正确输入的行之后显示第二个未经检查的输入,这是您想要的吗?

于 2013-09-01T08:31:51.273 回答
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')

如果出现错误,问题是否要求您不要移动到下一行?

于 2013-09-01T08:33:00.057 回答