0013 人挪活,树挪死,数据类型该换就得换

0013 人挪活,树挪死,数据类型该换就得换_第1张图片

上节课作业

1. 继续改造上面的星座判断程序,日期判断也用list实现,代码更简洁

主要的思路,是将1到12月的每个月的日期最大天数放到list中,可以用month-1作为序号直接取出用于判断

修改后的代码如下:

0013 人挪活,树挪死,数据类型该换就得换_第2张图片

大家如何按照以前的要求测试了各种情况的话,会发现这个程序有错误,请大家找出来并修改正确,大家就当参加面试做题目一样要求自己。

2. 输入邮政编码前2位数字判断输出是哪个省份

程序逻辑提示:

去网上搜索一个邮政列表,里面是关于邮政编码前2位各自对应的省份名称,然后参考上面的星座判断程序编写,注意用到list然后用for循环。

网上搜索到每个省份的邮政编码,例如北京是10,上海是20,等等

将这些信息作成2个list,里面元素个数相同,postcodes存放数字10,20等,provinces存放省份名称北京,上海等

然后输入一个邮政编码数字

循环外面存放一个变量index用于记录数组序号

然后对postcodes用for进行循环,循环里面判断输入的邮政编码是否等于postcodes元素数据,如果相等,则根据序号去访问provinces的元素,记录数据到变量value

如果value有值,则输出,否则输出邮政编码不正确

代码如下:

0013 人挪活,树挪死,数据类型该换就得换_第3张图片

这里注意,一行代码太长,要拆分的话,用\符号,下面的行前面可以缩进也可以不缩进,缩进的话看起来更舒服

结果如下:

0013 人挪活,树挪死,数据类型该换就得换_第4张图片

从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)

例如:

0013 人挪活,树挪死,数据类型该换就得换_第5张图片

可以看到,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,如果不正确,请再次修改代码

代码如下:

0013 人挪活,树挪死,数据类型该换就得换_第6张图片

二维列表

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位数字和对应的省份名称的时候,要很小心的检查,如果漏写了一个,就容易匹配不上,如果改成二维数组就不容易出错了,并且代码也简洁多了。

代码如下:

0013 人挪活,树挪死,数据类型该换就得换_第7张图片

课后作业

1. 找到邮政编码里面数字最多的那个省份的名字和共有几个数字,结果应该是四川省和数字4

2. 定义如下的一个座位表,然后输出座位表的每一个人的名字,同时输出是第几排第几列

0013 人挪活,树挪死,数据类型该换就得换_第8张图片

右下角张鑫晨为第1排第1列

注意最后一排有空位


往期教程

0001 零基础的小白能学会编程吗?

0002 真的吗,700元的电脑可以学会编程?

0003 十分钟组装一台电脑开始编程

0004 如何编写人生的第一行代码helloworld

0005 键盘打字如何练成像黑客一样的飞速

0006 编程入门python语言之加法计算器

0007 编程入门python语言之四则运算器

第一部分前7课小结和课程规划说明及微信群主招募

0008 加减乘除也会算错?还要编写程序测试?

0009 如何编写程序计算所属星座,一看就懂

0010 人生就像死循环,只要不退出就要继续运行

0011 迷人的斐波拉契数列,数学到极致就是美,编程同样如此

0012 优秀的程序员就是用简洁优美的代码实现同样的功能

因为教程是系列教程,前后关联性非常强,请大家按照公众号的发布时间先后次序进行阅读。

作者简介

学哥,二十年编程经验,历任程序员,资深程序员,技术经理,项目经理,产品经理,系统架构师,IT总监。爱好篆刻,阅读,美食。


你可能感兴趣的:(0013 人挪活,树挪死,数据类型该换就得换)