Python函数结果传递方法及素数筛选列表为空问题求助
问题解答
一、如何将一个函数的结果传递给另一个函数
你当前代码里两次调用get_list_of_int_numbers(n1),会生成两个完全不同的随机列表。正确做法是先把第一个函数的结果存入变量,再将这个变量传给第二个函数,既保证数据一致,也避免重复执行随机生成逻辑:
def main() -> None: n1 = random.randint(10, 100) # 存储第一个函数的结果 original_list = get_list_of_int_numbers(n1) print(original_list) # 将变量传入第二个函数 print(get_second_list_based_on_old_one_with_prime_digits(original_list))
二、素数列表为空的原因及修复
你的代码存在两个关键错误,导致第二个列表始终为空:
- 判断条件逻辑错误:
get_prime_digits(n)返回布尔值True/False,但你在列表推导式里用n == get_prime_digits(n)做判断——整数和布尔值永远不可能相等(比如素数11和True比较结果为False,因为True等价于整数1),所以条件永远不成立。应直接用get_prime_digits(n)作为判断条件。 - 素数列表语法错误:
get_prime_digits函数里的素数列表最后一个元素是97.,这是浮点数,而你生成的列表元素都是整数,整数和97.0无法相等,需去掉末尾的点,改为97。
另外,get_prime_digits函数名有误导性,它实际是判断数字是否为素数,建议更名为is_prime以明确功能。
修正后的完整代码
import random def get_list_of_int_numbers(n: int): # 若你想生成n个10-100的随机整数,可改用下面的写法 # list1 = [random.randint(10, 100) for _ in range(n)] # 保留你原逻辑(生成随机长度列表后重复n次) list1 = [random.randint(10, 100) for x in range(random.randint(10, 100))] * n return list1 def is_prime(n: int) -> bool: # 修正97后的点,改为整数 return n in [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] def get_second_list_based_on_old_one_with_prime_digits(expression: list) -> list: # 直接用is_prime(n)作为判断条件 list2 = [n for n in expression if is_prime(n)] return list2 def main() -> None: n1 = random.randint(10, 100) original_list = get_list_of_int_numbers(n1) print("原始列表:", original_list) print("素数列表:", get_second_list_based_on_old_one_with_prime_digits(original_list)) if __name__ == '__main__': main()
额外说明:如果get_list_of_int_numbers的预期是生成n个10-100的随机数,而非生成随机长度列表再重复n次,将函数内的列表生成式改为[random.randint(10, 100) for _ in range(n)]即可,这更符合常规需求。
内容的提问来源于stack exchange,提问作者JimmyJones
相关产品推荐
相关产品推荐

