鱼C论坛

 找回密码
 立即注册
查看: 3234|回复: 13

[已解决]请问这个代码为何执行就报错?是while问题还是if错了?

[复制链接]
发表于 2016-8-23 13:43:32 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 fdfanmo 于 2016-8-23 21:29 编辑

  1. import random
  2. times = 10
  3. random1= random.randint(1,10)

  4. p = 0

  5. print('猜猜數字遊戲開始,猜對是天才,猜錯是噗嚨共,共有10次機會',end=' ')

  6. while (random1 != p) and (times > 0) :

  7.     temp=input()
  8.     userp=int(temp)
  9.     if userp == random1 :
  10.         print('你猜對了,真是天才',end=' ')
  11.     else:
  12.         print('你猜錯了,電腦數字是'+random1,end=' ')
  13.     if times > 0 :
  14.         print('你還有'+ times-1 + '次機會',end=' ')
  15.     else:
  16.         print('猜了10次都猜不到,你是噗嚨共',end=' ')
  17.     times = times -1
  18.    
  19. print('下次再來,噗嚨共')
复制代码


最佳答案
2016-8-23 14:11:39
17行的问题,冬雪版主已回答你了

13行的问题,更正一下,input输入的是字符串类型,就是说不管你输入数字,字母,或空,temp都赋值成了字符串,但在userp=int(temp)这里,int是把字符串转换成整型,所以如果输入为非数字的字符,则会报错,包括小甲鱼老师的源码,你试着输入a,b,或直接回车,也会看到报错
snap040.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-23 13:49:31 | 显示全部楼层
第2行定义的是:times

第9行while使用的是:tims

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

使用道具 举报

 楼主| 发表于 2016-8-23 13:53:19 | 显示全部楼层
老忘 发表于 2016-8-23 13:49
第2行定义的是:times

第9行while使用的是:tims

謝謝大大~
剛剛我自己也有發現了~
不过改完后好像还是出现一样的报错..
目前自己也正在查找原因.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-23 13:54:37 | 显示全部楼层
  1. # -*- coding:Utf-8 -*-
  2. import random
  3. times = 10
  4. ranv= random.randint(1,10)

  5. p = 0

  6. print('猜猜數字遊戲開始,猜對是天才,猜錯是噗嚨共,共有10次機會',end=' ')

  7. while (ranv != p) and (tims > 0) :                    #tims变量未定义,应为times

  8.     temp=input()
  9.     userp=int(temp)                                    #如果temp为空,则会报错
  10.     if userp == ranv :
  11.         print('你猜對了,真是天才',end=' ')
  12.     else:
  13.         print('你猜錯了,電腦數字是'+ranv,end=' ')       #ranv 是整型,需用str转换
  14.     if times > 0 :
  15.         print('你還有'+ times-1 + '次機會',end=' ')    #times-1 是整型,需用str转换
  16.     else:
  17.         print('猜了10次都猜不到,你是噗嚨共',end=' ')
  18.     times = times -1

  19. print('下次再來,噗嚨共')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-23 13:59:41 | 显示全部楼层
没有发现你说的错误,但print函数中把字符串和数字相加是错误的,
如:print('你還有'+ times-1 + '次機會',end=' '),应改为 print('你還有', times-1 , '次機會',end=' ')
另外逻辑上还有错误:
1.猜对了,仍继续循环
2.猜错了,告诉了正确答案,还让人继续猜。

评分

参与人数 1贡献 +1 收起 理由
fdfanmo + 1 谢谢冬雪版主的指导..让小弟受益良多

查看全部评分

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

使用道具 举报

 楼主| 发表于 2016-8-23 14:03:14 | 显示全部楼层
本帖最后由 fdfanmo 于 2016-8-23 14:04 编辑


谢谢老忘大大:

我是参考过小甲鱼老师的答案后.想说自己亲手写一个的.
关于你提报的错误.
13行 temp 我看小甲鱼老师的也是为空
17行的nrav小甲鱼老师的好像也没看到做str
我的narv就是小甲鱼的secret..
只是英文单字不熟的我..想说就用简单的字串代替了..
但是小甲鱼老师的不会报错?为什么呢?
附上小甲鱼老师的源码



  1. import random
  2. times = 3
  3. secret = random.randint(1,10)
  4. print('------------------我爱鱼C工作室------------------')
  5. # 这里先给guess赋值(赋一个绝对不等于secret的值)
  6. guess = 0
  7. # print()默认是打印完字符串会自动添加一个换行符,end=" "参数告诉print()用空格代替换行
  8. # 嗯,小甲鱼觉得富有创意的你应该会尝试用 end="JJ"?
  9. print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")
  10. while (guess != secret) and (times > 0):
  11.     temp = input()
  12.     guess = int(temp)
  13.     times = times - 1 # 用户每输入一次,可用机会就-1
  14.     if guess == secret:
  15.         print("我草,你是小甲鱼心里的蛔虫吗?!")
  16.         print("哼,猜中了也没有奖励!")
  17.     else:
  18.         if guess > secret:
  19.             print("哥,大了大了~~~")
  20.         else:
  21.             print("嘿,小了,小了~~~")
  22.         if times > 0:
  23.             print("再试一次吧:", end=" ")
  24.         else:
  25.             print("机会用光咯T_T")
  26. print("游戏结束,不玩啦^_^")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-23 14:11:39 | 显示全部楼层    本楼为最佳答案   
17行的问题,冬雪版主已回答你了

13行的问题,更正一下,input输入的是字符串类型,就是说不管你输入数字,字母,或空,temp都赋值成了字符串,但在userp=int(temp)这里,int是把字符串转换成整型,所以如果输入为非数字的字符,则会报错,包括小甲鱼老师的源码,你试着输入a,b,或直接回车,也会看到报错

评分

参与人数 1贡献 +1 收起 理由
fdfanmo + 1 谢谢前辈的帮忙..这样小弟明白了..

查看全部评分

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

使用道具 举报

 楼主| 发表于 2016-8-23 14:16:11 | 显示全部楼层
冬雪雪冬 发表于 2016-8-23 13:59
没有发现你说的错误,但print函数中把字符串和数字相加是错误的,
如:print('你還有'+ times-1 + '次機會 ...

谢谢冬雪版主..
逻辑错误我明白了..
不能把答案公开..
我逻辑错误是错在..我忘了while的循环后程序不会再执行ranv= random.randint(1,10)
所以ranv的值是永远固定不变的.
另外冬雪版主说的没发现错误.
我也发现到了.
我将论坛的code贴回执行不会报错.
但我原始的挡案就是一样会报错.
我如何找也找不出原因..
看到眼睛都花了..
能请冬雪版主帮我除错吗?
我实在看不出出错的原因


00.rar

3.41 KB, 下载次数: 1

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

使用道具 举报

发表于 2016-8-23 14:20:10 | 显示全部楼层
你的前后两段都用三引号作为注释了,但最后缺少三引号。

评分

参与人数 1贡献 +1 收起 理由
fdfanmo + 1 谢谢版主!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2016-8-23 15:43:56 | 显示全部楼层
冬雪雪冬 发表于 2016-8-23 14:20
你的前后两段都用三引号作为注释了,但最后缺少三引号。

谢谢冬雪版主:
我已经修正了代码如下:
但目前还是有个问题
后面代码我加入了.if的判断
如果猜5次内猜中了数字
就执行:
print('成績很好,只猜',10-times,'次就猜到了')
否则执行(高于5次才猜中)
print('下次再來,噗嚨共')

但是代码却完全不会去显示:
if或是else中的内容.
这是为神么呢?


  1. import random
  2. times = 10
  3. random1= random.randint(1,10)

  4. p = 0

  5. print('猜猜數字遊戲開始,猜對是天才,猜錯是噗嚨共,共有10次機會:',end=' ')

  6. while (random1 != p) and (times > 0) :

  7.     temp=input()
  8.     userp=int(temp)
  9.     if userp == random1 :
  10.         print('你猜對了,真是天才',end=' ')
  11.     else:
  12.         print('你猜錯了',end=' ')
  13.     if times > 0 :
  14.         print('你還有', times-1 , '次機會',end=' ')
  15.     else:
  16.         print('猜了10次都猜不到,你是噗嚨共',end=' ')
  17.     times = times -1
  18.    
  19.    
  20. if times > 5 :
  21.     print('成績很好,只猜',10-times,'次就猜到了')
  22. else:   
  23.     print('下次再來,噗嚨共')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-23 16:02:35 | 显示全部楼层
fdfanmo 发表于 2016-8-23 15:43
谢谢冬雪版主:
我已经修正了代码如下:
但目前还是有个问题

while循环中没有猜对退出的语句,所以无论是否正确都要把循环的次数用尽。
这样time总是=0
另24行改为if times <= 5 :

评分

参与人数 1鱼币 +5 收起 理由
fdfanmo + 5

查看全部评分

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

使用道具 举报

 楼主| 发表于 2016-8-23 16:51:12 | 显示全部楼层
冬雪雪冬 发表于 2016-8-23 16:02
while循环中没有猜对退出的语句,所以无论是否正确都要把循环的次数用尽。
这样time总是=0
另24行改为i ...

谢谢冬雪老师
经过我自己不断的检视代码终于知道冬雪老师所说的"while循环中没有猜对退出的语句"
这是因为我前面设定了p = 0
而后面输入后的int转换后又不是给P赋值.
而是给userp赋值了.
以至于while没办法达成退出条件了..
作业还是必须仔细的作..而且要自己变点花样作..
这样才能清楚找出自己的问题..
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-23 19:19:44 | 显示全部楼层
看着好像逻辑不太对。
再向下看,好像已经解决了……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-23 21:29:37 | 显示全部楼层
carbont 发表于 2016-8-23 19:19
看着好像逻辑不太对。
再向下看,好像已经解决了……

谢谢carbont大的指教!
在这之前也只学过按键精灵的脚本..
语法跟python 差蛮多的..
目前最大问题是"缩进"让我很不习惯..
也浪费了很多时间错误在这上面..
因为按键精灵有自动缩进功能..
而且就算缩进错误也不会报错..
一漾可以正常执行脚本..
或许这就是正统语言与脚本的差异吧!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-22 09:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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