(第二版)零基础入门Python小甲鱼-笔记-第三章-p7
改进我们的小游戏(上)
第一次写的文字游戏太过于简陋,需要改进
提出了3点改进的的建议
1、当用户猜错的时候,程序应该给出提示
2、应该提供多次机会给用户
3、每次运行程序,答案应该是随机的
我们一步步来
第一个对程序的要求是
如果用户输入3,答案是8,那程序会给出提示用户小了
如果用户输入9,答案是8,那程序会给出提示用户大了
上节课讲过了这是一个可以用条件分支解决的问题,如果用户一次猜中那就没啥事情,当用户猜错了那就加一个条件分支来判断用户大还是小.
如何解决在guess 不等于8的时候加入一个条件分支来判断是大于8还是小于8
如果用户输入3,答案是8,那程序会打印出“小啦”
如果用户输入9,答案是8,那程序会打印出“大啦”
代码如下
""" 用Python设计第一个小游戏 """
temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
guess = int(temp)
if guess == 8:
print("你是小甲鱼心里想的蛔虫嘛?")
print("哼 猜中也是没有奖励的!")
else:
if guess < 8:
print("小啦")
else:
print("大了")
print("游戏结束 ,不玩啦^_^")
在guess 不等于8的时候加入一个条件分支来判断是大于8还是小于8,这种在一个if else内部加入一个完整的if ,else语句结构叫做 嵌套
测试效果如下
那第一个问题就解决咯,但是有些人就抱怨了 提示我了有啥用,我还要手动重新运行程序太麻烦了.
所以有第二个问题(2、应该提供多次机会给用户)
这时候我们就要学习一下新的语法结构-Python循环结构
Python循环结构有好几种实现方式
先介绍一下while循环语句
语法规则如下
while 条件:
如果条件为真(True)执行这里的语句
这看起来比 if,else条件分支更简单 ,也是条件为真的时候执行语句
我们打开IDLE的交互模式来做演示
为啥为这样呢
因为条件 1 < 2 返回True 但是只要地球不爆炸 1 永远小于 2 返回永远成立返回True 所以会一直打印“ I love you !”
循环语句就是这样 只要条件成立返回True 就会执行循环体内的内容
条件一直成立,循环体一直执行,没完没了了
也不是,我们可以手动的将条件True 变为 False ,那就使用变量
只打印3次,while语句的条件不在是永恒不变的True 而是判断变量counts的值是否大于0.
如果大于0条件才会成立
counts的值可不是永远不变的,每次执行循环体都会执行一条语句 counts = counts - 1
这就是一个赋值语句 将右边的值赋值给左边的变量
右边的值就是counts当前的值减1的结果
左边边的就是counts
所以在执行这条语句之前counts = 3 执行之后 counts 更新为 2
因而每执行一次循环体都会把counts的值减1
couns 就会变成3—>2—>1—>0;当counts的值为0的时候则不在满足counts大于0这个条件啦
所以就不会执行循环的内容啦
这时候就可以来改进我们的小游戏了,加上循环,给用户3次机会来猜数字.
问题 如果 counts = counts - 1 在缩进的位置错误
这里只有 只有在 用户输入大8的数字时才会变量才会减一
现在代码还是有问题的因为如果用户输入8,并不会去执行counts = counts - 1 也就是会陷入一直正确一直执行这样的死循环的状态
如果解决呢可以把counts = counts - 1 往外挪一个缩进这样
这样还是不妥输入正确答案还要继续输入猜能结束
这时候我们要学习新语法
break语句
就是跳出一层循环体
执行到break 就直接跳出这层循环,所以只打印一句"I love you"
这时候就可以将break 加入到游戏中
代码如下
""" 用Python设计第一个小游戏 """
counts = 3
while counts > 0:
temp = input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
guess = int(temp)
if guess == 8:
print("你是小甲鱼心里想的蛔虫嘛?")
print("哼 猜中也是没有奖励的!")
break
else:
if guess < 8:
print("小啦")
else:
print("大了")
counts = counts - 1
print("游戏结束 ,不玩啦^_^")