Python报错‘set对象无rstrip属性’及素数相关代码问题排查
解决Python代码中的
'set' object has no attribute 'rstrip'错误及功能完善 首先咱们先揪出报错的核心原因:你代码里出现了变量名拼写错误!你读文件后把素数列表存在了alsayilar里,但在maxasal函数里却误用了asalsayilar——如果这个asalsayilar是个集合(比如你之前不小心定义过),那调用它元素的rstrip()方法自然会报错,因为集合类型根本没有这个字符串处理方法。
接下来咱们一步步修复并完善代码:
1. 修正变量名错误
把函数里的asalsayilar统一改成alsayilar,保证变量名全程一致,这是解决报错的关键。
2. 替换递归为循环,避免栈溢出
原来的递归写法如果素数数量较多,会触发Python的递归深度限制报错,换成循环写法更稳妥、更易维护。
3. 补全未完成的minasal函数
这个函数的逻辑应该是收集大于等于mindeger的素数,咱们把它补全并优化。
4. 优化全局变量使用(可选)
尽量避免使用全局变量,把参数传入函数的写法更符合Python的编码规范。
修复后的完整代码
from random import randint import os def get_primes_from_file(file_path): # 读取文件中的素数,处理换行符并转成整数存储 with open(file_path, "r") as dosya: return [int(line.rstrip('\n')) for line in dosya.readlines()] def get_min_primes(primes, min_val): # 收集大于等于min_val的素数 min_primes = [] for p in primes: if p >= min_val: min_primes.append(p) else: continue return min_primes def get_max_primes(primes, max_val): # 收集小于等于max_val的素数(素数文件按升序排列时可加break优化) max_primes = [] for p in primes: if p <= max_val: max_primes.append(p) else: break # 素数有序的话,后面的数更大,直接终止循环 return max_primes def find_common_primes(list1, list2): # 找出两个素数列表的交集 return list(set(list1) & set(list2)) # 主逻辑执行部分 if __name__ == "__main__": path = os.path.abspath('') primes = get_primes_from_file(os.path.join(path, "asaldb.txt")) mindeger = int(input("Minumum Değer Kaç ? ")) maxdeger = int(input("Maximum Değer Kaç ? ")) minasallar = get_min_primes(primes, mindeger) maxasallar = get_max_primes(primes, maxdeger) ortakasal = find_common_primes(minasallar, maxasallar) print(f"Belirtilen aralıkta bulunan asal sayılar: {ortakasal}")
额外优化说明
- 用
with语句打开文件,会自动关闭文件,避免资源泄漏问题 - 读取素数时直接转成整数,后续操作不用反复类型转换,更高效
- 如果你的
asaldb.txt里的素数是按从小到大排序的,get_max_primes里的break可以大幅提升执行速度 - 用集合操作找交集更简洁,最后转回列表保持输出格式一致
内容的提问来源于stack exchange,提问作者Ömer Faruk Boran
相关产品推荐
相关产品推荐

