g476292825 发表于 2021-8-23 21:32:32

新手求助

import random
secret=random.randint(1,10)
temp=input("我心里的数字")
num=int(temp)
while num!=secret:
    temp=input("错了,重新输入")
    num=int(temp)
    if num==secret:
      print("牛逼")
    else:
      if num>secret:
            print("大了")
      else:
            print("小了")
print("游戏结束")
      
      
这个是直接按照小甲鱼的代码    第一次输入 中还是不中都有结果返回   第一次输入猜中也能有显示牛逼。


------------------------------------------------------------------------------------------------------------------------------------
import random
secret=random.randint(1,10)
times=2
temp=input("我的数字")
num=int(temp)
while (num!=secret)and(times>0):
    temp=input(" ")
    num=int(temp)
    times=times-1#
    if num==secret:
      print("牛逼")
    else:
      if num>secret:
            print("大了")
      else:
            print("小了")
    if times>0:
      print("还有机会")
    else:
      print("GG")
print("游戏结束")


这个我是仿照小甲鱼的代码基础上修改增加了输入机会,为什么我第一次输入如果中了也只是直接显示游戏结束,没有之前的显示牛逼。如果第一次没猜中直接什么都不显示。这是为啥。我知道这段第一次,的temp=input改为print(“我的数字”)然后times改3,可以回避这个问题,但我就想知道原理,为啥上面第一段的代码首次输入正确就显示牛逼,错了也马上返回错了的结果。而下面这段代码第一次输入成功了就显示结束游戏,不显示牛逼。还有就是首次猜错,直接什么信息都不返回。为啥

白two 发表于 2021-8-23 21:41:47

如果第一次就输入正确,两个代码都不会显示牛逼,因为牛逼是在 while 循环里面,如果第一次就猜对了根本不会进入 while 循环
这是我复制的上面的代码,为了方便演示 secret 重赋值为 5 了


import random
secret=random.randint(1,10)
temp=input("我心里的数字")
num=int(temp)
secret=5

while num!=secret:
    temp=input("错了,重新输入")
    num=int(temp)
    if num==secret:
      print("牛逼")
    else:
      if num>secret:
            print("大了")
      else:
            print("小了")
print("游戏结束")

这是结果:

我心里的数字5
游戏结束


你看,secret 的值就是 5 ,第一次猜对了,所以没进入while 循环,根本不会打印牛逼

不能懒 发表于 2021-8-23 22:03:26

楼主逻辑没有搞清楚啊,第一次就中了就不进去循环了

g476292825 发表于 2021-8-23 23:22:39

不能懒 发表于 2021-8-23 22:03
楼主逻辑没有搞清楚啊,第一次就中了就不进去循环了

那第一次中了也不返回牛逼那个?

Rosy7673 发表于 2021-8-23 23:37:43

import random
secret=random.randint(1,10)#导入模块

temp=input("猜猜我心里想的数字:")
num=int(temp)

if num==secret:
    print("牛逼")#如果第一次就猜对,直接print'牛逼'&'游戏结束'

while num!=secret:#如果第一次没猜对,进入循环
    if num>secret:#这几行是判定大小
      print("大了")
    else:
      print("小了")
    temp=input("请重新输入:")#把输入放在这里,就可以先显示大小提示,再让你重新输入
    num=int(temp)
    if num==secret:#如果第一次没猜对,就会进入循环,后面几次猜对了也可以print'牛逼'了
      print('牛逼')

print("游戏结束")


第一组代码改动了一下【微调】(doge

第二组代码之所以第一次猜错啥都不显示是因为猜错后进入while循环后,temp=input(“”)引号里应是显示的字符串,但你啥都没输,所以其实显示的就是空白
加上print(“我的数字”)当然就会输出,但与temp=input(“ 这里输入内容 ”)的形式和本质不同

times改为3可以回避我也不大理解,可能是times是2的话减着减着就<0了,如果times<0,那程序应该会出错{:10_257:}

灰晨 发表于 2021-8-24 15:49:48

你第一段代码,第一次输入中了能打印牛逼?
import random
secret=random.randint(1,10)
temp=input("我心里的数字")
num=int(temp)
while num!=secret:
    temp=input("错了,重新输入")
    num=int(temp)
    if num==secret:
      print("牛逼")
    else:
      if num>secret:
            print("大了")
      else:
            print("小了")
print("游戏结束")
这段代码难道不是,先显示‘我心里的数字’   让你输入,中了就打印游戏结束,错了进入循环?
进入循环后
显示 ‘错了,重新输入’ 让你重新输入,中了才会打印 牛逼 吧

g476292825 发表于 2021-8-24 21:02:22

Rosy7673 发表于 2021-8-23 23:37
第一组代码改动了一下【微调】(doge

第二组代码之所以第一次猜错啥都不显示是因为猜错后进入while ...

如果要弄成3次机会呢

不能懒 发表于 2021-8-24 21:05:05

g476292825 发表于 2021-8-23 23:22
那第一次中了也不返回牛逼那个?

是的,中了直接结束循环了

g476292825 发表于 2021-8-24 21:30:40

Rosy7673 发表于 2021-8-23 23:37
第一组代码改动了一下【微调】(doge

第二组代码之所以第一次猜错啥都不显示是因为猜错后进入while ...

弄成3次机会怎么修改

叼辣条闯世界 发表于 2021-8-24 21:30:48

import random
secret=random.randint(1,10)
times=2
while times>0:
    temp=input("我的数字")
    num=int(temp)
    times=times-1
    if num==secret:
      print("牛逼")
      break
    else:
      if num>secret:
            print("大了")
            print("还有机会")
            continue
      else:
            print("还有机会")
            print("小了")
            continue

    if time==0:
      print("GG")
      break
print("游戏结束")

稍微改了亿下

g476292825 发表于 2021-8-24 23:15:58

叼辣条闯世界 发表于 2021-8-24 21:30
稍微改了亿下

continue 有什么用

Rosy7673 发表于 2021-8-25 08:46:28

g476292825 发表于 2021-8-24 21:30
弄成3次机会怎么修改

import random
secret=random.randint(1,10)
times=3#这里是次数

temp=input("不妨猜猜我现在心里想的是哪个数字吧:")
num=int(temp)

while (num!=secret)and(times>0):#如果没猜中,并且还有机会,便进入循环
    if num==secret:
      print("牛逼")#猜中显示NB
    else:
      if num>secret:
            print("大了♂")
      else:
            print("小了♂")
      if times>0:
            print("还有机会")
      else:#如果没机会了,会显示GG
            print("GG")
      temp=input("不妨猜猜我现在心里想的是哪个数字吧:")
      num=int(temp)
      times-=1#每猜错一次,机会减少1

if num==secret:
    print('牛逼')#如果第一次就猜中了,就会显示NB
   
print("游戏结束")
if times==0 and num!=secret:
    print("正确答案是", secret)#如果机会用完了还没猜中,就会告诉你正确答案(貌似没什么luan用{:10_282:} )


部分解释用#给你标了,改成3次或者4次,5次......都差不多,最主要的是代码执行的主次

Rosy7673 发表于 2021-8-25 08:52:00

g476292825 发表于 2021-8-24 23:15
continue 有什么用

if num>secret:
            print("大了")
            print("还有机会")
            continue
比如这段,如果满足num>secret(if num > secret为True),continue的作用就是不执行整个循环中后续的代码,直接跳到循环开始的地方,重新开始循环
如果不满足,就继续执行后续的代码
用continue时建议给个次数,不然有时会进入死循环{:10_254:}
页: [1]
查看完整版本: 新手求助