当前位置:   article > 正文

猜数字游戏(用if...elif...写应先排好顺序)_python用if和多次elif完成猜字游戏

python用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("退出游戏!")  #退出游戏标志
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

这里其实出现了两个问题,一是该游戏当机会用尽自己退出,并不会告诉原因,就是提示"退出游戏"。这是因为当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("退出游戏!")  #退出游戏标志
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

通过第一次改之后,发现第二个问题是当第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("退出游戏!")  #退出游戏标志
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/54762
推荐阅读
相关标签
  

闽ICP备14008679号