在唐诗.txt文件,如下图所示。每首诗的标题为序号诗人冒号诗名。编写程序,输入诗人姓名,显示该诗人所写的诗的标题,以及作品数,如图所示。如果该诗人没有作品,显示无作品。要求能够循环输入诗人姓名进行查找,直到输入空串为止。提示:查询完一位诗人后需要通过f1.seek(0)将文件指针移到文件的开始处
时间: 2023-11-22 13:54:06 浏览: 81
对于这个问题,我可以提供 Python 的代码实现:
```
import os
file_path = '唐诗.txt'
def search_poet(name):
with open(file_path, 'r', encoding='utf-8') as f1:
count = 0
for line in f1:
if name in line:
count += 1
print(line.strip())
if count == 0:
print('无作品')
print('作品数:', count)
while True:
name = input('请输入诗人姓名(输入空串退出):')
if name == '':
break
search_poet(name)
with open(file_path, 'r', encoding='utf-8') as f1:
f1.seek(0)
```
这段代码会打开名为 `唐诗.txt` 的文件,然后通过循环输入的诗人姓名,在文件中查找该诗人所写的诗的标题,并计算作品数。如果该诗人没有作品,则会输出“无作品”。最后,需要通过 `f1.seek(0)` 将文件指针移到文件的开始处,以便下一轮循环查找。
相关问题
代码生成 Python,在唐诗.txt文件中每首诗的标题为序号诗人冒号诗名,编写程序,输入诗人姓名,显示该诗人所写的诗的标题,以及作品数。 如果该诗人没有作品,显示无作品。
可以使用以下代码实现:
```python
poet = input("请输入诗人姓名:")
with open("唐诗.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
# 处理每首诗的标题和内容
poem_titles = []
poet_poems = []
for i in range(len(lines)):
if i % 2 == 0: # 标题行
title_info = lines[i].strip().split(":")
if len(title_info) == 2 and title_info[0] == str(i//2+1) and title_info[1].startswith(poet):
# 确认该行为标题,并且诗人姓名匹配
poem_titles.append(title_info[1])
poet_poems.append(lines[i+1])
# 输出作品数和作品标题
if len(poet_poems) > 0:
print(f"该诗人共有{len(poet_poems)}首作品,分别为:")
for title in poem_titles:
print(title)
else:
print("该诗人无作品。")
```
该程序首先读取文件中的所有行,然后遍历每一行,处理每首诗的标题和内容。如果该行为标题行,并且序号和诗人姓名匹配,则将该诗的标题和内容分别存入 `poem_titles` 和 `poet_poems` 列表中。最后根据 `poet_poems` 的长度判断该诗人是否有作品,并输出作品数和作品标题,或者输出无作品。
代码生成 Python,在唐诗.txt文件中编写程序,输入诗人姓名,显示该诗人所写的诗的标题,以及作品数。 如果该诗人没有作品,显示无作品。
可以使用Python的文件读取和字符串处理功能来实现此功能。以下是一个可能的实现:
```python
# 打开唐诗文件
with open('唐诗.txt', 'r', encoding='utf-8') as f:
# 读取所有行
lines = f.readlines()
# 初始化字典来存储每个诗人的作品数
poet_counts = {}
# 遍历所有行
for line in lines:
# 分割每行,以便获取诗人姓名和诗的标题
parts = line.strip().split(',')
if len(parts) < 2:
continue
poet_name = parts[0]
poem_title = parts[1]
# 更新诗人作品数
if poet_name in poet_counts:
poet_counts[poet_name] += 1
else:
poet_counts[poet_name] = 1
# 输入诗人姓名
poet_name = input('请输入诗人姓名:')
# 检查该诗人是否有作品
if poet_name in poet_counts:
print('%s 共写了 %d 首诗,其中一些作品包括:' % (poet_name, poet_counts[poet_name]))
# 遍历所有行,输出该诗人的作品标题
for line in lines:
parts = line.strip().split(',')
if len(parts) < 2:
continue
if parts[0] == poet_name:
print('- ' + parts[1])
else:
print('该诗人没有作品。')
```
需要注意的是,这个实现假定每行都包含诗人姓名和诗的标题,并且使用“,”作为分隔符。如果唐诗文件的格式不同,需要酌情修改代码。