在Python开发的数字类小游戏中,生成三位随机数后判断数字重复情况,并据此计算胜率倍数是一个常见需求,该逻辑可以直接用于抽奖、猜数字等游戏的核心规则设计。

三位随机数的生成
首先我们需要生成三位随机数,这里使用random模块实现,需要注意三位数的范围是100到999,包含两端边界值。
import random
# 生成100-999之间的三位随机整数
random_num = random.randint(100, 999)
print(f"生成的三位随机数为:{random_num}")
检测数字重复情况
判断三位数字是否存在重复,我们可以将数字转换为字符串,提取每一位字符后统计出现次数,也可以使用集合的特性来快速判断。
方法一:字符串拆分统计
将随机数转为字符串后,分别取三个字符,再统计每个字符的出现次数,出现次数大于1则存在重复。
# 将随机数转为字符串,拆分每一位
num_str = str(random_num)
digit1 = num_str[0]
digit2 = num_str[1]
digit3 = num_str[2]
# 统计每个数字出现次数
count_dict = {}
for digit in num_str:
count_dict[digit] = count_dict.get(digit, 0) + 1
# 判断是否有重复
has_duplicate = any(count > 1 for count in count_dict.values())
print(f"是否存在重复数字:{has_duplicate}")
方法二:集合去重判断
集合会自动去重,将原数字的各位字符转成集合后,如果集合长度小于3,说明存在重复数字。
# 将各位数字放入集合
digit_set = set(num_str)
# 集合长度小于3则存在重复
has_duplicate = len(digit_set) < 3
print(f"是否存在重复数字:{has_duplicate}")
计算胜率倍数
胜率倍数通常根据重复规则设定,比如无重复数字时倍数为1,两位重复时倍数为3,三位全重复时倍数为10,我们可以根据重复的数字数量来计算对应倍数。
def calculate_multiplier(num):
num_str = str(num)
# 统计重复数字的数量
duplicate_count = 0
for digit in set(num_str):
if num_str.count(digit) > 1:
duplicate_count += 1
# 根据重复数量返回倍数
if duplicate_count == 0:
return 1
elif duplicate_count == 1:
# 两位重复的情况
return 3
else:
# 三位全重复的情况
return 10
multiplier = calculate_multiplier(random_num)
print(f"当前胜率倍数为:{multiplier}")
完整流程整合示例
将生成随机数、检测重复、计算倍数三个步骤整合到一起,得到完整的实现代码。
import random
def check_duplicate_and_calculate(num):
num_str = str(num)
# 检测重复
has_duplicate = len(set(num_str)) < 3
# 计算倍数
duplicate_count = 0
for digit in set(num_str):
if num_str.count(digit) > 1:
duplicate_count += 1
if duplicate_count == 0:
multiplier = 1
elif duplicate_count == 1:
multiplier = 3
else:
multiplier = 10
return has_duplicate, multiplier
# 生成随机数
random_num = random.randint(100, 999)
# 检测并计算
has_duplicate, multiplier = check_duplicate_and_calculate(random_num)
print(f"生成的三位随机数:{random_num}")
print(f"是否存在重复数字:{has_duplicate}")
print(f"对应胜率倍数:{multiplier}")
规则扩展说明
如果游戏需要更复杂的倍数规则,比如区分两位重复是相邻重复还是不相邻重复,可以额外增加位置判断逻辑,只需要在检测重复的步骤中增加对索引位置的校验即可。同时如果需要多次生成随机数统计整体胜率,可以将上述逻辑放入循环,累计计算总倍数和平均倍数。