鱼C论坛

 找回密码
 立即注册
查看: 2370|回复: 8

[已解决]我没有输入数字,但是代码却自动跳过了第一次机会,并且还给出了或大或小的回答

[复制链接]
发表于 2017-6-11 14:23:20 | 显示全部楼层 |阅读模式

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

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

x
import random
counter=0
answer = random.randint(1,10)
guess = 0
print("猜猜我在想数字几;")
while (guess!=answer)and(counter<3):
    counter=counter+1
    if guess ==answer:
        print("回答正确")
    else:
        if guess > answer:
            print("大了")
        else:
            print("小了")
        if counter < 3:
            print("再猜一次吧:",end="")
        else:
            print("机会用光喽")
    temp=input()
    guess = int(temp)
print("游戏结束")
这是我对着小甲鱼老师的参考答案自己思考之后写的,但是想了许久没想明白为什么会出现这样的错误,跪求大神解答
最佳答案
2017-6-11 15:53:05
Lz的问题在于python的代码为顺序执行这条基本规则上
你在定义全局变量guess的时候并没有用input()给它赋值,也就是说在代码第一次执行时,当counter == 1的时候,guess的值还是0,于是程序自动对比了结果,打印以后才把你输入的值赋值给guess。
正确答案:
  1.     temp=input()
  2.     guess = int(temp)
复制代码

这段代码可写在while循环开始的时候,就不会出现你的问题了
思考一下:
LZ不妨思考下,在不修改原来代码的前提下,把
  1. guess = 0
复制代码

这行代码移动到while循环里面,会出什么事情呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-6-11 15:53:05 | 显示全部楼层    本楼为最佳答案   
Lz的问题在于python的代码为顺序执行这条基本规则上
你在定义全局变量guess的时候并没有用input()给它赋值,也就是说在代码第一次执行时,当counter == 1的时候,guess的值还是0,于是程序自动对比了结果,打印以后才把你输入的值赋值给guess。
正确答案:
  1.     temp=input()
  2.     guess = int(temp)
复制代码

这段代码可写在while循环开始的时候,就不会出现你的问题了
思考一下:
LZ不妨思考下,在不修改原来代码的前提下,把
  1. guess = 0
复制代码

这行代码移动到while循环里面,会出什么事情呢?

评分

参与人数 1荣誉 +4 鱼币 +4 贡献 +2 收起 理由
忽视 + 4 + 4 + 2 感谢解答

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-6-11 14:48:29 | 显示全部楼层
好歹把错误贴上
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-11 14:52:05 | 显示全部楼层
  1. import random
  2. counter=0
  3. answer = random.randint(1,10)
  4. guess = 0
  5. print("猜猜我在想数字几;")
  6. while (guess!=answer) and (counter<3):
  7.     temp=input()
  8.     guess = int(temp)
  9.     counter=counter+1
  10.     if guess ==answer:
  11.         print("回答正确")
  12.     else:
  13.         if guess > answer:
  14.             print("大了")
  15.         else:
  16.             print("小了")
  17.         if counter < 3:
  18.             print("再猜一次吧:",end="")
  19.         else:
  20.             print("机会用光喽")
  21. print("游戏结束")
复制代码

你这个写的怪怪的

评分

参与人数 1荣誉 +4 鱼币 +3 贡献 +3 收起 理由
忽视 + 4 + 3 + 3 我没有把您设为最佳是因为,您虽然解决了问.

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-11 15:30:47 | 显示全部楼层
我认为你把print()和input()两个方法弄混了吧
你这里面只是初始化需要赋值,所以给变量guess=0,但是你没有用input()方法,输入一个数字,然后将输入的这个数字赋值给 guess,所以你的guess一直是0,所以一运行就直接有结果,根本不需要输入数字
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-11 23:30:00 From FishC Mobile | 显示全部楼层
china25qd 发表于 2017-6-11 15:53
Lz的问题在于python的代码为顺序执行这条基本规则上
你在定义全局变量guess的时候并没有用input()给它赋 ...

移动到循环里面,那么guess,就没有赋值,那么布尔逻辑是否可以成立?我觉得无法成立,因为guess没有赋值,无法对比。我现在用的手机,回家估计要明天才能给你回复了到时候跑一下,再跟你说
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-12 08:30:08 | 显示全部楼层
本帖最后由 china25qd 于 2017-6-12 08:34 编辑
忽视 发表于 2017-6-11 23:30
移动到循环里面,那么guess,就没有赋值,那么布尔逻辑是否可以成立?我觉得无法成立,因为guess没有赋值 ...


哦,我疏忽了,LZ的判定方式比较独特,是用循环体判断答案的呀~(因为我自己是用break和continue在控制是不是跳出循环)
我的意思是,LZ要多写多试多跑,不要怕报错
报错是最好的进步方式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-12 08:37:38 | 显示全部楼层
你程序的运行结果是没有问题的,问题是你在前面并没有给予输入,answer是一个由random随机生成的数,用这个数去和guess比较,自然是回跳过的,你应该明白在什么时候输入一个数字,去和guess比较,还有answer的作用,上面的解答也很清楚了,你现在需要弄清思路,加油
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-12 08:54:31 | 显示全部楼层
新手·ing 发表于 2017-6-11 14:52
你这个写的怪怪的

这个确实解决了,我顺序弄反了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-28 00:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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