main
parent
046bbafa4e
commit
4ac98d9791
|
|
@ -0,0 +1,66 @@
|
|||
import random
|
||||
|
||||
|
||||
def simulate_monty_hall(switch, num_trials=100000):
|
||||
"""
|
||||
模拟三门悖论(蒙提霍尔问题)
|
||||
|
||||
参数:
|
||||
- switch: bool, 是否在主持人打开门后选择换门
|
||||
- num_trials: int, 模拟次数(默认10万次)
|
||||
|
||||
返回:
|
||||
- 获胜次数
|
||||
- 胜率
|
||||
"""
|
||||
win_count = 0
|
||||
doors = [1, 2, 3] # 三扇门
|
||||
|
||||
for _ in range(num_trials):
|
||||
# 随机放置汽车(1 表示汽车,0 表示山羊)
|
||||
car_door = random.choice(doors)
|
||||
|
||||
# 参赛者初始选择
|
||||
player_choice = random.choice(doors)
|
||||
|
||||
# 主持人要打开一扇门:不能是参赛者选的,也不能是有车的
|
||||
remaining_doors = [d for d in doors if d != player_choice and d != car_door]
|
||||
host_opens = random.choice(remaining_doors)
|
||||
|
||||
# 换门逻辑
|
||||
if switch:
|
||||
# 换到剩下的那一扇未被选、未被开的门
|
||||
final_choice = [d for d in doors if d != player_choice and d != host_opens][0]
|
||||
else:
|
||||
# 不换,保持原选择
|
||||
final_choice = player_choice
|
||||
|
||||
# 判断是否获胜
|
||||
if final_choice == car_door:
|
||||
win_count += 1
|
||||
|
||||
win_rate = win_count / num_trials
|
||||
return win_count, win_rate
|
||||
|
||||
|
||||
# === 运行模拟 ===
|
||||
if __name__ == "__main__":
|
||||
num_trials = 100000
|
||||
|
||||
print(f"模拟 {num_trials} 次三门问题:\n")
|
||||
|
||||
# 情况1:坚持不换门
|
||||
wins_stay, rate_stay = simulate_monty_hall(switch=False, num_trials=num_trials)
|
||||
print(f"坚持原选择(不换门):")
|
||||
print(f" 获胜次数: {wins_stay}")
|
||||
print(f" 胜率: {rate_stay:.4f} ({rate_stay * 100:.2f}%)\n")
|
||||
|
||||
# 情况2:总是换门
|
||||
wins_switch, rate_switch = simulate_monty_hall(switch=True, num_trials=num_trials)
|
||||
print(f"总是换门:")
|
||||
print(f" 获胜次数: {wins_switch}")
|
||||
print(f" 胜率: {rate_switch:.4f} ({rate_switch * 100:.2f}%)\n")
|
||||
|
||||
print("理论值对比:")
|
||||
print(" 不换门胜率: 1/3 ≈ 33.33%")
|
||||
print(" 换门胜率: 2/3 ≈ 66.67%")
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
import os
|
||||
import random
|
||||
|
||||
# 输出目录
|
||||
output_dir = "./output_files"
|
||||
os.makedirs(output_dir, exist_ok=True)
|
||||
|
||||
# 配置
|
||||
file_count = 40
|
||||
min_size_mb = 70
|
||||
max_size_mb = 80
|
||||
chunk_size = 1024 * 1024 # 每次写入 1MB
|
||||
|
||||
|
||||
def generate_random_file(file_path, size_bytes):
|
||||
with open(file_path, "wb") as f:
|
||||
written = 0
|
||||
while written < size_bytes:
|
||||
chunk = os.urandom(min(chunk_size, size_bytes - written))
|
||||
f.write(chunk)
|
||||
written += len(chunk)
|
||||
|
||||
|
||||
for i in range(1, file_count + 1):
|
||||
file_size_mb = random.randint(min_size_mb, max_size_mb)
|
||||
file_size_bytes = file_size_mb * 1024 * 1024
|
||||
filename = f"file_{i}.bin"
|
||||
filepath = os.path.join(output_dir, filename)
|
||||
|
||||
print(f"Creating {filename} ({file_size_mb} MB)...")
|
||||
generate_random_file(filepath, file_size_bytes)
|
||||
|
||||
print("✅ 所有文件生成完毕。")
|
||||
Loading…
Reference in New Issue