学哥量化交易学习
持续学习,提高认知,磨炼技艺,从零基础学编程并跨过量化程序交易的大门。
 返回首页
 
 
0013 人挪活,树挪死,数据类型该换就得换
作者:学哥
发布时间:2017-1-20
上节课作业
1. 继续改造上面的星座判断程序,日期判断也用list实现,代码更简洁 主要的思路,是将1到12月的每个月的日期最大天数放到list中,可以用month-1作为序号直接取出用于判断 修改后的代码如下: 大家如何按照以前的要求测试了各种情况的话,会发现这个程序有错误,请大家找出来并修改正确,大家就当参加面试做题目一样要求自己。 2. 输入邮政编码前2位数字判断输出是哪个省份 程序逻辑提示: 去网上搜索一个邮政列表,里面是关于邮政编码前2位各自对应的省份名称,然后参考上面的星座判断程序编写,注意用到list然后用for循环。 网上搜索到每个省份的邮政编码,例如北京是10,上海是20,等等 将这些信息作成2个list,里面元素个数相同,postcodes存放数字10,20等,provinces存放省份名称北京,上海等 然后输入一个邮政编码数字 循环外面存放一个变量index用于记录数组序号 然后对postcodes用for进行循环,循环里面判断输入的邮政编码是否等于postcodes元素数据,如果相等,则根据序号去访问provinces的元素,记录数据到变量value 如果value有值,则输出,否则输出邮政编码不正确 代码如下: 这里注意,一行代码太长,要拆分的话,用\符号,下面的行前面可以缩进也可以不缩进,缩进的话看起来更舒服 结果如下:
从1开始到1000,统计包含数字2的数字的总个数
来做一个新的题目,从1开始到1000,统计包含数字2的数字的总个数 程序思路: 首先设置一个变量用于累计含2数字总个数 首先有一个循环,从1循环到1000,可以用while循环,能否用for循环呢 然后,针对循环里面的每一个数字,判断该数字是否包含了数字2 如果包含,则累计总个数加1 最后打印输出累计总个数 那么关键点在于如何判断该数字是否包含了数字2 人脑思考的时候,肯定是依次判断数字的每一位数字,是否等于2,如果等于则认为包含了 但是计算机程序在这里要注意了,前面用的循环是数字类型,数字类型要判断每一位是否等于2 要对数字进行10,100,1000...等进行整除计算,这样做起来有点复杂 如果把数字转换为字符串类型,然后遍历字符串的每一位,判断是否等于字符串"2",就方便很多 那么,这个问题我们先放一放,先学习一下数据类型转换的知识再来做题
标准数据类型
在内存中存储的数据可以有多种类型 例如年份用数字来存储,名称用字符串来存储 Python有五个标准的数据类型: Numbers(数字) String(字符串) List(列表) Tuple(元组) Dictionary(字典) 前面我们已经接触过的是Numbers,String,List Numbers(数字)支持四种数字类型: int(有符号整型) long(长整型) float(浮点数) complex(复数) 整数大家能理解,浮点数就是小数,例如5.6,3.1415926等等 长整型主要是在用到比较大的整数的时候用到 String(字符串)是由数字,字母,下划线组成的一串字符 一般标记为 s="a1a2...an" 字符串类似于一个由字符组成的list,可以用下标序号访问其中的元素字符 例如: >>> s="Hello World!" >>> print s[0] H >>> print s[6] W 目前我们暂时先了解这么多,在以后具体用到的时候再去网上搜素用法即可
数据类型转换
如果要将一个数字转换为字符串,应该这么做: str(x) 例如: 可以看到,x为整数,访问x[0]会出错 用str转换为字符串后,访问s[0]就能得到结果 用函数len(s)可以取得字符串的总长度 同样可以用for针对字符串进行循环遍历 那么,是否还有其它类型转换函数呢 是的,比如我们之前用的int(input("month:")),这里的int()函数就是将输入转换为整数 其它的还有一些,具体大家可以在用到的时候再去网上搜索
函数range
前面的问题,能否用for循环呢 可以的,但是要定义一个list从1到1000,好像太多了,没法写出来 那么有没有一个简便的函数生成这样的list呢 使用函数range来生成一个list,例子如下: #代表从1到5(不包含5) >>> range(1,5) [1, 2, 3, 4] #代表从1到5,间隔2(不包含5) >>> range(1,5,2) [1, 3] #代表从0到5(不包含5) >>> range(5) [0, 1, 2, 3, 4] #从1到1000,包含1000 >>> range(1,1001)
统计代码
经过之前的知识储备,能够将关键点梳理清楚,大家可以尝试自己先去写代码,不要往下看: 正确的结果应该是271,如果不正确,请再次修改代码 代码如下:
二维列表
list里面的元素数据,也可以是list,也就是list里面套list,这个人就是二维列表 例如 list=[[1,2,3],[4,5,6]] 座位表=[["第1排第1列","第1排第2列","第1排第3列"],["第2排第1列","第2排第2列","第2排第3列"],["第3排第1列","第3排第2列"]] >>> print 座位表[0][2] 第1排第3列 >>> print 座位表[2][1] 第3排第2列 二维列表在某些情况下很有用 比如前面的邮政编码的代码,在输入邮政编码前2位数字和对应的省份名称的时候,要很小心的检查,如果漏写了一个,就容易匹配不上,如果改成二维数组就不容易出错了,并且代码也简洁多了。 代码如下:
课后作业
1. 找到邮政编码里面数字最多的那个省份的名字和共有几个数字,结果应该是四川省和数字4 2. 定义如下的一个座位表,然后输出座位表的每一个人的名字,同时输出是第几排第几列 右下角张鑫晨为第1排第1列 注意最后一排有空位
学哥量化交易学习团队
   致力于:持续学习,提高认知,磨炼技艺,持续输出高质量的教程和课程,帮助更多的人从零基础学编程并跨过量化程序交易的大门。
零基础学编程Python入门课程
课程包含以下内容:
1.图文教程《零基础学编程入门-从Python到Web网站.pdf》,学哥原创版权,共计1024页高清图文教程。
2.视频课程《零基础学编程Python入门》,学哥原创版权,共计24节课45个高清视频。
3.视频教程《玩转魔方》,学哥原创版权,可以送给孩子,共计16个高清视频。
4.图文教程《如何寻找编程相关的电子书下载资源.pdf》。
5.加入学哥编程学习辅导QQ群在线交流。

客服 10:00-17:00
QQ: 44556287
微信公众号
学哥量化交易学习
 
  微信公众号:学哥量化交易学习     QQ群1:603559164    客服QQ号:44556287
工信部备案/许可证编号:沪ICP备15050545号-4