作者Hsins (迅雷不及掩耳盗铃)
看板Python
标题Re: [问题] 关於回圈问题
时间Tue Mar 3 01:33:58 2020
# 从 random 套件包里面引入 randint 函数
from random import randint
# 初始化财产值
money = 1000
# 当财产值为正值,执行回圈
while money > 0:
print('你的总资产为: ', money)
needs_go_on = False # 一个标签在之後用来判断是否继续
# 先初始化为 False,在後来的过程判断有没有
# 需要改为 True 让程式继续
while True:
debt = int(input('请下注: '))
if 0 < debt <= money:
# 下注金额必须小於等於拥有财产
break
# 否则结束回圈
first = randint(1, 6) + randint(1, 6)
print('玩家摇出了 %d 点' % first)
if first == 7 or first == 11:
print('玩家胜!')
money += debt
elif first == 2 or first == 3 or first == 12:
print('庄家胜!')
money -= debt
else: # 上面两个都不满足,玩家跟庄家都没人胜出
needs_go_on = True # 表示程式应该继续执行,把标签值改为 True
while needs_go_on: # 标签值用在此处,决定程式游戏是否继续
needs_go_on = False # 游戏继续,但先假设这局会结束
# 看看後面有没有需要更正
current = randint(1, 6) + randint(1, 6)
print('玩家摇出了 %d 点' % current)
if current == 7:
print('庄家胜')
money -= debt
elif current == first:
print('玩家胜')
money += debt
else: # 发现又再一次不满足庄家和玩家都胜利
needs_go_on = True # 表示还需要继续执行,标签改为 True
# 再次进入当前回圈
# 财产值已经不为正值,不会再执行上述回圈才会到这
print('你破产了, 游戏结束!')
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.247.1 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1583170440.A.058.html
1F:推 cuteSquirrel: push 03/03 13:07
2F:推 hellokidding: 讲的超清楚!大感谢!! 03/03 15:41
3F:推 hellokidding: 想问一下下注那边的while True:的这个布林判断是第 03/03 15:44
4F:→ hellokidding: 二个判断,还是是needs_go_on = False变成true 03/03 15:45
(1)在骰第一次的 Else 部分,为什麽不直接在 else 後面接着写第二次骰的情形
而要写 needs_go_on = True
回去看看题目的要求,掷骰子分成两种阶段,有着不同的胜负条件:
- 只有第一次
- 7 or 11
- 2, 3 or 12
- 除了第一次的其他次
- 7
- 与第一次同
needs_go_on 用来处理「除了第一次的其他次」的状况,他要是个回
圈。你如果单纯用 else 的话,只会个别处理一次。
(2)所以我的理解是needs_go_on 这个布林比较像是一段回圈的启动和暂停按键
那为什麽第一次 else 的时候不直接写 needs_go_on = False就好?
还要特别写一段while needs_go_on:
needs_go_on = False
是 while needs_go_on: 这个回圈根据他来判断是不是第一次掷骰子
,还是除了第一次掷骰子之外的其他次。
5F:→ Hsins: 建议你自己找地方插 print() 语句,把实际上运作逻辑动手 03/03 17:06
6F:→ Hsins: 画个图出来走走看。 03/03 17:06
7F:→ Hsins: 然後把你觉得奇怪的地方,觉得可以自己更动的地方动手改一 03/03 17:07
8F:→ Hsins: 改,看看跑出来跟题目要求符不符合?他解答写的未必就好, 03/03 17:08
9F:→ Hsins: 实作方法也不是只有这一种。 03/03 17:08
※ 编辑: Hsins (140.112.247.1 台湾), 03/03/2020 17:24:48
10F:推 hellokidding: 我懂了!谢谢h大 03/03 23:35
11F:推 xsubarux: # 下注金额必须小於等於拥有财产 03/04 03:10
12F:→ xsubarux: # 否则结束回圈 <-这句注解意思错了吧?应该是下注 03/04 03:10
13F:→ xsubarux: 小於 03/04 03:10
14F:→ xsubarux: 等於财产时才会从输入下注金额的回圈结束,进行後面的 03/04 03:10
15F:→ xsubarux: 程式 03/04 03:10
16F:→ Hsins: 你说的是对的,看太快ㄌ>< 03/04 07:09