|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 xxpy_601 于 2017-12-22 12:30 编辑
看完课时5后,想改动一下猜数程序。
第一个疑问:
将
guess = int(input('你还有%d次机会,猜猜看:' % cishu))
改成了
guess = input('你还有%d次机会,猜猜看:' % cishu)
并在下方添加了while循环
while cishu > 1 and not guess.isdigit():
cishu = cishu - 1
guess = input('你还有%d次机会,猜猜看:' % cishu)
这里出现个问题,无法理解。
条件 cishu > 0 这个while循环,就会运行7次(每次都故意写成字母,不是数字),按理说,最后一次1-1应该等于0,但是为什么还会再次运行1次?
只有条件 写成 cishu > 1 的时候,才可以正常运行6次。
第二个问题:
下面代码中红色字体的问题。
注:为了方便运行查看结果,我将mishu 固定到1了。
import random
mishu = random.randint(1,1)
guess = 0
cishu = 6
print('不妨猜猜看,我心里的那个数是几?\n友情提示:1-10之间的某个数哦')
while guess != mishu and cishu > 0:
guess = input('你还有%d次机会,猜猜看:' % cishu)
while cishu > 1 and not guess.isdigit(): # 这里如果cishu写成> 0 就可以输入7次,无法理解这里为什么会这样
cishu = cishu - 1
guess = input('你还有%d次机会,猜猜看:' % cishu)
# 这里不知道次数用完了后,怎么跳出整个大循环并结束。
# 想了很久后,添加下面else后,可以正常运行了,但是如果输入5次字母 最后一次猜对的话
# 还是会提示 没有机会了,并结束程序,得不到正确结果。
# 但是如果不在最后一次的时候,猜对,程序就没有问题。
else:
if cishu > 1: #if cishu》= 1
guess = int(guess)
if guess > mishu:
print('猜的有点大了,你还有%d次机会,再试试:' % cishu)
if guess < mishu:
print('猜的有点小了,你还有%d次机会,再试试:' % cishu)
cishu = cishu - 1
else:
break
while guess == mishu:
if cishu > 0:
print('我草,还有%d次机会没用就猜对了,你是我肚子里的蛔虫吗?' % cishu)
break
else:
print('我草,你是我肚子里的蛔虫吗?居然猜对了')
break
else:
print('哼,没机会了,游戏结束')
# guess = input('你还有%d次机会,猜猜看:' % cishu)
# a = isinstance(guess,int)
# if a == True:
# cishu = cishu - 1
# if guess > mishu:
# print('猜的有点大了,你还有%d次机会,再试试:' % cishu)
# if guess < mishu:
# print('猜的有点小了,你还有%d次机会,再试试:' % cishu)
# while guess == mishu:
# if cishu > 0:
# print('我草,还有%d次机会没用就猜对了,你是我肚子里的蛔虫吗?' % cishu)
# break
# else:
# print('我草,你是我肚子里的蛔虫吗?居然猜对了')
# break
# else:
# print('哼,没机会了,游戏结束')
1 从你的代码来看,如果将cishu > 0 改为 cishu > 1
那么一直输入非数字内层的while循环结束后cishu会等于1
此时提示还有1次机会是外层的while循环的第一条语句给出的
2 要跳出整个大循环可以通过设置一个flag来实现,初始化flag为假,如果次数用完,那么这个flag为真,
在外部部循环中加上一个判断语句
if flag:
break
|
|