You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python循环实现多硬币多次翻转程序异常问题求助

修正多硬币多次翻转程序的逻辑问题

原代码的核心问题

  1. 输入验证逻辑失效:while coins !="": 中coins是整数类型,永远不会匹配空字符串,导致无效输入时无法重新询问。
  2. 循环变量被非法修改:循环内强行修改n和i的值,破坏了for循环的迭代规则,造成编号混乱。
  3. 冗余循环嵌套:三层循环完全多余,且每次翻转都重复打印硬币标题,不符合输出格式要求。
  4. 编号起始值错误:硬币和翻转次数从0开始计数,与示例输出的1起始编号不符。

修正后的代码

import random

def get_positive_input(prompt):
    while True:
        try:
            num = int(input(prompt))
            if num > 0:
                return num
            else:
                print("Invalid input")
        except ValueError:
            print("Invalid input")

heads = 0
tails = 0

# 获取有效输入
coins = get_positive_input("How many coins do you want to flip? ")
flips_per_coin = get_positive_input("How many times do you want to flip each coin? ")

print()

# 遍历每枚硬币
for coin_num in range(1, coins + 1):
    print(f"Coin {coin_num}")
    # 遍历该硬币的每次翻转
    for flip_num in range(1, flips_per_coin + 1):
        result = random.randint(0, 1)
        if result == 0:
            heads += 1
            print(f"Flip: {flip_num}; Result: Heads")
        else:
            tails += 1
            print(f"Flip: {flip_num}; Result: Tails")
    print()  # 硬币之间空行分隔

# 输出统计结果
print(f"There were {tails} Tails in total")
print(f"There were {heads} Heads in total")

关键修正说明

  • 输入验证封装:用get_positive_input函数统一处理输入,确保输入为正整数,同时捕获非整数输入的异常。
  • 清晰的循环结构:两层for循环分别处理硬币和翻转次数,不修改循环变量,保证编号逻辑正确。
  • 格式对齐示例:硬币标题仅在每枚硬币的翻转循环前打印一次,与示例输出格式一致。
  • 编号从1开始:循环范围设为range(1, coins + 1)和range(1, flips_per_coin + 1),匹配预期的编号规则。

内容的提问来源于stack exchange,提问作者Soren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:31:03