鱼C论坛

 找回密码
 立即注册
查看: 2993|回复: 0

[技术交流] 第16讲习题代码以及分析

[复制链接]
发表于 2014-7-29 01:29:28 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 mumudontcry 于 2014-8-4 18:41 编辑

第一行喂@小甲鱼 ,第二行开始
题目我还是不说了(免责声明:要先好好看小甲鱼的好不啦,全让我说了,人家干什么去,再说把题目弄过来,小甲鱼的10鱼币就赚不了啦)
惯例,先说说小甲鱼的答案,如图,随便测试一个数据……
(测试个毛啊!居然用没有讲过的函数)
文字题小甲鱼分析得很清楚,我就捡代码说
以下是我的代码以及分析,我的代码跟小甲鱼的思路不同,喜欢哪种风格你们自己选,话说小甲鱼又在视频和习题里掉节操了有木有
首先是第4题,嗯……我觉得小甲鱼画的不好看,黑色的是我画的(我用尽毕生的节操绘画功力为小伙伴们献上这个巨作),如图,要求是把遮挡住的部分填上,当时我看到这个就各种脑补,绞尽脑汁才做出来:
然后是我的代码(红色
e = input("请输入待查找的用户名:")
score = [["迷途",85],["黑夜",80],["小布丁",65],["福禄娃娃",95],["怡静",90],["木木",101]]
for each in score:
    if each[0] == name:
        print(name + "的得分是:",each[1])
        break
if each[0] != name:
    print("查找的数据不存在!")

小甲鱼的:
name = input('请输入待查找的用户名:')
score = [['迷途', 85], ['黑夜', 80], ['小布丁', 65], ['福禄娃娃', 95], ['怡静', 90]]
IsFind = False

for each in score:
    if name in each:
        print(name + '的得分是:', each[1])
        IsFind = True
        break

if IsFind == False:
    print('查找的数据不存在!')


分析:小甲鱼在这里用了一个IsFind去判断输入的字符串是否在列表score里,而我的直接是一个判断这个字符串是否在列表中。我的理由是
1、假如输入的字符串在列表中,那么最后一个if肯定不会执行,即只会输出得分
2、假如输入的字符串不在列表中,那么for语句循环出来之后,each[0]的位置其实就落在了score的最后一个元素:木木(101分最高哦)上,这个时候看似if是多余的,可以去掉的,但是这个if的目的不是为了判断没找到的时候输出“不存在”,而是控制当找到的时候不输出“不存在”理解了么各位
其实这里我就是在for循环后each的位置一定在结尾做文章(如果不是在结尾,早就break了)

然后是动动手的题目,动动手里两题都用了函数,好吧,我是跟着小甲鱼的课来的,我之前没有学过python,所以不知道用函数这个东东
于是
s =0
b=[1,2,3,4,5,6,"木木么么哒",7,8,9,10]
for i in b:
        if not str(i).isdigit():
                continue
        else:
                s +=i
print(s)

我这里只是相当于判断是不是数字,因为isdigit()判断的数字范围是0~9,不包括小数点“.”
大概思路其实跟小甲鱼的一样,只是我没有用函数吧~~orz小甲鱼你欺负我们不会函数

另外,这里我顺便提一下三个bif的区别,这三个bif小甲鱼在视频以及帖子里貌似没有说到,我问了度娘,她温柔地对我说了:
isdigit(),isdecimal()和isnumeric()的区别,大家一定要记住哈
这三个在小甲鱼的列表里分别是:
isdigit(): 如果字符串只包含数字则返回True,否则返回False。
isdecimal():如果字符串只包含十进制数字则返回True,否则返回False。
isnumeric(): 如果字符串中只包含数字字符,则返回True,否则返回False。
大概看一下好像都差不多,但是以下情况:
unicode编码下
num = '1'
num.isdigit() ==True(后面用简写方式)
isdecimal():True
isnumeric():True
############
全角(指的是中文)
num = '1'时三个也是一样True
############
byte(这个我不太清楚,你们谁解释下)
num = b"1"
num.isdigit():True
num.isdecimal():AttributeError 'bytes' object has no attribute 'isdecimal'
num.isnumeric():AttributeError 'bytes' object has no attribute 'isnumeric'

就是说后两个属性错误,byte对象没有这两个属性
############
罗马数字(OMG!)
num = "IV"
num.isdigit():True
num.isdecimal():False
num.isnumeric():True

13认得出是罗马数字,而2认不出来
############
汉字
num = "四"
num.isdigit():False
num.isdecimal():False
num.isnumeric():True

————————————————————————————
总结就是:
isdigit()
True:Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字
False:汉字数字
不会出现错误
isdecimal()
True:Unicode数字,,全角数字(双字节)
False:罗马数字,汉字数字
报错:byte数字(单字节)

isnumeric()
True:Unicode数字,全角数字(双字节),罗马数字,汉字数字
False:无
报错:byte数字(单字节)


以上虽然我是百度然后一点一点复制加自己理解(少部分)过来的,但是我也在复制的过程中加深了印象,你们尽量多看看,全部一起复制很快就忘了的

个人感觉:
看isdigit()的范围比较广,而且不会报错,比另外两个好用一点(谁都不想看到红色的报错提示)。isnumeric()和isdigit()范围都差不多,可毕竟人家可以认识中文数字
从定义上也可以理解,isdigit()指的是数字,而isnumeric()指的是数字字符,像中文“五二零壹三一肆”这种的当然不能算是数字


最后:累屎了,继续跳下一个坑~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
点击
当没节操甲鱼遇上傲娇笨笨的木木
查看我的淘帖,喜欢就点“订阅”吧


QQ截图20140729005234.jpg

本帖被以下淘专辑推荐:

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 13:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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