多次调用函数时如何将随机生成值追加至同一列表?
解决方案:实现随机数累积存储的功能
原代码的核心问题是每次调用randnum()都会重新初始化add_rand_num列表,且递归调用时新的函数实例使用独立的列表,导致无法保留之前生成的特定随机数。以下提供两种可行的修正方案:
方案一:使用全局变量
将存储列表定义为全局变量,确保所有函数调用都操作同一个列表:
import random import time # 全局列表,用于累积存储每次生成的特定随机数 add_rand_num = [] def randnum(): global add_rand_num # 输出10个随机浮点数 for x in range(10): print(random.uniform(.0005, .5)) time.sleep(.5) print("----------------------") # 生成并存储特定随机数 num = random.uniform(.0005, .5) print(num) add_rand_num.append(num) while True: redo = input("Would you like to generate another num? Enter Y for YES or N for NO: ") if redo == "Y": randnum() break elif redo == "N": # 输出求和结果及所有存储的数字 print(f"The sum of the numbers you generated is {sum(add_rand_num)}! ") print(f"All stored numbers: {add_rand_num}") break else: print("Please enter either Y for YES or N for NO") randnum()
方案二:使用函数默认参数(避免全局变量)
通过函数参数传递列表,利用默认参数实现首次调用的初始化,后续调用传递已有数据的列表:
import random import time def randnum(add_rand_num=None): # 首次调用时初始化空列表 if add_rand_num is None: add_rand_num = [] # 输出10个随机浮点数 for x in range(10): print(random.uniform(.0005, .5)) time.sleep(.5) print("----------------------") # 生成并存储特定随机数 num = random.uniform(.0005, .5) print(num) add_rand_num.append(num) while True: redo = input("Would you like to generate another num? Enter Y for YES or N for NO: ") if redo == "Y": # 递归调用时传递当前列表 randnum(add_rand_num) break elif redo == "N": print(f"The sum of the numbers you generated is {sum(add_rand_num)}! ") print(f"All stored numbers: {add_rand_num}") break else: print("Please enter either Y for YES or N for NO") randnum()
额外修正说明
原代码中存在一个逻辑错误:用户选择N时,原代码直接输出了列表而非求和结果,上述方案已修正为sum(add_rand_num),同时增加了输出所有存储数字的功能,方便验证累积效果。
内容的提问来源于stack exchange,提问作者user20154246
相关产品推荐
相关产品推荐

