【精选优质专栏推荐】
- 《AI 技术前沿》 —— 紧跟 AI 最新趋势与应用
- 《网络安全新手快速入门(附漏洞挖掘案例)》 —— 零基础安全入门必看
- 《BurpSuite 入门教程(附实战图文)》 —— 渗透测试必备工具详解
- 《网安渗透工具使用教程(全)》 —— 一站式工具手册
- 《CTF 新手入门实战教程》 —— 从题目讲解到实战技巧
- 《前后端项目开发(新手必知必会)》 —— 实战驱动快速上手
每个专栏均配有案例与图文讲解,循序渐进,适合新手与进阶学习者,欢迎订阅。

以题代练掌握Python知识点,在代码中理解思路,不做过多叙述。
题目
给定两个 .txt 文件,文件中分别包含数字列表:
1.一个文件列出 1000 以下的所有素数(prime numbers)。
2.另一个文件列出 1000 以下的所有快乐数(happy numbers)。
编写程序,找出两个文件中重复出现的数字(即同时是素数又是快乐数的数字)。
提示:
- 素数是除了 1 和自身外不能被其他数字整除的数。
- 快乐数在数学中有定义,可参考维基百科;简单理解是将一个数的各位数字平方和重复计算,最终结果为 1 的数即为快乐数。
代码
1.用 Python 脚本生成两个测试用的 .txt 文件:一个包含 1000 以下的素数,另一个包含 1000 以下的快乐数。
# 生成素数列表
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5)+1):
if n % i == 0:
return False
return True
primes = [x for x in range(2, 1000) if is_prime(x)]
with open("primes.txt", "w", encoding="utf-8") as f:
for p in primes:
f.write(str(p) + "\n")
print("素数文件 'primes.txt' 已生成。")
# 生成快乐数列表
def is_happy(n):
seen = set()
while n != 1 and n not in seen:
seen.add(n)
n = sum(int(digit)**2 for digit in str(n))
return n == 1
happy_numbers = [x for x in range(1, 1000) if is_happy(x)]
with open("happy_numbers.txt", "w", encoding="utf-8") as f:
for h in happy_numbers:
f.write(str(h) + "\n")
print("快乐数文件 'happy_numbers.txt' 已生成。")



2.代码:
# 读取第一个文件(素数)
with open("primes.txt", "r", encoding="utf-8") as f:
primes = set(int(line.strip()) for line in f)
# 读取第二个文件(快乐数)
with open("happy_numbers.txt", "r", encoding="utf-8") as f:
happy_numbers = set(int(line.strip()) for line in f)
# 找出重叠数字
overlap = primes & happy_numbers # 取集合交集
# 输出结果
print("同时是素数和快乐数的数字有:")
print(sorted(overlap))


被折叠的 条评论
为什么被折叠?



