鱼C论坛

 找回密码
 立即注册
查看: 507|回复: 8

[已解决]抛硬币记录最多连续面,代码不知道哪里出错

[复制链接]
发表于 2024-8-27 13:10:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
@Fishc 您好,我有两个问题
这是第一个问题:输入抛硬币次数后,所得到的要么全是正,要么全是反
第二个问题:最终得到的最大连续面次数总是为0




  1. import random
  2. counts = int(input("请输入你想抛硬币的次数:"))
  3. num = random.randint(1,10)

  4. if counts > 50:
  5.     ignore = True
  6. else:
  7.     ignore = False

  8. last = 0
  9. i = 0 #抛硬币的次数
  10. forward = 0 #正面的次数
  11. back = 0 #反面的次数
  12. last_forward = 0 #连续为正面的次数
  13. last_back = 0 #连续为反面的次数
  14. max_forward = 0 #最大连续正面次数
  15. max_back = 0 #最大连续反面次数

  16. while i < counts:
  17.         if num % 2:
  18.             forward += 1
  19.             last_forward += 1

  20.             if not ignore:
  21.                 print("正面",end=" ")

  22.             if last == 2:
  23.                 last_forward = 1

  24.             if last_forward > max_forward:
  25.                 last_forward = max_forward

  26.             last = 1
  27.         else:
  28.             back += 1
  29.             last_back += 1

  30.             if not ignore:
  31.                 print("反面",end=" ")

  32.             if last == 1:
  33.                 last_back = 1

  34.             if last_back > max_back:
  35.                 last_back = max_back

  36.             last = 2

  37.         i += 1

  38. print("一共模拟了", counts, "次抛硬币,结果如下:")
  39. print("正面:", forward, "次", sep="")
  40. print("反面:", back, "次", sep="")
  41. print("最多连续正面:", max_forward, "次", sep="")
  42. print("最多连续反面:", max_back, "次", sep="")
复制代码


感谢回复!
最佳答案
2024-8-27 13:10:21
您好!对此代码提出一些修改建议和解答以下两个问题:

1. **硬币记录的结果总是全正面或全反面**:因为 `num` 是在循环外部生成的一个随机数,并没有在循环内部更新。
2. **最大连续面次数总是为0**:因为在条件满足时,您把 `last_forward` 和 `last_back` 错误地赋值给了 `max_forward` 和 `max_back`。

修改后的代码如下:

  1. import random

  2. counts = int(input("请输入你想抛硬币的次数:"))

  3. if counts > 50:
  4.     ignore = True
  5. else:
  6.     ignore = False

  7. last = 0
  8. i = 0 #抛硬币的次数
  9. forward = 0 #正面的次数
  10. back = 0 #反面的次数
  11. last_forward = 0 #连续为正面的次数
  12. last_back = 0 #连续为反面的次数
  13. max_forward = 0 #最大连续正面次数
  14. max_back = 0 #最大连续反面次数

  15. while i < counts:
  16.     num = random.randint(0, 1) # 生成每次抛硬币的结果
  17.     if num == 1:
  18.         forward += 1
  19.         last_forward += 1
  20.         last_back = 0 # 重置连续反面计数

  21.         if not ignore:
  22.             print("正面", end=" ")

  23.         if last_forward > max_forward:
  24.             max_forward = last_forward

  25.         last = 1
  26.     else:
  27.         back += 1
  28.         last_back += 1
  29.         last_forward = 0 # 重置连续正面计数

  30.         if not ignore:
  31.             print("反面", end=" ")

  32.         if last_back > max_back:
  33.             max_back = last_back

  34.         last = 2

  35.     i += 1

  36. print("\n一共模拟了", counts, "次抛硬币,结果如下:")
  37. print("正面:", forward, "次", sep="")
  38. print("反面:", back, "次", sep="")
  39. print("最多连续正面:", max_forward, "次", sep="")
  40. print("最多连续反面:", max_back, "次", sep="")
复制代码


修改后的代码在 `while` 循环内部生成新的随机数 `num` 来模拟每次抛硬币的结果,同时在检测到连续正面或反面时才更新最大连续次数,这样能够准确地记录并显示结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-8-27 13:10:21 | 显示全部楼层    本楼为最佳答案   
您好!对此代码提出一些修改建议和解答以下两个问题:

1. **硬币记录的结果总是全正面或全反面**:因为 `num` 是在循环外部生成的一个随机数,并没有在循环内部更新。
2. **最大连续面次数总是为0**:因为在条件满足时,您把 `last_forward` 和 `last_back` 错误地赋值给了 `max_forward` 和 `max_back`。

修改后的代码如下:

  1. import random

  2. counts = int(input("请输入你想抛硬币的次数:"))

  3. if counts > 50:
  4.     ignore = True
  5. else:
  6.     ignore = False

  7. last = 0
  8. i = 0 #抛硬币的次数
  9. forward = 0 #正面的次数
  10. back = 0 #反面的次数
  11. last_forward = 0 #连续为正面的次数
  12. last_back = 0 #连续为反面的次数
  13. max_forward = 0 #最大连续正面次数
  14. max_back = 0 #最大连续反面次数

  15. while i < counts:
  16.     num = random.randint(0, 1) # 生成每次抛硬币的结果
  17.     if num == 1:
  18.         forward += 1
  19.         last_forward += 1
  20.         last_back = 0 # 重置连续反面计数

  21.         if not ignore:
  22.             print("正面", end=" ")

  23.         if last_forward > max_forward:
  24.             max_forward = last_forward

  25.         last = 1
  26.     else:
  27.         back += 1
  28.         last_back += 1
  29.         last_forward = 0 # 重置连续正面计数

  30.         if not ignore:
  31.             print("反面", end=" ")

  32.         if last_back > max_back:
  33.             max_back = last_back

  34.         last = 2

  35.     i += 1

  36. print("\n一共模拟了", counts, "次抛硬币,结果如下:")
  37. print("正面:", forward, "次", sep="")
  38. print("反面:", back, "次", sep="")
  39. print("最多连续正面:", max_forward, "次", sep="")
  40. print("最多连续反面:", max_back, "次", sep="")
复制代码


修改后的代码在 `while` 循环内部生成新的随机数 `num` 来模拟每次抛硬币的结果,同时在检测到连续正面或反面时才更新最大连续次数,这样能够准确地记录并显示结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-27 13:14:34 | 显示全部楼层
FishC 发表于 2024-8-27 13:10
您好!对此代码提出一些修改建议和解答以下两个问题:

1. **硬币记录的结果总是全正面或全反面**:因为  ...

谢谢你!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-27 13:14:44 | 显示全部楼层


不客气!以下是修正后的代码,可以帮助解决提出的两个问题:

  1. import random

  2. counts = int(input("请输入你想抛硬币的次数:"))

  3. if counts > 50:
  4.     ignore = True
  5. else:
  6.     ignore = False

  7. last = 0
  8. i = 0 # 抛硬币的次数
  9. forward = 0 # 正面的次数
  10. back = 0 # 反面的次数
  11. last_forward = 0 # 连续为正面的次数
  12. last_back = 0 # 连续为反面的次数
  13. max_forward = 0 # 最大连续正面次数
  14. max_back = 0 # 最大连续反面次数

  15. while i < counts:
  16.     num = random.randint(0, 1) # 每次循环生成新的随机数
  17.     if num == 1:
  18.         forward += 1
  19.         last_forward += 1
  20.         last_back = 0

  21.         if not ignore:
  22.             print("正面", end=" ")

  23.         if last_forward > max_forward:
  24.             max_forward = last_forward

  25.         last = 1
  26.     else:
  27.         back += 1
  28.         last_back += 1
  29.         last_forward = 0

  30.         if not ignore:
  31.             print("反面", end=" ")

  32.         if last_back > max_back:
  33.             max_back = last_back

  34.         last = 2

  35.     i += 1

  36. print("\n一共模拟了", counts, "次抛硬币,结果如下:")
  37. print("正面:", forward, "次", sep="")
  38. print("反面:", back, "次", sep="")
  39. print("最多连续正面:", max_forward, "次", sep="")
  40. print("最多连续反面:", max_back, "次", sep="")
复制代码


### 解释:
1. `num` 在循环内随机生成0或1,确保每次都有真正的随机性。
2. 修正了 `if last_forward > max_forward:` 和 `if last_back > max_back:` 语句中的赋值操作,使得 `max_forward` 和 `max_back` 能够正确记录连续的最大次数。

现在,这段代码应该正确解决您提出的两个问题。希望对您有所帮助!如果有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-27 13:55:15 | 显示全部楼层
什么叫错误地赋值呀,还是没有明白我这样写有什么问题,上面那个内部循环明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-27 13:56:08 | 显示全部楼层
FishC 发表于 2024-8-27 13:10
您好!对此代码提出一些修改建议和解答以下两个问题:

1. **硬币记录的结果总是全正面或全反面**:因为  ...

什么叫错误地赋值呀,还是没有明白我这样写有什么问题,上面那个内部循环明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-27 14:01:50 | 显示全部楼层
茶茶弦 发表于 2024-08-27 13:56
什么叫错误地赋值呀,还是没有明白我这样写有什么问题 ...


好的,我明白您的疑惑。让我具体解释一下代码中赋值的问题以及为什么它不对。

在您的代码中,以下这部分有问题:

  1. if last_forward > max_forward:
  2.     last_forward = max_forward
复制代码


这里应该是把 `last_forward` 的值赋给 `max_forward`,而不是反过来。您当前的代码实际上重新设置了 `last_forward` 的值,这与检测最大连续正面次数的目的相违背。

相应地,对于 `last_back` 和 `max_back` 也是一样的问题。应该是下面这样:

  1. if last_forward > max_forward:
  2.     max_forward = last_forward

  3. if last_back > max_back:
  4.     max_back = last_back
复制代码


在这个修改后的代码中,如果最新的连续正面或反面次数 `last_forward` 和 `last_back` 超过了当前记录的最大连续次数 `max_forward` 和 `max_back`,那么就把 `last_forward` 和 `last_back` 的值复制给 `max_forward` 和 `max_back`。

所以正确的完整代码应是:

  1. import random

  2. counts = int(input("请输入你想抛硬币的次数:"))

  3. if counts > 50:
  4.     ignore = True
  5. else:
  6.     ignore = False

  7. last = 0
  8. i = 0 #抛硬币的次数
  9. forward = 0 #正面的次数
  10. back = 0 #反面的次数
  11. last_forward = 0 #连续为正面的次数
  12. last_back = 0 #连续为反面的次数
  13. max_forward = 0 #最大连续正面次数
  14. max_back = 0 #最大连续反面次数

  15. while i < counts:
  16.     num = random.randint(0, 1) # 生成每次抛硬币的结果
  17.     if num == 1:
  18.         forward += 1
  19.         last_forward += 1
  20.         last_back = 0 # 重置连续反面计数

  21.         if not ignore:
  22.             print("正面", end=" ")

  23.         if last_forward > max_forward:
  24.             max_forward = last_forward

  25.         last = 1
  26.     else:
  27.         back += 1
  28.         last_back += 1
  29.         last_forward = 0 # 重置连续正面计数

  30.         if not ignore:
  31.             print("反面", end=" ")

  32.         if last_back > max_back:
  33.             max_back = last_back

  34.         last = 2

  35.     i += 1

  36. print("\n一共模拟了", counts, "次抛硬币,结果如下:")
  37. print("正面:", forward, "次", sep="")
  38. print("反面:", back, "次", sep="")
  39. print("最多连续正面:", max_forward, "次", sep="")
  40. print("最多连续反面:", max_back, "次", sep="")
复制代码


此代码中唯一的更改就是确保将 `last_forward` 和 `last_back` 的值正确地赋给 `max_forward` 和 `max_back`,以正确记录最大连续次数。希望这样能够帮助您理解其中的问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-8-27 14:03:46 | 显示全部楼层
FishC 发表于 2024-8-27 14:01
好的,我明白您的疑惑。让我具体解释一下代码中赋值的问题以及为什么它不对。

在您的代码中,以下这 ...

原来如此呀,非常感谢您!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-8-27 14:03:56 | 显示全部楼层
茶茶弦 发表于 2024-08-27 14:03
原来如此呀,非常感谢您!


不客气!为了更明确地展示问题和解决方案,我给出完整的修正后的代码:

  1. import random

  2. counts = int(input("请输入你想抛硬币的次数:"))

  3. if counts > 50:
  4.     ignore = True
  5. else:
  6.     ignore = False

  7. last = 0
  8. i = 0 # 抛硬币的次数
  9. forward = 0 # 正面的次数
  10. back = 0 # 反面的次数
  11. last_forward = 0 # 连续为正面的次数
  12. last_back = 0 # 连续为反面的次数
  13. max_forward = 0 # 最大连续正面次数
  14. max_back = 0 # 最大连续反面次数

  15. while i < counts:
  16.     num = random.randint(1, 10) # 在循环内部生成新的随机数
  17.     if num % 2:
  18.         forward += 1
  19.         last_forward += 1
  20.         last_back = 0 # 重置连续反面计数

  21.         if not ignore:
  22.             print("正面", end=" ")

  23.         if last_forward > max_forward:
  24.             max_forward = last_forward # 修正这里

  25.         last = 1
  26.     else:
  27.         back += 1
  28.         last_back += 1
  29.         last_forward = 0 # 重置连续正面计数

  30.         if not ignore:
  31.             print("反面", end=" ")

  32.         if last_back > max_back:
  33.             max_back = last_back # 修正这里

  34.         last = 2

  35.     i += 1

  36. print("\n一共模拟了", counts, "次抛硬币,结果如下:")
  37. print("正面:", forward, "次", sep="")
  38. print("反面:", back, "次", sep="")
  39. print("最多连续正面:", max_forward, "次", sep="")
  40. print("最多连续反面:", max_back, "次", sep="")
复制代码


希望这个代码和解释能帮助您更好地理解问题的原因和解决方法。有其他问题,随时问我!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-11 19:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表