美文网首页零基础学编程程序员架构算法设计模式和编程理论
0013 人挪活,树挪死,数据类型该换就得换

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

作者: 学哥量化交易学习 | 来源:发表于2017-01-20 13:01 被阅读106次

上节课作业

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列

注意最后一排有空位

往期教程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

作者简介

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

相关文章

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

    上节课作业 1. 继续改造上面的星座判断程序,日期判断也用list实现,代码更简洁 主要的思路,是将1到12月的每...

  • 树挪死,人挪活

    人生最痛苦的事是什么,不是我爱你,你却不知道我是谁,而是因为缺钱,眼睁睁的看着别人买走那样自己看中的东西。 人的一...

  • 人挪活,树挪死

    昨天是教研活动,有两个人讲,一个杜老师,一个肖老师,杜老师讲课讲的不错,自己成功的从他的授课里面了解了复习课思路,...

  • 树挪死,人挪活

    今天单位冬训,平时忙于各自的工作,很多久违的同事难得见面,免不了客气寒暄一番。大家各有各的辛苦,这一年都不容易。谈...

  • “人挪活,树挪死”

    功夫不负有心人,每个人有付出就有收获。前些年同事A,在学校教语文课,常常会与学生发生冲突。那些年,一方面可能...

  • 树挪死、人挪活

    文/明日之月 中午过去吃饭的时候,发现食堂边上一颗灰灰树杆,树叶早已掉光。边一片都还是绿色、茂密。 这才想起这颗树...

  • 人挪活 树挪死

    我怎么越挪越死了呢

  • 树挪死,人挪活

    三年前,因姐姐在县城小升初一事,倍受煎熬,于是心生砸钱了事之念。苦思冥想,最终决定屈服现状,欲在市里购学区房,...

  • 人挪活 树挪死

    昨天早上起来跑步,没有和平时一样到学校操场或到江边外滩跑步,而是直接跑大路上,准备从最西边跑到最东边。 这样就意外...

  • 树挪死,人挪活

    在郑州居住了十五年,13年回老家开封办厂,至今也已六七年了,从整体个人发展来说,还算满意。在郑州十几年也结交了...

网友评论

    本文标题:0013 人挪活,树挪死,数据类型该换就得换

    本文链接:https://www.haomeiwen.com/subject/tiewbttx.html