Python循环实现多硬币多次翻转程序异常问题求助
修正多硬币多次翻转程序的逻辑问题
原代码的核心问题
- 输入验证逻辑失效:
while coins !="":中coins是整数类型,永远不会匹配空字符串,导致无效输入时无法重新询问。 - 循环变量被非法修改:循环内强行修改
n和i的值,破坏了for循环的迭代规则,造成编号混乱。 - 冗余循环嵌套:三层循环完全多余,且每次翻转都重复打印硬币标题,不符合输出格式要求。
- 编号起始值错误:硬币和翻转次数从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
相关产品推荐
相关产品推荐

