catclaw758 发表于 2020-8-5 23:40:05

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语法还是不太理解。

baige 发表于 2020-8-5 23:56:17

input()的返回值始终是字符串,所以type(temp)永远是<class 'str'>!

baige 发表于 2020-8-5 23:57:24

本帖最后由 baige 于 2020-8-6 00:00 编辑

temp.isdigit() 所有字符都是数字,为真返回 True,否则返回 False
temp是字符串

全能小乌贼 发表于 2020-8-6 01:34:58

本帖最后由 全能小乌贼 于 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:16:35

本帖最后由 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:19:45

本帖最后由 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:39:19

本帖最后由 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:49:32

我觉得下面的输入也需要判断一下是否是数字

全能小乌贼 发表于 2020-8-6 13:57:29

baige 发表于 2020-8-6 07:19
while not isinstance(temp, int):
   temp = input("抱歉,输入不合法,请输入一个整数:")
你的这 ...

你说的没错,但是他既然是猜数字,肯定输入的是数字,理论上不是数字的判断这里没必要复杂化去考虑,反倒容易误导他。。。。
页: [1]
查看完整版本: while语句条件为假时为何不能运行循环外的语句?