如何在存储ASCII和的Python字典中查找最大素数值
从ASCII和字典中找出最大素数值
我编写了一个Python脚本,读取文本文件并拆分为字符串列表,计算每个字符串的ASCII值之和后存入字典(字符串为键,ASCII和为值),现在需要找出这些值中的最大素数。
原脚本代码:
if __name__ == "__main__": # 打开文本文件读取内容 my_file = open("english FILTERED.ALL.txt", "r") # 读取文件内容 data = my_file.read() # 按换行符拆分内容为列表 data_into_list = data.split("\n") print(data_into_list) my_file.close() # 创建字典存储字符串与对应ASCII和 result_dict = {} # 遍历列表计算每个字符串的ASCII值之和 for x in data_into_list: ascii_sum = sum(ord(char) for char in x) result_dict[x] = ascii_sum # 打印原列表 print("The original list: " + str(data_into_list)) # 打印字符串与ASCII和的字典 print("String and their ASCII sum: " + str(result_dict))
当前输出示例:
String and their ASCII sum : {'ACM': 209, 'ANSI': 299, 'ASAP': 293, 'ASCII': 361, 'Achilles': 805, 'Ada': 262, 'Afghanistan': 1124, 'Africa': 582, 'African': 692, 'Africans': 807, 'Airedale': 791, 'Alabama': 671, 'Alabamian': 886, 'Alaska': 589, 'Albania': 680, 'Albanian': 790, 'Albanians': 905, 'Alcibiades': 993, 'Alden': 484, 'Algeria': 693}
解决方案
实现需求分为两步:
- 编写高效的素数判断函数
- 从字典值中筛选素数,找出最大值并对应到原字符串
1. 素数判断函数
采用优化逻辑提升效率:排除小于2的数,先检查是否为偶数,再仅遍历到平方根的奇数进行整除判断:
def is_prime(n): if n <= 1: return False if n == 2: return True if n % 2 == 0: return False for i in range(3, int(n**0.5) + 1, 2): if n % i == 0: return False return True
2. 整合到原脚本
在原代码末尾添加筛选与最大值查找逻辑:
# 筛选出所有ASCII和为素数的键值对 prime_items = {k: v for k, v in result_dict.items() if is_prime(v)} if prime_items: # 找出最大的素数ASCII和 max_prime_value = max(prime_items.values()) # 匹配对应的字符串(支持多个字符串对应同一最大值的情况) max_prime_strings = [k for k, v in prime_items.items() if v == max_prime_value] print(f"最大素数ASCII和为: {max_prime_value},对应的字符串: {max_prime_strings}") else: print("字典中没有素数ASCII和")
完整修改后代码
def is_prime(n): if n <= 1: return False if n == 2: return True if n % 2 == 0: return False for i in range(3, int(n**0.5) + 1, 2): if n % i == 0: return False return True if __name__ == "__main__": # 打开文本文件读取内容 my_file = open("english FILTERED.ALL.txt", "r") # 读取文件内容 data = my_file.read() # 按换行符拆分内容为列表 data_into_list = data.split("\n") my_file.close() # 创建字典存储字符串与对应ASCII和 result_dict = {} # 遍历列表计算每个字符串的ASCII值之和 for x in data_into_list: ascii_sum = sum(ord(char) for char in x) result_dict[x] = ascii_sum # 打印字符串与ASCII和的字典 print("String and their ASCII sum: " + str(result_dict)) # 筛选素数ASCII和的键值对 prime_items = {k: v for k, v in result_dict.items() if is_prime(v)} if prime_items: max_prime_value = max(prime_items.values()) max_prime_strings = [k for k, v in prime_items.items() if v == max_prime_value] print(f"最大素数ASCII和为: {max_prime_value},对应的字符串: {max_prime_strings}") else: print("字典中没有素数ASCII和")
示例输出结果
针对给出的示例字典,筛选后的素数有293、791、671、589、693,其中最大的是791,对应字符串Airedale,最终输出:
最大素数ASCII和为: 791,对应的字符串: ['Airedale']
内容的提问来源于stack exchange,提问作者mattdub
相关产品推荐
相关产品推荐

