You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在存储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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 08:30:03