上一节我们了解了“while True”和“break”在自主循环中的作用,也实现了”全天候自动售卖机”服务多位顾客的功能。今天,我们一起来写一个电脑猜心小游戏,加强感受一下while命令。
首先是一个游戏程序,拟实现0-50数字(整数)范围内的交互体验。具体玩法为:
1. 心里想一个0-50范围内的数字,让电脑猜;(是时电脑上会出现初始数字)
2. 比较电脑显示数字和心里所想数字的大小,并给出判断“猜大了,小了或者对了。”
3. 电脑会继续给答案,直到猜准为止。
整体采用电脑“二分法”的逻辑设计,系统会默认从中值开始猜,根据玩家的判断不断缩小至精确范围。实现代码参考如下:

基础版
import random
print("你心里想一个0-50的数字,电脑来猜")
print("请判断并回答大,小或者对")
low=0
high=50
while True:
guess=(low+high)//2
print(f"{guess}")
feedback=input("请告诉我猜大、小还是对了")
if feedback=="大":
high=guess-1
elif feedback=="小":
low=guess+1
elif feedback=="对":
break
print("猜对了,再玩一次吧!")

用这个基础版的代码,限定了输入值是且只能是“小、大和对”,如果输入其他相同意思的字段比如“是”,它会一直保持初始值25,没有判断,所以要添加防错机制,输错时怎么办呢?


优化版
import random
print("你心里想一个0-50的数字,电脑来猜")
print("请判断并回答:大、小或者对")
low = 0
high = 50
while True:
guess = (low + high) // 2
print(f"电脑猜:{guess}")
feedback = input("请告诉我猜大、小还是对了:")
if feedback == "大":
high = guess - 1
elif feedback == "小":
low = guess + 1
elif feedback == "对":
break
else:
print("输入错误,请检查")
continue
print("猜对了,再玩一次吧!")
下面我们以30为例,看一下运行效果:


容错升级版

方法一:“or”语句
import random
print("你心里想一个0-50的数字,电脑来猜")
print("请判断并回答:大、小或者对")
low = 0
high = 50
while True:
guess = (low + high) // 2
print(f"电脑猜:{guess}")
feedback = input("请告诉我猜大、小还是对了:")
if feedback == "大" or feedback=="大了":
high = guess - 1
elif feedback == "小" or feedback=="小了":
low = guess + 1
elif feedback == "对" or feedback=="是" or feedback=="对了":
break
else:
print("输入错误,请检查")
continue
print("猜对了,再玩一次吧!")
本段代码加入了”or”语句,增加了输入端的容错性。无论是“大”、“大了”还是“小”、“小了”抑或是“对”、“是”、“对了”都可以被判断为猜对,给出并输出相应的判断。
下面我们以30为例,看一下运行效果:


方法二:“in”语句
import random
print("你心里想一个0-50的数字,电脑来猜")
print("请判断并回答:大、小或者对")
low = 0
high = 50
while True:
guess = (low + high) // 2
print(f"电脑猜:{guess}")
feedback = input("请告诉我猜大、小还是对了:")
if "大" in feedback :
high = guess - 1
elif "小" in feedback:
low = guess + 1
elif "对" in feedback:
print("猜对了,再玩一次吧!")
break
else:
print("输入错误,请检查")
continue
本段代码中限定了“大”、“小”和“对”只要存在即可。范围更宽,容错率更大。
下面我们以30为例,看一下运行效果:

可以看出:“大的”、“小了”、“小”、“对的”都可以得到正常的判断值,下面留一个问题给你吧,如何实现循环玩下去呢?While True, break要怎么嵌套呢?欢迎大家讨论交流。
往期精彩
零基础学 Python(2):写个“超市收银机”和“自动售卖机”!
零基础学Python(3) :搞懂 while True 和 break,写个“猜数字”小游戏!
更多精彩敬请期待中...

微信号丨飞苑的窝
关注 获得 更多 精彩内容
夜雨聆风