赛酱想学编程 发表于 2022-7-8 17:08:36

关于这个代码求助

import random
secret = random.randint(1,10)
chance = 3
guess = 0
print("猜猜小甲鱼心里的数字:",end='')
while chance > 0 and guess != secret:
   temp = input()
   if temp.isdigit():
      guess = int(temp)
      if guess == secret:
         print("我草,你是小甲鱼心里的蛔虫吗?")
         print("哼,猜中了也没奖励")
      else:
         if guess > secret:
            print("大了大了")
         else:
            print("小了小了")
         if chance > 1:
            print("请再试一次吧:",end='')
         else:
            print("机会用光咯")
      chance = chance - 1
   elif guess <= 0 or guess > 10 or guess == float:
      print("输入有误,请输入1-10之间的整数")
   else:
      print("抱歉,您的输入有误,请输入一个整数:",end='')
print("游戏结束,不玩啦")


这是萌新我尝试改进这个程序写的代码,问题出在倒数第5行那里,请问一下为什么guess<=0 or guess>10这个部分运行的时候没有效果而后面的guess==float又可以执行??求大神讲解一波,教下我如何改进!!谢谢!

柿子饼同学 发表于 2022-7-8 17:28:50

因为前面有 isdigit() 如果输入的是整数 ,就会进第一个 if
问题在于,第一个判断的时候没有判断是否在范围内, 只是判断是否为整数

临时号 发表于 2022-7-8 17:38:19

当你输入100时,在if temp.isdigit()的时候就为True了,所以执行不到后面的elif
guess==float是不可行的,但是,当你输入5.4时,因为满足guess <= 0,而你用的是or,所以条件成立
import random
secret = random.randint(1,10)
chance = 3
guess = 0
print("猜猜小甲鱼心里的数字:",end='')
while chance > 0 and guess != secret:
   temp = input()
   if temp.isdigit():
      if int(temp) > 10 or int(temp) == 0:
      print("输入有误,请输入1-10之间的整数")
      continue
   else:
      if temp == "-" and temp.isdigit():
      print("输入有误,请输入1-10之间的整数")
      continue
      elif "." in temp and (temp.isdigit() or temp.isdigit()):
      print("输入有误,请输入1-10之间的整数")
      continue
      else:
      print("抱歉,您的输入有误,请输入一个整数:",end='')
      continue
   if temp.isdigit():
      guess = int(temp)
      if guess == secret:
         print("我草,你是小甲鱼心里的蛔虫吗?")
         print("哼,猜中了也没奖励")
      else:
         if guess > secret:
            print("大了大了")
         else:
            print("小了小了")
         if chance > 1:
            print("请再试一次吧:",end='')
         else:
            print("机会用光咯")
      chance = chance - 1
print("游戏结束,不玩啦")

青出于蓝 发表于 2022-7-8 17:40:00

import random
secret = random.randint(1,10)
chance = 3
guess = 0
print("猜猜小甲鱼心里的数字:",end='')
while chance > 0 and guess != secret:
   temp = input()
   if temp.isdigit():#这是第一个判断
      guess = int(temp)
      if guess == secret:
         print("我草,你是小甲鱼心里的蛔虫吗?")
         print("哼,猜中了也没奖励")
      else:
         if guess > secret:
            print("大了大了")
         else:
            print("小了小了")
         if chance > 1:
            print("请再试一次吧:",end='')
         else:
            print("机会用光咯")
      chance = chance - 1
   elif guess <= 0 or guess > 10 or guess == float: 这是第二个判断
      print("输入有误,请输入1-10之间的整数")
   else:
      print("抱歉,您的输入有误,请输入一个整数:",end='')
print("游戏结束,不玩啦")



用户输入11 ,判断为整数 直接进入第一个分支,不会再判断是否在1到10

改进:首先要判断这个数是否在1到10,再验算是否是正确数字

赛酱想学编程 发表于 2022-7-8 21:05:24

柿子饼同学 发表于 2022-7-8 17:28
因为前面有 isdigit() 如果输入的是整数 ,就会进第一个 if
问题在于,第一个判断的时候没有判断是否在 ...

懂啦,谢谢指正!

赛酱想学编程 发表于 2022-7-8 21:06:02

青出于蓝 发表于 2022-7-8 17:40
import random
secret = random.randint(1,10)
chance = 3


谢谢指正!!!
页: [1]
查看完整版本: 关于这个代码求助