技术咨询:‘写入单词至新文件’任务实现困惑及需求说明
搞定“写入单词至新文件”任务的分步方案
兄弟,卡3小时确实够闹心的,咱们把这个任务拆成几个清晰的小模块,一步步啃下来,其实核心就是写入原始输入文件和按单词长度统计频次并写入新文件这两块。下面我用Python给你拆解每一步,代码都是可直接运行的。
第一步:把用户输入写入TF4_1.txt
这部分是最基础的文件操作,没什么坑:先获取用户输入的带分隔符句子,然后直接写入文件就行。用with open是最稳妥的方式,自动帮你关闭文件,还能避免编码乱码问题。
# 获取用户输入的句子 user_input = input("请输入包含逗号、破折号的句子:") # 写入TF4_1.txt,指定utf-8编码防止乱码 with open("TF4_1.txt", "w", encoding="utf-8") as f: f.write(user_input)
第二步:拆分单词+按长度统计频次
这是任务的核心难点,咱们拆成两个小步骤:
2.1 正确拆分单词
任务里说分隔符是逗号、破折号,还有句子里的空格对吧?用正则表达式可以一次性把这些分隔符都处理掉,还能过滤掉拆分后可能出现的空字符串(比如句子首尾的空格或者连续分隔符导致的空值):
import re # 用正则拆分:匹配逗号、破折号、任意空白字符作为分隔符,+表示匹配1个或多个 words = [word for word in re.split(r'[,\-\s]+', user_input) if word]
2.2 按长度统计单词出现次数
这里用嵌套的defaultdict来存储数据,外层键是单词长度,内层键是单词本身,值是出现次数。这样不用手动判断键是否存在,代码更简洁:
from collections import defaultdict # 初始化嵌套字典:外层是长度,内层是{单词: 次数} length_word_count = defaultdict(lambda: defaultdict(int)) for word in words: word_len = len(word) # 只统计1到16个字母的单词,符合任务要求 if 1 <= word_len <= 16: length_word_count[word_len][word] += 1
第三步:把统计结果写入TF4_2.txt
现在要按1到16的长度顺序写入文件,每个长度下清晰列出单词和次数:
with open("TF4_2.txt", "w", encoding="utf-8") as f: # 从1循环到16,覆盖所有要求的长度 for length in range(1, 17): # 只有当前长度有单词时才写入内容 if length in length_word_count: f.write(f"{length})句子中{length}个字母单词及其重复次数:\n") # 遍历当前长度的所有单词和次数 for word, count in length_word_count[length].items(): f.write(f" - {word}: {count}次\n") f.write("\n") # 每个长度之间空一行,可读性更好
完整可运行代码
把上面的部分整合起来,就是完整的脚本,复制过去就能用:
import re from collections import defaultdict # 1. 写入原始输入到TF4_1.txt user_input = input("请输入包含逗号、破折号的句子:") with open("TF4_1.txt", "w", encoding="utf-8") as f: f.write(user_input) # 2. 拆分单词并按长度统计频次 words = [word for word in re.split(r'[,\-\s]+', user_input) if word] length_word_count = defaultdict(lambda: defaultdict(int)) for word in words: word_len = len(word) if 1 <= word_len <= 16: length_word_count[word_len][word] += 1 # 3. 写入统计结果到TF4_2.txt with open("TF4_2.txt", "w", encoding="utf-8") as f: for length in range(1, 17): if length in length_word_count: f.write(f"{length})句子中{length}个字母单词及其重复次数:\n") for word, count in length_word_count[length].items(): f.write(f" - {word}: {count}次\n") f.write("\n") print("任务完成!已生成TF4_1.txt和TF4_2.txt")
额外小提示
- 如果任务要求不区分大小写(比如"A"和"a"算同一个单词),可以在循环里把单词转成小写:
word = word.lower(),修改后的循环代码如下:for word in words: word = word.lower() # 转小写统一统计 word_len = len(word) if 1 <= word_len <= 16: length_word_count[word_len][word] += 1 - 如果输入句子里还有其他标点(比如句号、感叹号),可以扩展正则表达式的分隔符,比如改成
r'[,\-\s.!?]+',根据实际需求调整就行。
内容的提问来源于stack exchange,提问作者Den Andreychuk
相关产品推荐
相关产品推荐

