Python循环中如何同时访问两个元素实现问答对输出?
循环中访问下一个索引
我有一个包含以下内容的文本文件:
what's you'r name? my name is Micheal how old are you? I'm 33 year's old
我编写了如下Python代码:
filename= input("file name?\n") try: txt = open(filename+'.txt', 'r', encoding='utf-8').readlines() print('could not find file name') except FileNotFoundError: print('could not fine file') for count, line in enumerate(txt): pass for i in range(count+1): print('Q',txt[i]) print('A',txt[i+1])
该文本文件存储着问题与答案,我希望输出格式如下:
question answer question answer
与文本文件中的顺序一致。请问如何在Python的一次循环中访问两个元素来实现此需求?
首先修正你代码里的两处问题:
- try-except逻辑颠倒:成功打开文件后不该打印"找不到文件"的提示,且存在拼写错误(
fine→find) - 原循环会触发索引越界:当
i取到最后一个元素索引时,i+1超出列表范围
以下是几种一次循环访问两个元素的可行实现:
方法1:步长为2的range循环
让循环索引每次跳2步,直接取当前索引和下一个索引的元素:
filename = input("file name?\n") try: with open(filename + '.txt', 'r', encoding='utf-8') as f: txt = f.readlines() # 去除每行末尾换行符,避免输出多余空行 txt = [line.strip() for line in txt] # 步长为2遍历,每次配对问题和答案 for i in range(0, len(txt), 2): print('Q', txt[i]) print('A', txt[i+1]) except FileNotFoundError: print('could not find file')
用with语句自动管理文件关闭,比直接open更安全;strip()处理换行符让输出更整洁。
方法2:用zip分组配对
把列表拆分为问题(偶数索引)和答案(奇数索引)两组,再用zip一一配对:
filename = input("file name?\n") try: with open(filename + '.txt', 'r', encoding='utf-8') as f: txt = [line.strip() for line in f] # 配对偶数索引的问题和奇数索引的答案 for question, answer in zip(txt[::2], txt[1::2]): print('Q', question) print('A', answer) except FileNotFoundError: print('could not find file')
txt[::2]取所有偶数索引元素,txt[1::2]取所有奇数索引元素,zip会自动将两组元素按顺序配对。
方法3:自定义生成器(适合复杂场景)
如果需要更灵活的遍历逻辑,可以写一个生成器函数,每次返回一对元素:
def pair_items(lst): it = iter(lst) while True: try: yield next(it), next(it) except StopIteration: break filename = input("file name?\n") try: with open(filename + '.txt', 'r', encoding='utf-8') as f: txt = [line.strip() for line in f] for question, answer in pair_items(txt): print('Q', question) print('A', answer) except FileNotFoundError: print('could not find file')
内容的提问来源于stack exchange,提问作者Rakan 3abdullah
相关产品推荐
相关产品推荐

