鱼C论坛

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

[已解决]第16课 序列 课后题的2个疑问

[复制链接]
发表于 2020-3-7 14:54:08 | 显示全部楼层 |阅读模式

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

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

x
1、补写代码,为什么要加入 IsFind 变量?
  1. name = input('请输入待查找的用户名:')
  2. score = [['迷途', 85], ['黑夜', 80], ['小布丁', 65], ['福禄娃娃', 95], ['怡静', 90]]
  3. IsFind = False      [color=Red][b]#为什么要引入这个变量?而不是直接在 for 循环中,if 后加 else? [/b][/color]

  4. for each in score:
  5.     if name in each:        
  6.         print(name + '的得分是:', each[1])
  7.         IsFind = True
  8.         break
  9.    
  10. if IsFind == False:
  11. print('查找的数据不存在!')
复制代码


我的这种写法,自己运行没有发现问题,不知道是不是有我没发现的bug,请大佬指导:
  1. name = input('请输入待查找的用户名:')
  2. score = [['迷途',85],['黑夜',80],['小布丁',65],['福禄娃娃',95],['怡静',90]]

  3. for each in score:
  4.     if name in each[0]:
  5.         print(name + '的得分是:',each[1])
  6.         break
  7.     else:
  8.         print('查找的数据不存在!')
  9.         Break
复制代码



2、改写sum的问题,为什么 each 不能用 isdigit 判断呢?这里老报错:
  1. tuple1 = [1,2,3,'a',5,6]
  2. n = 0
  3. sums = 0

  4. for each in tuple1:
  5. if not each.isdigit():    #错误提示:'int' object has no attribute 'isdigit'
  6.         continue
  7.     else:
  8.         sums = sums + tuple1[n]
  9.         n += 1
复制代码

最佳答案
2020-3-7 15:21:52
miusa 发表于 2020-3-7 15:20
第二还是有点不太明白,isdigit()是只能用于序列么?tuple里的元素,是str 还是 int?单个元素只能用type ...

只有字符串有 isdigit() 。

  1. >>> '1'.isdigit()
  2. True
  3. >>> 1.isdigit()
  4. SyntaxError: invalid syntax
  5. >>> [1, 2, 3].isdigit()
  6. Traceback (most recent call last):
  7.   File "<pyshell#2>", line 1, in <module>
  8.     [1, 2, 3].isdigit()
  9. AttributeError: 'list' object has no attribute 'isdigit'
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-7 15:02:08 | 显示全部楼层
1,isFind用于标记是否被找到。
2,那是字符串的方法,不是int的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 15:05:33 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-7 15:11 编辑
  1. for each in score:
  2.     if name in each[0]:
  3.         print(name + '的得分是:' , each[1])
  4.         break
  5.     else:
  6.         print('查找的数据不存在!')
  7.         Break
复制代码

        你的代码确实有大 BUG !
        判断用户名存在可以在循环内解决,但是,判断用户名不存在却不能在循环内解决,必须是在枚举、查询过列表中所有的用户名之后,也就是循环完以后才能下结论。
  1. f = False
  2. for each in score:
  3.     if name in each[0]:
  4.         print(name + '的得分是:' , each[1])
  5.         f = True
  6.         break
  7. if not f:
  8.         print('查找的数据不存在!')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 15:16:43 | 显示全部楼层
jackz007 发表于 2020-3-7 15:05
你的代码确实有大 BUG !
        判断用户名存在可以在循环内解决,但是,判断用户名不存在却 ...

懂了!感谢大神!
第二个问题呢……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 15:18:10 | 显示全部楼层
miusa 发表于 2020-3-7 15:16
懂了!感谢大神!
第二个问题呢……

只有字符串有 isdigit() 方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 15:20:12 | 显示全部楼层
qiuyouzhi 发表于 2020-3-7 15:02
1,isFind用于标记是否被找到。
2,那是字符串的方法,不是int的

第二还是有点不太明白,isdigit()是只能用于序列么?tuple里的元素,是str 还是 int?单个元素只能用type判断么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 15:21:52 | 显示全部楼层    本楼为最佳答案   
miusa 发表于 2020-3-7 15:20
第二还是有点不太明白,isdigit()是只能用于序列么?tuple里的元素,是str 还是 int?单个元素只能用type ...

只有字符串有 isdigit() 。

  1. >>> '1'.isdigit()
  2. True
  3. >>> 1.isdigit()
  4. SyntaxError: invalid syntax
  5. >>> [1, 2, 3].isdigit()
  6. Traceback (most recent call last):
  7.   File "<pyshell#2>", line 1, in <module>
  8.     [1, 2, 3].isdigit()
  9. AttributeError: 'list' object has no attribute 'isdigit'
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 15:23:00 | 显示全部楼层
miusa 发表于 2020-3-7 15:20
第二还是有点不太明白,isdigit()是只能用于序列么?tuple里的元素,是str 还是 int?单个元素只能用type ...

不是,只能用于字符串,就是有引号的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 15:26:58 | 显示全部楼层
zltzlt 发表于 2020-3-7 15:21
只有字符串有 isdigit() 。

懂了,感谢大佬~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-7 15:28:09 | 显示全部楼层
qiuyouzhi 发表于 2020-3-7 15:23
不是,只能用于字符串,就是有引号的

明白了,感谢~(我第二次感叹为什么论坛只能设一个最佳答案)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-7 15:40:46 | 显示全部楼层
str.isdigit()方法只能判断字符串中的内容是否为纯数字,如果你想用这个方法的话,可以把第6行代码改为
  1. if not str(each).isdigit():
复制代码
,将数字改为字符串就可以用.isdigit()方法了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 18:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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