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列
注意最后一排有空位