赞
踩
按照二叔的要求,我用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:返回循环体头部,直接进去下一次循环。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。