如何从4个变量中随机修改2个变量的值为'—'?
解决方法
你遇到的问题核心在于:random.choice()返回的是变量的值而非变量本身,所以无法直接对返回值赋值。下面提供两种兼顾高效性与可读性的实现方案:
方案一:基于列表的简洁实现
这种方法利用列表存储变量值,通过随机选择索引修改值,最后重新映射回原变量,逻辑清晰且高效:
from random import sample # 初始化变量 a = 10 b = 18 c = 15 d = 92 # 将变量存入列表便于批量操作 var_list = [a, b, c, d] # 随机挑选2个不重复的索引(避免重复修改同一个变量) target_indices = sample(range(4), 2) # 修改选中位置的值 for idx in target_indices: var_list[idx] = '—' # 将修改后的值重新赋值给原变量 a, b, c, d = var_list print(a, b, c, d)
方案二:基于字典的直观实现
如果希望更明确地关联变量名与值,可使用字典存储,可读性更强:
from random import sample # 用字典存储变量名与对应值 var_dict = { 'a': 10, 'b': 18, 'c': 15, 'd': 92 } # 随机选择2个变量名 target_keys = sample(var_dict.keys(), 2) # 修改选中变量的值 for key in target_keys: var_dict[key] = '—' # 提取修改后的值到原变量 a, b, c, d = var_dict['a'], var_dict['b'], var_dict['c'], var_dict['d'] print(a, b, c, d)
关键说明
- 使用
random.sample()而非choice():sample()可以一次性选出不重复的2个目标,避免两次choice()可能选中同一个变量的问题。 - 两种方案都保持了代码的可读性:步骤拆分明确,没有复杂的嵌套或魔法操作;同时效率很高,仅需常数时间的操作。
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

