Python编程求助:指定位置字母与指定元音数单词查询实现
5字母单词筛选功能进阶实现指导
现有代码优化点
- 你定义的
name_file()函数返回了文件名,但后续代码直接硬编码打开5letterwords.txt,应该用函数返回的变量,避免逻辑脱节 - 文件打开建议用
with语句,自动处理文件关闭,更安全 - 输入的
location是字符串类型,需要转为整数,还要验证输入是否在1-5范围内,防止索引越界
任务1:指定位置包含目标字母的5字母单词实现
核心逻辑
- 明确规则:用户输入的位置1对应单词首字母(Python字符串索引从0开始,所以要把输入值减1)
- 验证输入:确保用户输入的是1-5的整数,否则提示重新输入
- 判断条件:检查单词对应索引位置的字符是否等于目标字母
代码片段修改
# 替换原任务1的代码部分 letter2 = input("Pick another letter to check: ") # 输入验证:确保location是1-5的整数 while True: location = input("Pick the position (1-5, 1 = first letter): ") if location.isdigit() and 1 <= int(location) <=5: location_idx = int(location) -1 break print("Invalid input! Please enter a number between 1 and 5.") # 筛选符合条件的单词 for word in word_list: # 确保单词是5字母(避免文件中存在异常数据) if len(word) ==5 and word[location_idx] == letter2.lower(): print(word)
任务2:指定数量元音的5字母单词实现
核心逻辑
- 定义元音集合:
vowels = {'a','e','i','o','u'},统一转小写判断,兼容大小写不同的单词 - 统计元音数量:遍历单词每个字符,统计属于元音的个数
- 匹配用户指定的数量,输出符合条件的单词
代码实现示例
# 任务2的完整代码块 vowels = {'a','e','i','o','u'} # 输入验证:确保输入的是0-5之间的整数 while True: vowel_count_input = input("Enter the number of vowels to filter (0-5): ") if vowel_count_input.isdigit() and 0 <= int(vowel_count_input) <=5: target_count = int(vowel_count_input) break print("Invalid input! Please enter a number between 0 and 5.") # 筛选符合条件的单词 for word in word_list: if len(word) !=5: continue # 统计单词中的元音数量(不区分大小写) current_vowel_count = sum(1 for char in word.lower() if char in vowels) if current_vowel_count == target_count: print(word)
整合后的完整代码
import os.path def name_file(): # asking user name of file file_name = input("What is the name of the file to read the words from? ") while not os.path.exists(file_name): print("This file does not exist") file_name = input("What is the name of the file to read the words from? ") return file_name # 获取文件名并读取单词列表 file_name = name_file() word_list = [] with open(file_name, "r") as file_opener: for line in file_opener.readlines(): word = line.strip() # 提前过滤非5字母单词,减少后续处理量 if len(word) ==5: word_list.append(word.lower()) # 统一转小写,避免大小写问题 # 基础功能:输出含指定字母的单词 letter = input("Pick a letter to filter words containing it: ").lower() print(f"\nWords containing '{letter}':") for word in word_list: if letter in word: print(word) # 任务1:指定位置含目标字母的单词 print("\n--- Task 1: Filter words with specific letter at position ---") letter2 = input("Pick a letter: ").lower() while True: location = input("Pick the position (1-5, 1 = first letter): ") if location.isdigit() and 1 <= int(location) <=5: location_idx = int(location) -1 break print("Invalid input! Please enter a number between 1 and 5.") print(f"\nWords with '{letter2}' at position {location}:") for word in word_list: if word[location_idx] == letter2: print(word) # 任务2:指定元音数量的单词 print("\n--- Task 2: Filter words with specific number of vowels ---") vowels = {'a','e','i','o','u'} while True: vowel_count_input = input("Enter the number of vowels to filter (0-5): ") if vowel_count_input.isdigit() and 0 <= int(vowel_count_input) <=5: target_count = int(vowel_count_input) break print("Invalid input! Please enter a number between 0 and 5.") print(f"\nWords with {target_count} vowels:") for word in word_list: current_vowel_count = sum(1 for char in word if char in vowels) if current_vowel_count == target_count: print(word)
内容的提问来源于stack exchange,提问作者mdot
相关产品推荐
相关产品推荐

