延寿药水Potion of Longevity
药水,极珍稀
饮用此药水后,你的生理年龄减少1d6+6岁,药水最低将你降低至13岁。此后每当你再次饮这种药水时,都会累加10%的概率令你增加1d6+6岁,而非减少。这种琥珀色药水中看似悬浮着一条蝎子的尾巴、一颗蝰蛇的牙、一只死蜘蛛,以及一颗违反常理地跳动着的小心脏。药水瓶被打开时,这些成分都将无影无踪。
灵感来自于之前群友关于人类喝多少延寿药水必定能老死的讨论,做了个脚本:
请输入测试次数:50
请输入初始年龄(不能低于13岁):24
请输入预期寿命上限:80
第 1 次测试: 饮用了 15 瓶药水后,年龄达到了 84 岁。
第 2 次测试: 饮用了 16 瓶药水后,年龄达到了 81 岁。
……
50 次测试的平均饮用次数: 14.00 瓶药水
以种族平均预期寿命的30%作为初始寿命,人类喝14瓶左右基本就能确保老死,精灵则是66瓶,矮人是33瓶。
嗯,真是完全用不上的研究啊()
代码:
import random
def drink_potion(age, is_first_time, aging_chance):
if is_first_time:
# 第一次喝药水必定年轻
age -= random.randint(1, 6) + 6
age = max(age, 13)
return age, False, aging_chance
else:
if random.random() <= aging_chance:
# 衰老
age += random.randint(1, 6) + 6
else:
# 年轻
age -= random.randint(1, 6) + 6
age = max(age, 13)
# 增加10%衰老概率
aging_chance += 0.1
return age, False, aging_chance
def simulate_drinking_potion(initial_age, max_age, max_trials=1000):
age = initial_age
is_first_time = True
aging_chance = 0.1
trials = 0
while age <= max_age and trials < max_trials:
age, is_first_time, aging_chance = drink_potion(age, is_first_time, aging_chance)
trials += 1
if age > max_age:
break
return trials, age
def run_multiple_simulations(test_count, initial_age, max_age):
total_trials = 0
for i in range(test_count):
trials, final_age = simulate_drinking_potion(initial_age, max_age)
print(f"第 {i + 1} 次测试: 饮用了 {trials} 瓶药水后,年龄达到了 {final_age} 岁。")
total_trials += trials
average_trials = total_trials / test_count
print(f"\n{test_count} 次测试的平均饮用次数: {average_trials:.2f} 瓶药水")
def main():
while True:
try:
test_count = int(input("请输入测试次数:"))
initial_age = int(input("请输入初始年龄(不能低于13岁):"))
if initial_age < 13:
print("初始年龄不能低于13岁,请重新输入!")
continue
max_age = int(input("请输入预期寿命上限:"))
except ValueError:
print("输入无效,请输入整数!")
continue
run_multiple_simulations(test_count, initial_age, max_age)
action = input("\n输入“1”重新输入参数,输入“0”退出程序: ").strip().lower()
if action == '0':
print("程序已退出。")
break
main()