抛硬币记录最多连续面,代码不知道哪里出错
@Fishc 您好,我有两个问题这是第一个问题:输入抛硬币次数后,所得到的要么全是正,要么全是反
第二个问题:最终得到的最大连续面次数总是为0
import random
counts = int(input("请输入你想抛硬币的次数:"))
num = random.randint(1,10)
if counts > 50:
ignore = True
else:
ignore = False
last = 0
i = 0 #抛硬币的次数
forward = 0 #正面的次数
back = 0 #反面的次数
last_forward = 0 #连续为正面的次数
last_back = 0 #连续为反面的次数
max_forward = 0 #最大连续正面次数
max_back = 0 #最大连续反面次数
while i < counts:
if num % 2:
forward += 1
last_forward += 1
if not ignore:
print("正面",end=" ")
if last == 2:
last_forward = 1
if last_forward > max_forward:
last_forward = max_forward
last = 1
else:
back += 1
last_back += 1
if not ignore:
print("反面",end=" ")
if last == 1:
last_back = 1
if last_back > max_back:
last_back = max_back
last = 2
i += 1
print("一共模拟了", counts, "次抛硬币,结果如下:")
print("正面:", forward, "次", sep="")
print("反面:", back, "次", sep="")
print("最多连续正面:", max_forward, "次", sep="")
print("最多连续反面:", max_back, "次", sep="")
感谢回复! 您好!对此代码提出一些修改建议和解答以下两个问题:
1. **硬币记录的结果总是全正面或全反面**:因为 `num` 是在循环外部生成的一个随机数,并没有在循环内部更新。
2. **最大连续面次数总是为0**:因为在条件满足时,您把 `last_forward` 和 `last_back` 错误地赋值给了 `max_forward` 和 `max_back`。
修改后的代码如下:
import random
counts = int(input("请输入你想抛硬币的次数:"))
if counts > 50:
ignore = True
else:
ignore = False
last = 0
i = 0 #抛硬币的次数
forward = 0 #正面的次数
back = 0 #反面的次数
last_forward = 0 #连续为正面的次数
last_back = 0 #连续为反面的次数
max_forward = 0 #最大连续正面次数
max_back = 0 #最大连续反面次数
while i < counts:
num = random.randint(0, 1) # 生成每次抛硬币的结果
if num == 1:
forward += 1
last_forward += 1
last_back = 0 # 重置连续反面计数
if not ignore:
print("正面", end=" ")
if last_forward > max_forward:
max_forward = last_forward
last = 1
else:
back += 1
last_back += 1
last_forward = 0 # 重置连续正面计数
if not ignore:
print("反面", end=" ")
if last_back > max_back:
max_back = last_back
last = 2
i += 1
print("\n一共模拟了", counts, "次抛硬币,结果如下:")
print("正面:", forward, "次", sep="")
print("反面:", back, "次", sep="")
print("最多连续正面:", max_forward, "次", sep="")
print("最多连续反面:", max_back, "次", sep="")
修改后的代码在 `while` 循环内部生成新的随机数 `num` 来模拟每次抛硬币的结果,同时在检测到连续正面或反面时才更新最大连续次数,这样能够准确地记录并显示结果。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-8-27 13:10
您好!对此代码提出一些修改建议和解答以下两个问题:
1. **硬币记录的结果总是全正面或全反面**:因为...
谢谢你!
茶茶弦 发表于 2024-08-27 13:14
谢谢你!
不客气!以下是修正后的代码,可以帮助解决提出的两个问题:
import random
counts = int(input("请输入你想抛硬币的次数:"))
if counts > 50:
ignore = True
else:
ignore = False
last = 0
i = 0 # 抛硬币的次数
forward = 0 # 正面的次数
back = 0 # 反面的次数
last_forward = 0 # 连续为正面的次数
last_back = 0 # 连续为反面的次数
max_forward = 0 # 最大连续正面次数
max_back = 0 # 最大连续反面次数
while i < counts:
num = random.randint(0, 1) # 每次循环生成新的随机数
if num == 1:
forward += 1
last_forward += 1
last_back = 0
if not ignore:
print("正面", end=" ")
if last_forward > max_forward:
max_forward = last_forward
last = 1
else:
back += 1
last_back += 1
last_forward = 0
if not ignore:
print("反面", end=" ")
if last_back > max_back:
max_back = last_back
last = 2
i += 1
print("\n一共模拟了", counts, "次抛硬币,结果如下:")
print("正面:", forward, "次", sep="")
print("反面:", back, "次", sep="")
print("最多连续正面:", max_forward, "次", sep="")
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 小助理,如未能正确解答您的问题,请继续追问。 什么叫错误地赋值呀,还是没有明白我这样写有什么问题,上面那个内部循环明白了 FishC 发表于 2024-8-27 13:10
您好!对此代码提出一些修改建议和解答以下两个问题:
1. **硬币记录的结果总是全正面或全反面**:因为...
什么叫错误地赋值呀,还是没有明白我这样写有什么问题,上面那个内部循环明白了 茶茶弦 发表于 2024-08-27 13:56
什么叫错误地赋值呀,还是没有明白我这样写有什么问题 ...
好的,我明白您的疑惑。让我具体解释一下代码中赋值的问题以及为什么它不对。
在您的代码中,以下这部分有问题:
if last_forward > max_forward:
last_forward = max_forward
这里应该是把 `last_forward` 的值赋给 `max_forward`,而不是反过来。您当前的代码实际上重新设置了 `last_forward` 的值,这与检测最大连续正面次数的目的相违背。
相应地,对于 `last_back` 和 `max_back` 也是一样的问题。应该是下面这样:
if last_forward > max_forward:
max_forward = last_forward
if last_back > max_back:
max_back = last_back
在这个修改后的代码中,如果最新的连续正面或反面次数 `last_forward` 和 `last_back` 超过了当前记录的最大连续次数 `max_forward` 和 `max_back`,那么就把 `last_forward` 和 `last_back` 的值复制给 `max_forward` 和 `max_back`。
所以正确的完整代码应是:
import random
counts = int(input("请输入你想抛硬币的次数:"))
if counts > 50:
ignore = True
else:
ignore = False
last = 0
i = 0 #抛硬币的次数
forward = 0 #正面的次数
back = 0 #反面的次数
last_forward = 0 #连续为正面的次数
last_back = 0 #连续为反面的次数
max_forward = 0 #最大连续正面次数
max_back = 0 #最大连续反面次数
while i < counts:
num = random.randint(0, 1) # 生成每次抛硬币的结果
if num == 1:
forward += 1
last_forward += 1
last_back = 0 # 重置连续反面计数
if not ignore:
print("正面", end=" ")
if last_forward > max_forward:
max_forward = last_forward
last = 1
else:
back += 1
last_back += 1
last_forward = 0 # 重置连续正面计数
if not ignore:
print("反面", end=" ")
if last_back > max_back:
max_back = last_back
last = 2
i += 1
print("\n一共模拟了", counts, "次抛硬币,结果如下:")
print("正面:", forward, "次", sep="")
print("反面:", back, "次", sep="")
print("最多连续正面:", max_forward, "次", sep="")
print("最多连续反面:", max_back, "次", sep="")
此代码中唯一的更改就是确保将 `last_forward` 和 `last_back` 的值正确地赋给 `max_forward` 和 `max_back`,以正确记录最大连续次数。希望这样能够帮助您理解其中的问题。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-8-27 14:01
好的,我明白您的疑惑。让我具体解释一下代码中赋值的问题以及为什么它不对。
在您的代码中,以下这 ...
原来如此呀,非常感谢您! 茶茶弦 发表于 2024-08-27 14:03
原来如此呀,非常感谢您!
不客气!为了更明确地展示问题和解决方案,我给出完整的修正后的代码:
import random
counts = int(input("请输入你想抛硬币的次数:"))
if counts > 50:
ignore = True
else:
ignore = False
last = 0
i = 0 # 抛硬币的次数
forward = 0 # 正面的次数
back = 0 # 反面的次数
last_forward = 0 # 连续为正面的次数
last_back = 0 # 连续为反面的次数
max_forward = 0 # 最大连续正面次数
max_back = 0 # 最大连续反面次数
while i < counts:
num = random.randint(1, 10) # 在循环内部生成新的随机数
if num % 2:
forward += 1
last_forward += 1
last_back = 0 # 重置连续反面计数
if not ignore:
print("正面", end=" ")
if last_forward > max_forward:
max_forward = last_forward # 修正这里
last = 1
else:
back += 1
last_back += 1
last_forward = 0 # 重置连续正面计数
if not ignore:
print("反面", end=" ")
if last_back > max_back:
max_back = last_back # 修正这里
last = 2
i += 1
print("\n一共模拟了", counts, "次抛硬币,结果如下:")
print("正面:", forward, "次", sep="")
print("反面:", back, "次", sep="")
print("最多连续正面:", max_forward, "次", sep="")
print("最多连续反面:", max_back, "次", sep="")
希望这个代码和解释能帮助您更好地理解问题的原因和解决方法。有其他问题,随时问我!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]