鱼C论坛

 找回密码
 立即注册
查看: 2547|回复: 10

请问这个程序是哪里有问题呢?

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

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

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

x
temp = input('请输入一个数字:')
guess = int (temp)
while guess != '8':
    if 0< guess < 8:
        print('小了,请重新输入:')
    else 8< guess:
        print('大了,请重新输入:')
if guess == 8:
    print('恭喜你回答正确。')
    print ('游戏结束。')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-20 21:32:19 | 显示全部楼层
本帖最后由 yongxi 于 2017-6-20 21:34 编辑

while guess != '8'   把8的引号去掉。
因为你已经guess = int (temp)
所以str类型已经变成int类型, 不需要引号了
还有 int前面的括号你的是中文括号。 改成英文的   不要加空格

else的正确用法是  

else:
      xxxxx
和if 不一样
  if是在后面直接跟条件,  else 是加冒号 ,然后下一行缩进 再写条件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-20 22:51:39 | 显示全部楼层
本帖最后由 floria_pang 于 2017-6-20 22:55 编辑

第一个问题:while 的条件是不等于8,那么如果输入的不是8,那么就一直执行while,无法跳出循环,比如说,输入9,就会一直print:“大了,请重新输入:”,可以加一个break,但是跳出来是继续执行,无法实现想要的目的。
第二个问题:猜错重新输入的时候,并没有再次执行input命令,也就是打印了“请再次输入:”,但是实际没有读取输入的数字。
第三个问题:while guess != '8' 这里的guess是猜测是否等于数字8,而不是字符8,要把引号去掉。
第四个问题:else 8< guess:  这里的else后面跟着的是一个判断,所以else后加冒号,然后再另起一行用if判断。


test.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-21 09:11:41 | 显示全部楼层
本帖最后由 china25qd 于 2017-6-21 09:18 编辑

这样就好了:
temp = input('请输入一个数字:')
guess = int (temp)
while guess != 8:
    if 0< guess < 8:
        print('小了,请重新输入:')
    else:
        print('大了,请重新输入:')
if guess == 8:
    print('恭喜你回答正确。')
    print ('游戏结束。')

因为你有一个8是字符串型,但是guess是int型的,所以错误会报在第三行,另外你的else后面不要放条件,要么用elif 条件:
另外,如果你把代码改成:
temp = input('请输入一个数字:')
guess = int (temp)
if guess == 8:
    print('恭喜你回答正确。')
    print ('游戏结束。')
else:
    while 1:
        if 0< guess < 8:
            print('小了,请重新输入:')
        else:
            print('大了,请重新输入:')
效率会更高
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-21 09:35:17 | 显示全部楼层

我的思路是 如果设定这个正确答案是数字8, 那么所有答案大方向上就只有两种可能,一种等于8,一种不等于8,如果等于8,那么游戏结束。如果不等于8,那么就有小于8,和大于8这两种情况, 循环就只出现在这种情况里,你把等于8的情况写在了最前面, 我是想把不等于8的循环情况写在最前面。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-21 10:28:58 | 显示全部楼层
Linda_c 发表于 2017-6-21 09:35
我的思路是 如果设定这个正确答案是数字8, 那么所有答案大方向上就只有两种可能,一种等于8,一种不等于 ...

我这里有两点:
1.在代码习惯上,我们习惯先把小概率的异常抛出,再去执行大概率的业务逻辑,这样可以增加代码的健壮性(虽然这个功能不会出问题,但是在很多实际开发中,会有很多未知的风险存在,可能编译的时候不会报错,但是在实际运行的时候却会造成损失,所以要尽量养成好的代码习惯)
2.在逻辑处理层面上,用条件分支判断包裹while循环可增加代码的可读性和效率,因为在某些语言中(我不清楚python会不会这样),同层级的不同语句会使用不同的堆栈,如果嵌套使用就只会用一个堆栈,这也是一种效率的优化(玩过3D渲染技术的小伙伴应该会有所感悟)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-21 15:38:04 | 显示全部楼层
china25qd 发表于 2017-6-21 10:28
我这里有两点:
1.在代码习惯上,我们习惯先把小概率的异常抛出,再去执行大概率的业务逻辑,这样可以增 ...

没懂,那我那个思路是不是对的啊??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-22 21:33:53 | 显示全部楼层
floria_pang 发表于 2017-6-20 22:51
第一个问题:while 的条件是不等于8,那么如果输入的不是8,那么就一直执行while,无法跳出循环,比如说,输 ...

第二个问题,除了加break,还有其他方法解决吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-22 21:42:43 | 显示全部楼层
测试了一下,以上答案都有问题啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-25 13:50:55 | 显示全部楼层
Linda_c 发表于 2017-6-22 21:33
第二个问题,除了加break,还有其他方法解决吗?

break 这个地方 我还没有学习到  只是听到老师说了一嘴 具体怎么用我也不知道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-25 17:29:52 | 显示全部楼层
哪有那么麻烦 看我的
while True:
    num = int(input("请输入数字:"))
    if num == 8:
        print("恭喜答对啦!")
        input("按任意键结束")
        break
    if num < 8:
        print("猜小了,继续试试\n")
        continue

    if num > 8:
        print("猜大了,猜小点试试\n")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-8 22:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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