猜数字游戏(用if...elif...写应先排好顺序)

按照二叔的要求,我用python随便写了个小游戏,发现一个之前没发现的细节问题,接下来用一个猜数字的游戏来模拟现场。


问题描述

import random
print('''我有一个1-100的数字,你猜猜是几:
(输入0可以退出游戏哦!说出101我可以直接告诉你。)''')
j=random.randint(1,100)
a=1
while a<=5:         #给玩家5次机会
    i=int(input())

    if i<1 or i>101:
      	print("不可以这样猜!")
    
    #玩家选择直接告诉他
    if i==101:
        print("它是%d,你有想到没!"%j)
    #玩家中途退出
    elif i==0:
        print("退出游戏!")  #退出游戏标志
        break
    elif i<j:       #当玩家的数小了        
        print("不好意思,小了!")
        print("再给你%d次机会!"%(5-a))
        a+=1
        continue
    elif i>j:       #当玩家的数小了
        print("不好意思,大了!")
        print("再给你%d次机会!"%(5-a))
        a+=1
        continue
    elif a==5:      #机会全部用完
        print("很遗憾!你都答错了。")
        print("这个数字是%d"%j)
        break
    elif i==j:      #当玩家猜对了
        print("恭喜你!答对了。")
        break
    
else:
    print("退出游戏!")  #退出游戏标志

这里其实出现了两个问题,一是该游戏当机会用尽自己退出,并不会告诉原因,就是提示"退出游戏"。这是因为当a=5时,循环会继续执行,这是输入的i任然在if里判断,并在i<j或i>j这里截断(continue),就不会执行到后面的a=5,这里就直接执行到else语句。之后就对循环做出了这样的修改:

while a<=5:         #给玩家5次机会
    i=int(input())
    if i<1 or i>101:
        print("不可以这样猜!")
    
    #玩家选择直接告诉他
    if i==101:
        print("它是%d,你有想到没!"%j)
    #玩家中途退出
    elif a==5:      #机会全部用完
        print("很遗憾!你都答错了。")
        print("这个数字是%d"%j)
        break
    elif i==0:
        print("退出游戏!")  #退出游戏标志
        break
    elif i<j:       #当玩家的数小了        
        print("不好意思,小了!")
        print("再给你%d次机会!"%(5-a))
        a+=1
        continue
    elif i>j:       #当玩家的数小了
        print("不好意思,大了!")
        print("再给你%d次机会!"%(5-a))
        a+=1
        continue
    elif i==j:      #当玩家猜对了
        print("恭喜你!答对了。")
        break
    
else:
    print("退出游戏!")  #退出游戏标志

通过第一次改之后,发现第二个问题是当第5次正好猜对了这个数,但是依然会提示"很遗憾!你答错了。这个数字是?"。其实这里与第一个问题相似,要是a=5的判断在i=j判断前面,那么在第5次输入的数将执行不到后面(break)。后来又改了这个循环:

import random
print('''我有一个1-100的数字,你猜猜是几:
(输入0可以退出游戏哦!说出101我可以直接告诉你。)''')
j=random.randint(1,100)
a=1
while a<=5:         #给玩家5次机会
    i=int(input())
    if i<1 or i>101:
        print("不可以这样猜!")
    
    #玩家选择直接告诉他
    if i==101:
        print("它是%d,你有想到没!"%j)
    #玩家中途退出
    elif i==0:
        print("退出游戏!")  #退出游戏标志
        break
    elif i==j:      #当玩家猜对了
        print("恭喜你!答对了。")
        break
    elif a==5:      #机会全部用完
        print("很遗憾!你都答错了。")
        print("这个数字是%d"%j)
        break
    elif i<j:       #当玩家的数小了        
        print("不好意思,小了!")
        print("再给你%d次机会!"%(5-a))
        a+=1
        continue
    elif i>j:       #当玩家的数小了
        print("不好意思,大了!")
        print("再给你%d次机会!"%(5-a))
        a+=1
        continue
    
else:
    print("退出游戏!")  #退出游戏标志

后来我查了一下,其实if…elif…else本身就是按顺序来执行的,只要先于后面判断条件的条件在前面为真,那么后面的判断都不执行
break:直接跳出循环体
continue:返回循环体头部,直接进去下一次循环。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HxaiLi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值