勤奋的火柴头 发表于 2020-7-20 13:51:17

课后作业有疑惑

完善小游戏,为用户提供三次机会尝试,机会用完或者用户猜中答案均退出循环
问题是:
1)代码正常运行,但是当输入数字8时,没有打印出对应的提示,直接提示游戏结束
2)只有3次机会,但是实际输入四次数字才停止
代码如下:
temp = input("请输入一个数字:")
guess = int(temp)
i = 3
while guess != 8 and i > 0:
    temp = input("猜错了,请重新输入:")
    guess = int(temp)
    i = i - 1
    if guess == 8:
      print("我晕,你是小甲鱼心里的蛔虫吗?")
      print("哼,猜中了也没有奖励")
    else:
      if guess > 8:
            print("哥,大了大了~~")
      else:
            print("嘿,小了!小了!!")
print("游戏结束,不玩啦~")


请大佬们帮忙解惑,感谢{:5_109:}

Twilight6 发表于 2020-7-20 13:54:31

本帖最后由 Twilight6 于 2020-7-20 13:55 编辑


因为你有一次 input 是在 while 循环外输入的,改成这样就好了:


guess = 0
i = 3
print("请输入一个数字:",end='')# print 默认参数end ='\n' 换行符号 我们用end="" 覆盖他的默认值 就不会换行
while guess != 8 and i > 0:
    temp = input()
    guess = int(temp)
    i = i - 1
    if guess == 8:
      print("我晕,你是小甲鱼心里的蛔虫吗?")
      print("哼,猜中了也没有奖励")
    else:
      if guess > 8:
            print("哥,大了大了~~")
      else:
            print("嘿,小了!小了!!")
      if i != 0:
            print("猜错了,请重新输入:", end='') # print 默认参数end ='\n' 换行符号 我们用end="" 覆盖他的默认值 就不会换行
print("游戏结束,不玩啦~")

zltzlt 发表于 2020-7-20 13:54:52

这样试试:

temp = input("请输入一个数字:")
guess = int(temp)
i = 2
while guess != 8 and i > 0:
    temp = input("猜错了,请重新输入:")
    guess = int(temp)
    i = i - 1
    if guess != 8:
      if guess > 8:
            print("哥,大了大了~~")
      else:
            print("嘿,小了!小了!!")
if guess == 8:
    print("我晕,你是小甲鱼心里的蛔虫吗?")
    print("哼,猜中了也没有奖励")
print("游戏结束,不玩啦~")

勤奋的火柴头 发表于 2020-7-20 13:58:45

zltzlt 发表于 2020-7-20 13:54
这样试试:

最后那个if..没有else吗?不是说if...和else要搭配一起吗

勤奋的火柴头 发表于 2020-7-20 14:00:51

Twilight6 发表于 2020-7-20 13:54
因为你有一次 input 是在 while 循环外输入的,改成这样就好了:

这个和提供的参考答案很像,参考答案中还插入了随机数的用法,而且定义的guess = 0是为什么呢?

Twilight6 发表于 2020-7-20 14:02:15

勤奋的火柴头 发表于 2020-7-20 14:00
这个和提供的参考答案很像,参考答案中还插入了随机数的用法,而且定义的guess = 0是为什么呢?


guess = 0 是为了初始化,因为如果你没有定义这个 guess 的时候,代码运行到 while 循环时就会报错

因为 guess 是 while 的判断条件,而你的 guess 还没定义就不知道是什么东西,所以导致的报错

zltzlt 发表于 2020-7-20 14:03:18

勤奋的火柴头 发表于 2020-7-20 13:58
最后那个if..没有else吗?不是说if...和else要搭配一起吗

if 不一定要跟 else 搭配在一起,单独一个 if 也行,但不能单独一个 else 。

xiaosi4081 发表于 2020-7-20 14:07:53

前面你已经输入过一次,所以要把那次去掉:
temp = input("请输入一个数字:")
guess = int(temp)
i = 2
while guess != 8 and i > 0:
    temp = input("猜错了,请重新输入:")
    guess = int(temp)
    i = i - 1
    if guess != 8:
      if guess > 8:
            print("哥,大了大了~~")
      else:
            print("嘿,小了!小了!!")
if guess == 8:
    print("我晕,你是小甲鱼心里的蛔虫吗?")
    print("哼,猜中了也没有奖励")
print("游戏结束,不玩啦~")

勤奋的火柴头 发表于 2020-7-20 14:08:33

zltzlt 发表于 2020-7-20 14:03
if 不一定要跟 else 搭配在一起,单独一个 if 也行,但不能单独一个 else 。

那我换成这样写Ok吗?在if里插入一个while?
temp = input("请输入一个数字:")
guess = int(temp)
i = 2
if guess == 8:
    print("我晕,你是小甲鱼心里的蛔虫吗?")
    print("哼,猜中了也没有奖励")
else:
    while guess != 8 and i > 0:
      temp = input("猜错了,请重新输入:")
      guess = int(temp)
      i = i - 1
      if guess > 8:
            print("哥,大了大了~~")
      else:
            print("嘿,小了!小了!!")
print("游戏结束,不玩啦~")

zltzlt 发表于 2020-7-20 14:14:58

勤奋的火柴头 发表于 2020-7-20 14:08
那我换成这样写Ok吗?在if里插入一个while?

也可以,不过第 2、3 次猜中会直接打印 "游戏结束,不玩啦~",这样写就可以了:

temp = input("请输入一个数字:")
guess = int(temp)
i = 2
if guess == 8:
    print("我晕,你是小甲鱼心里的蛔虫吗?")
    print("哼,猜中了也没有奖励")
else:
    while guess != 8 and i > 0:
      temp = input("猜错了,请重新输入:")
      guess = int(temp)
      i = i - 1
      if guess == 8:
            print("我晕,你是小甲鱼心里的蛔虫吗?")
            print("哼,猜中了也没有奖励")
      elif guess > 8:
            print("哥,大了大了~~")
      else:
            print("嘿,小了!小了!!")
print("游戏结束,不玩啦~")

勤奋的火柴头 发表于 2020-7-20 14:18:02

zltzlt 发表于 2020-7-20 14:14
也可以,不过第 2、3 次猜中会直接打印 "游戏结束,不玩啦~",这样写就可以了:

对哈,没有考虑到,不过如果这样改的话感觉代码更多了,还是你那个更好,感谢

勤奋的火柴头 发表于 2020-7-20 14:20:03

Twilight6 发表于 2020-7-20 14:02
guess = 0 是为了初始化,因为如果你没有定义这个 guess 的时候,代码运行到 while 循环时就会报错
...

定义明白了,后面的还需要再想想,感谢
页: [1]
查看完整版本: 课后作业有疑惑