鱼C论坛

 找回密码
 立即注册
查看: 1752|回复: 17

004讲课后练习为什么while循环里要加上Guess

[复制链接]
发表于 2018-1-28 19:50:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我试了下不需要代码中红色的地方也可以正常循环呀?猜对了也会退出循环,次数用完了也会退出循环,那为什么还要带上guess呢?不太明白诶,还请版主指教喔~~


import random
times = 3
secret = random.randint(1,10)
print('------------------我爱鱼C工作室------------------')
# 这里先给guess赋值(赋一个绝对不等于secret的值)
guess = 0

# print()默认是打印完字符串会自动添加一个换行符,end=" "参数告诉print()用空格代替换行
# 嗯,小甲鱼觉得富有创意的你应该会尝试用 end="JJ"?
print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")
while (guess != secret) and (times > 0):
    temp = input()
    guess = int(temp)
    times = times - 1 # 用户每输入一次,可用机会就-1
    if guess == secret:
        print("我草,你是小甲鱼心里的蛔虫吗?!")
        print("哼,猜中了也没有奖励!")
    else:
        if guess > secret:
            print("哥,大了大了~~~")
        else:
            print("嘿,小了,小了~~~")
        if times > 0:
            print("再试一次吧:", end=" ")
        else:
            print("机会用光咯T_T")
print("游戏结束,不玩啦^_^")

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-28 19:56:22 | 显示全部楼层
不是版主,guess仅作为循环条件而已,你猜对了还要继续猜码。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-1-28 20:33:06 | 显示全部楼层
循环里的guess不是把数字弄成整形的吗,,不然怎么比较
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-28 20:36:54 | 显示全部楼层
把 这个改成 这样 secret = random.randint(1,3)

然后你测试 看看 就知道区别了

自己思考一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-28 21:25:38 | 显示全部楼层
去掉红色的部分,如果你第一次或第二次就猜对了,仍无法退出循环,还会让你在输入,直到次数用完
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-28 21:29:17 | 显示全部楼层
哈哈我也不太懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-28 21:59:26 | 显示全部楼层
这么说吧,虽然你guess != secret 不要是行,但那是因为产生的随机数是从1~10,刚好是没有0的。所以 在开始的时候guess !=0 这条语句的值为1 ,1 and 一个数(0或1)结果肯定还是那个数,因为这样,加上又有times来控制次数,所以你把这句掉也是行的。你可以试试 第一次猜错 第二次才对,看下能不能正常退出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-29 09:00:49 | 显示全部楼层
你确定删去guess=0不会报错?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-29 09:29:37 | 显示全部楼层
没有  guess != secret   的话可以在print("哼,猜中了也没有奖励!")后边加上一句break
不然没办法在猜中之后结束循环
import random
times = 3
secret = random.randint(1,10)
print('------------------我爱鱼C工作室------------------')
# 这里先给guess赋值(赋一个绝对不等于secret的值)
# print()默认是打印完字符串会自动添加一个换行符,end=" "参数告诉print()用空格代替换行
# 嗯,小甲鱼觉得富有创意的你应该会尝试用 end="JJ"?
print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")
while (times > 0):
    temp = input()
    guess = int(temp)
    times = times - 1 # 用户每输入一次,可用机会就-1
    if guess == secret:
        print("我草,你是小甲鱼心里的蛔虫吗?!")
        print("哼,猜中了也没有奖励!")
        break
    else:
        if guess > secret:
            print("哥,大了大了~~~")
        else:
            print("嘿,小了,小了~~~")
        if times > 0:
            print("再试一次吧:", end=" ")
        else:
            print("机会用光咯T_T")
print("游戏结束,不玩啦^_^")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-29 14:24:31 | 显示全部楼层
这里纯粹是为了循环需要,如果猜对了,就会直接出循环,如果猜不对继续在循环里边,你当然可以去掉,换成别的跳出循环的指令,如楼上的break指令。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-30 21:43:29 | 显示全部楼层
raimond 发表于 2018-1-28 20:36
把 这个改成 这样 secret = random.randint(1,3)

然后你测试 看看 就知道区别了

改过以后发现了,确实不退出循环,甚至猜对了也不会出现最后一句话 “游戏结束不玩了” 非得要用完次数才能 出现,但是 猜对以后它也不会循环其他语句 只是显示 完“猜中也没有奖励”之后就不显示 了,所以一直没看出哪里有问题了但还是看不出为什么加了guess以后就能猜对后跳出循环了=。=不明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-30 21:50:42 | 显示全部楼层
微末非末 发表于 2018-1-28 21:59
这么说吧,虽然你guess != secret 不要是行,但那是因为产生的随机数是从1~10,刚好是没有0的。所以 在开 ...

这里头有 几个guess我有点蒙,第一个是赋值是为了 guess != secret而准备的,第三个 guess是化成整型, 第四个guess假设是5,secret假设也是5 两个相等,那么guess != secret 就是假 ,所以终止循环,是这个意思吗?但是 guess不是 在前面的时候已经= 0了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-30 21:51:13 | 显示全部楼层
微末非末 发表于 2018-1-28 21:59
这么说吧,虽然你guess != secret 不要是行,但那是因为产生的随机数是从1~10,刚好是没有0的。所以 在开 ...

这里头有 几个guess我有点蒙,第一个是赋值是为了 guess != secret而准备的,第三个 guess是化成整型, 第四个guess假设是5,secret假设也是5 两个相等,那么guess != secret 就是假 ,所以终止循环,是这个意思吗?但是 guess不是 在前面的时候已经= 0了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-30 22:36:39 From FishC Mobile | 显示全部楼层
你确定guess=0去掉不报错吗?去掉的话while的时候Python还不认识guess吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-30 22:40:21 | 显示全部楼层
wln5854498 发表于 2018-1-30 21:43
改过以后发现了,确实不退出循环,甚至猜对了也不会出现最后一句话 “游戏结束不玩了” 非得要用完次数才 ...

(guess != secret) and (times > 0)

只要其中一个条件 不成立, 就会推出循环

guess == secret 推出循环,
times < 0   也推出循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-31 08:35:47 | 显示全部楼层
wln5854498 发表于 2018-1-30 21:50
这里头有 几个guess我有点蒙,第一个是赋值是为了 guess != secret而准备的,第三个 guess是化成整型,  ...

是啊!guess处女的时候是等于0了,所以初夜while (guess != secret) and (times > 0):首次肯定是进入到这个循环内啊,然后在循环内部执行到guess = int(temp)这句,不就是让你输入一个新的数值给guess吗?然后下边开始判断你给的数值是否是小甲鱼心里的蛔虫吗?这个程序不就是这样吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-31 11:11:09 | 显示全部楼层
wln5854498 发表于 2018-1-30 21:51
这里头有 几个guess我有点蒙,第一个是赋值是为了 guess != secret而准备的,第三个 guess是化成整型,  ...

嗯,对的 。 第一次 guess =0 相当于定义guess这个变量(也可以说是名字)。而且这这些guess全都是一个东西。程序是从上往下执行的,它是不会跳回上面去的(除非你是语句让它回去)。 guess=0这句赋值已经执行完了,后面也没有语句回到前面去,所以它是不会再被执行的。并且后面guess已经被其他值给覆盖掉了。
循环是这样执行的:先进行判断,然后你给guess赋值。如果错了,它会else的语句,再执行判断,然后再是一样的操作,一直到它跳出来为止(如果你跳不出来,就是死循环了); 如果对了,它会执行if的语句,也会再进行判断,但这个时候循环的判断条件(guess !=secret  and times > 0)已经不成立了,所以就退出循环了,继续往下执行。

用文字表达总是很复杂。。。。。楼主请认真看一下。建议楼主去学个c语言,再来学其他语言就会轻松很多了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-4 09:11:50 | 显示全部楼层
小甲鱼在第四讲中说过这是要解决第一遍猜对了就直接结束的尴尬场面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 08:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表