while语句条件为假时为何不能运行循环外的语句?
print('--------我爱鱼C工作室---------')print("不妨猜一下甲鱼现在心里想的是哪个数字:",end=" ")
time = 3
temp = input()
while not isinstance(temp, int):
temp = input("抱歉,输入不合法,请输入一个整数:")
guess = int(temp)
while guess != 8 and time > 0:
time = time-1
if guess < 8:
print("嘿,小了小了!")
else:
print("哥,大了大了!")
if time > 0:
print("猜错啦,再来一次吧!")
else:
print("机会用完喽!")
break
temp = input("请重新输入数字:")
guess = int(temp)
if guess == 8:
print("我草,你是小甲鱼心里的蛔虫吗?!")
print("哼,猜中也没有奖励!")
print("游戏结束,不玩啦^_^")
自己写的这段修改游戏,无论输入什么始终在第一个while内循环,本来当输入正确的整数时,不是应该进入guess = int(temp)开始的语句执行吗?请达人指点下。可能本人对while语法还是不太理解。
input()的返回值始终是字符串,所以type(temp)永远是<class 'str'>! 本帖最后由 baige 于 2020-8-6 00:00 编辑
temp.isdigit() 所有字符都是数字,为真返回 True,否则返回 False
temp是字符串 本帖最后由 全能小乌贼 于 2020-8-6 01:41 编辑
楼上说的是对的,完整的更改后的程序如下,你可以自己对照着看一看:
print('--------我爱鱼C工作室---------')
print("不妨猜一下甲鱼现在心里想的是哪个数字:",end=" ")
time = 3
temp = input()
guess = int(temp)
while not isinstance(guess, int):
temp = input("抱歉,输入不合法,请输入一个整数:")
while guess != 8 and time > 0:
time = time-1
if guess < 8:
print("嘿,小了小了!")
else:
print("哥,大了大了!")
if time > 0:
print("猜错啦,再来一次吧!")
else:
print("机会用完喽!")
break
temp = input("请重新输入数字:")
guess = int(temp)
if guess == 8:
print("我草,你是小甲鱼心里的蛔虫吗?!")
print("哼,猜中也没有奖励!")
print("游戏结束,不玩啦^_^")
因为电脑默认输入进去的值均为string(字符串)类型,所以你进行isinstance(guess, int)前需要先转换为int型,所以我把guess = int(temp)语句放到了while循环的前面,并且后面的判断isinstance(guess, int)中应该用guess,你之前用的是temp,当然也可以换另外一种改法,虽然比较冗杂:
print('--------我爱鱼C工作室---------')
print("不妨猜一下甲鱼现在心里想的是哪个数字:",end=" ")
time = 3
temp = int(input())
while not isinstance(temp, int):
temp = input("抱歉,输入不合法,请输入一个整数:")
guess = int(temp)
while guess != 8 and time > 0: # 也可以直接将guess替换为temp,然后删除上一句的guess = int(temp)
time = time-1
if guess < 8:
print("嘿,小了小了!")
else:
print("哥,大了大了!")
if time > 0:
print("猜错啦,再来一次吧!")
else:
print("机会用完喽!")
break
temp = input("请重新输入数字:")
guess = int(temp)
if guess == 8:
print("我草,你是小甲鱼心里的蛔虫吗?!")
print("哼,猜中也没有奖励!")
print("游戏结束,不玩啦^_^") 本帖最后由 baige 于 2020-8-6 07:20 编辑
print('--------我爱鱼C工作室---------')
print("不妨猜一下甲鱼现在心里想的是哪个数字:",end=" ")
time = 3
temp = input()
while not temp.isdigit():
temp = input("抱歉,输入不合法,请输入一个整数:")
guess = int(temp)
while guess != 8 and time > 0:
time = time-1
if guess < 8:
print("嘿,小了小了!")
else:
print("哥,大了大了!")
if time > 0:
print("猜错啦,再来一次吧!")
else:
print("机会用完喽!")
break
temp = input("请重新输入数字:")
while not temp.isdigit():
temp = input("抱歉,输入不合法,请输入一个整数:")
guess = int(temp)
if guess == 8:
print("我草,你是小甲鱼心里的蛔虫吗?!")
print("哼,猜中也没有奖励!")
print("游戏结束,不玩啦^_^") 本帖最后由 baige 于 2020-8-6 07:22 编辑
全能小乌贼 发表于 2020-8-6 01:34
楼上说的是对的,完整的更改后的程序如下,你可以自己对照着看一看:
因为电脑默认输入进去的值均为stri ...
while not isinstance(temp, int):
temp = input("抱歉,输入不合法,请输入一个整数:")
你的这一段完全没有用到,因为你只能输入整数,不输入整数程序直接报错
你输入就直接转换成int类型了,当遇到不能转换的就会报错 本帖最后由 Twilight6 于 2020-8-6 07:40 编辑
本来当输入正确的整数时,不是应该进入guess = int(temp)开始的语句执行吗?请达人指点下。可能本人对while语法还是不太理解。
不是 while 循环的问题,是你的理解错了 input 函数的问题哈~,你首先要了解 input 函数的作用
input 的函数是接受用户输入,并将用户输入的数据转化为字符串返回
所以你的 temp 永远为 str 字符串,导致你的 while 循环条件始终成立,陷入了死循环
等你学习倒小甲鱼的 Python 第五课时时候会有教字符串方法的,如下
s 为字符串
s.isalnum()所有字符都是数字或者字母,为真返回 True,否则返回 False。
s.isalpha() 所有字符都是字母,为真返回 True,否则返回 False。
s.isdigit() 所有字符都是数字,为真返回 True,否则返回 False。
s.islower() 所有字符都是小写,为真返回 True,否则返回 False。
s.isupper() 所有字符都是大写,为真返回 True,否则返回 False。
s.istitle() 所有单词都是首字母大写,为真返回 True,否则返回 False。
s.isspace() 所有字符都是空白字符,为真返回 True,否则返回 False。
例如:
>>> s = 'I LOVE FISHC'
>>> s.isupper()
>>> True
帮你改正后的代码:
print('--------我爱鱼C工作室---------')
print("不妨猜一下甲鱼现在心里想的是哪个数字:", end=" ")
time = 3
temp = input()
while not temp.isdigit():
temp = input("抱歉,输入不合法,请输入一个整数:")
guess = int(temp)
while guess != 8 and time > 0:
time = time - 1
if guess < 8:
print("嘿,小了小了!")
else:
print("哥,大了大了!")
if time > 0:
print("猜错啦,再来一次吧!")
else:
print("机会用完喽!")
break
temp = input("请重新输入数字:")
guess = int(temp)
if guess == 8:
print("我草,你是小甲鱼心里的蛔虫吗?!")
print("哼,猜中也没有奖励!")
print("游戏结束,不玩啦^_^") 我觉得下面的输入也需要判断一下是否是数字 baige 发表于 2020-8-6 07:19
while not isinstance(temp, int):
temp = input("抱歉,输入不合法,请输入一个整数:")
你的这 ...
你说的没错,但是他既然是猜数字,肯定输入的是数字,理论上不是数字的判断这里没必要复杂化去考虑,反倒容易误导他。。。。
页:
[1]