123、Python基础入门总结

学习Python的秘诀:多敲代码 + 学会使用搜索引擎

一、搭建编程环境

工欲善其事,必先利其器,要想学习一门技能,先找到一样趁手的工具,我这里推荐两种:

1)侧重项目开发:Anaconda + PyCharm

参考的书籍《Python编程从入门到实践》、《父与子的编程之旅 与小卡特一起学Python》;更多的基础语法详见菜鸟python3教程Python 2基础教程 | 菜鸟教程,如果实在弄不懂如何搭建编程环境,也没关系,学习python最重要是实践,也可以先敲代码,我这里推荐一个python2.7的在线编程环境:https://www.tutorialspoint.com/execute_python_online.php 或者python3的在线编程环境:https://www.tutorialspoint.com/execute_python3_online.php
上面Python2和Python3只需要选一个来学就好。

2)侧重数据分析:Anaconda + Jupyter notebook

我下面都会使用Anaconda + Jupyter notebook,编程环境是python3,具体的安装方法我推荐猴子老师的<u>初学python者自学anaconda的正确姿势是什么??</u><u>jupyter notebook 可以做哪些事情?</u>,更多的基础语法详见<u>菜鸟python3教程</u>和参考的书籍《Python编程从入门到实践》、《父与子的编程之旅 与小卡特一起学Python》。

二、Python的四个关键点

1、数据的基本类型

数据类型有:字符串(String)、数字(Number)、容器、布尔(Booleans)、空值(None)

(1)字符串(String)

字符串:就是一系列字符。在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号,如下所示:
1.png

(2)数值(Number)

python3中常见的数字类型为int(整数),float(浮点数),bool(布尔值),complex(复数)。
2.png

(3)容器

① 列表(List)

列表的优势在于有序且可以修改,方便查询、增加、修改和删减数据。
3.png

② 元组(Tuple)

Python的元组与列表类似,不同之处在于元组的元素不能修改。

元组使用小括号,列表使用方括号。
4.png

③ 集合(Sets)

集合是一个无序不重复元素的序列
5.png

④ 字典(Dictionary)

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中。字典的好处就是它的每一个关键字都对应一个值,就像我们查英语字典一样。
6.png

(4)布尔(Booleans)、空值(None)
7.png

2、函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。

定义函数时使用def语句:
1.png

函数不可变的数据类型和可变数据类型实例:
2.png

变量作用域:

Python的作用域一共有2种:全局作用域,局部作用域。

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。 局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
3.png

3、条件判断

条件判断中的核心都是一个值为True或False的表达式,这种表达式被称为条件测试,其主要应用就是筛选出我们要的结果,其执行过程如图所示:
1.png

4、循环

循环有两种:for循环while循环,常用的语句是for循环语句。

for循环用于针对集合中的每个元素都一个代码块,是批量处理数据,可以把容器中每一个数据都按照特定的规则进行重复处理,而while循环不断地运行,直到指定的条件不满足为止。在循环中常用到break语句和continue语句,如下实例。
1.png
2.png

Continue和break语句用于退出循环:
3.png

三、类(Class)

类: 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
1.png

四、模块和包

模块是扩展名为.py的文件,包含所有你定义的函数和变量的文件。模块可以被别的程序引入,以使用该模块中的函数等功能。

导入模块常用的一种导入方法:只需编写一条import语句并在其中指定模块名,就可在程序中使用该模块中的所有函数。

模块包括Python内置模块和第三方模块(或自己编写的模块),下面列出了我自己安装Python3的内置模块路径:
1.png

下面的代码是导入第三方模块pandas的一个演示,我以读取存放在自己电脑

D:\Python\notebook 上的一个叫 B9 USB QV数据.xlsx的文件为例:
2.png

五、常用数据结构

1、队列(queue)

队列就像在银行排队办理业务,新来的人在队列尾部加入,叫做入队。办理完业务的人从队列首部离开队列,叫做出队。

口诀:先入先出
1.png

2、栈(stack)

栈就像储钱罐,往储钱罐里丢入一枚硬币,就是入栈,后面丢入的硬币总是在最上面。

口诀:先入后出
2.png

3、排序字典OrderedDict

排序字典能够按照字典中插入key的顺序,对字典进行排序。
3.png

4、计数器Counter

Counter(计数器):用于追踪值的出现次数。
4.png

从结果中可以看出,在统计出现次数最多的3个字时,原字符串中所有标点符号都属于字符串,因此也会计算在内,可以采用切片+拼接的方法,删除poem中的标点符号再来统计:
5.png

附一张python****学习的脑图总结****:

python学习的脑图总结.jpg

附源码:


# coding: utf-8

# # 字符串(String)

# In[1]:

# 定义字符串

nameStr = '我'

gameStr = '爱吃鸡游戏'

# 将字符串合并

print('使用+将字符串合并:',nameStr + gameStr)

# In[2]:

# 用%s格式化字符串

str = '我叫%s,我会%s,还喜欢%s' % ('马云','赚钱','拍电影')

print(str)

# # 数值(Number)

# In[3]:

# 1)整形:一天有24小时

day = 24

# 2)浮点型:我用微信支付9.9元

money = 9.9

# # 容器-列表(List)

# In[4]:

'''

容器:列表(List)

'''

# 定义列表:富豪榜

nameList = ['马化腾','马云','王健林','李彦宏']

# 列表的长度

nameLen = len(nameList)

print('富豪数目:',nameLen)

# In[5]:

#1)容器操作:增加元素

nameList.append('刘强东')

print('增加一个元素',nameList)

# In[6]:

#2)容器操作:删除元素

del nameList[2]

print('删除第三个元素:',nameList)

# In[7]:

#3)容器操作:查询:使用下标索引来访问列表中的值,下标从0开始

name1 = nameList[0]

print('查询第一个元素:',name1)

# In[8]:

#4)容器操作:修改:直接指定下标的值

print('修改前第一个元素是:',nameList[0])

nameList[0] = '王思聪'

print('修改后第一个元素是:',nameList[0])

# In[9]:

# 此时列表情况

print(nameList)

# # 容器-元组(Tuple)

# In[10]:

'''

容器:元组(Tuple)是一个不能修改值的列表,用小括号标识

'''

# 定义元组:一组人名

namesTuple = ('马云','马化腾','王健林')

# In[11]:

#1)访问单个元组元素

aTuple = namesTuple[2]

print('单个元组元素:',aTuple)

#2)使用for循环访问所有元组元素

print('\n所有元组元素:')

for allTuple in namesTuple:

    print(allTuple)

# In[12]:

#3) 元组中的元素值是不允许修改的,如果修改将会报错

#namesTuple[2] = '王思聪'

#print(namesTuple)

# # 容器-集合(Sets)

# In[13]:

'''

容器:集合(Sets)是一个没有重复元素的容器

'''

# 定义集合:6家公司的股票

gafataSets = {'谷歌','苹果','Facebook','亚马逊','腾讯','阿里巴巴','阿里巴巴'}

print(gafataSets)

# In[14]:

#1)容器操作:增加

#定义一个空的集合

stockSets = set()

# 使用update增加元素

stockSets.update(['腾讯','阿里巴巴','京东'])

print(stockSets)

# In[15]:

#2)容器操作:使用discard删除

stockSets.discard('京东')

print(stockSets)

# In[16]:

#3)容器操作:查找

txBool='腾讯' in stockSets

print(txBool)

# In[17]:

#4)容器操作:修改

# 第1步:先删除

stockSets.discard('京东')

# 第2步:再添加

stockSets.update(['百度','京东'])

print(stockSets)

# # 容器-字典(Dictionary)

# In[18]:

'''

容器-字典(Dictionary)

'''

# 定义字典:点餐编号和姓名的映射关系

coffeeDic={'001':['马云',34,'拿铁','大杯'],

           '002':['马化腾',52,'卡布奇诺','中杯'],

           '003':['李彦宏',49,'摩卡','小杯'],

           '004':['刘强东',43,'拿铁','中杯']}

# In[19]:

#1)容器操作:增加

coffeeDic['005']=['王思聪',30,'摩卡','中杯']

print(coffeeDic)

# In[20]:

#2)容器操作:删除

del coffeeDic['005']

print(coffeeDic)

# In[21]:

#3)容器操作:查询,根据点餐编号查询每个人喜欢的口味

valueList = coffeeDic['001']

print(valueList)

# In[22]:

#4)容器操作:修改

print('修改之前,点餐信息:',coffeeDic['003'])

coffeeDic['003']=['李彦宏',49,'摩卡','大杯']

print('修改之后,点餐信息:',coffeeDic['003'])

# In[23]:

print(coffeeDic)

# # 布尔类型

# In[24]:

age = 10

if age == 5:

    print('判断条件为True')

else:

    print('判断条件为False')

# # 空值None

# In[25]:

age = None

if age == None:

    print('年龄是空值')

else:

print('年龄不是空值')

# # 条件判断案例

# In[1]:

# 《摔跤吧,爸爸》豆瓣评分

scoreNum=9.1

if scoreNum >=8:

    print('我要看这部电影')

else:

    print('电影太烂,不去看了')

# In[2]:

# 边界条件:逻辑判断

# 定义列表

nameList = ['王思聪','马云','王健林','马化腾']

if '王思聪' not in nameList:

    print('列表中没有叫王思聪的人')

else:

    print('列表中有个叫王思聪的人')

# In[3]:

# 多个条件判断

age = int(input('输入狗狗的年龄,按Enter键获取对应人类的年龄:'))

if age < 0:

    print('狗狗年龄不能小于0')

elif age == 1:

    print('相当于14岁的人')

elif age == 2:

    print('相当于22岁的人')

else:

    human = 22 + (age - 2) * 5

    print('相当于人类年龄',human)

# # 如何使用循环批量处理数据?

# # 案例1:抽查产品尺寸

# In[1]:

# 重复性工作

print('第1次抽查')

print('第2次抽查')

print('第3次抽查')

# In[2]:

# 使用for循环实现重复性工作

checkList = ['第1次抽查','第2次抽查','第3次抽查']

for i in checkList:

    print(i)

# In[3]:

# 使用while循环

times = 1

while times < 4:

    print('抽查次数:',times)

    times += 1

# # 案例2:清洗GAFATA股票数据

# In[4]:

'''

定义字典:6家公司(GAFATA)的股票

key是公司名称,value是股票代码

'''

gafataDic = {'谷歌':'GOOGLE','苹果':'Apple','Facebook':'fb',

             '亚马逊':'amzn','腾讯':'HK:00700','阿里巴巴':'baba'}

# 将股票代码全部大写

for key,value in gafataDic.items():    # items()返回一个键-值对列表

    # 对股票代码转换成大写

    newvalue = value.upper()

    # 将转换后新的股票代码赋值给key

    gafataDic[key] = newvalue

print(gafataDic)

# # continue用于跳出当前循环

# In[5]:

for key,value in gafataDic.items():

    if(key=='苹果'):

        continue    # 停止key=='苹果'这一步,其他都执行

    print('当前公司:',key,'当前股票代码:',value)

# # break用于退出整个循环

# In[6]:

# 查找苹果公司的股票代码

number = 0

for key,value in gafataDic.items():

    number = number + 1

    if (key == '苹果'):

        print('查找',key,'公司的股票代码是:',value)

        break

    print('当前公司是:',key,'当前股票代码',value)

# # 如何自定义函数?

# In[1]:

'''

定义函数

函数的功能:求出两个数相乘的结果

输入:x,y是两个要相乘的数

输出:两个数相乘的积

'''

def mul(x,y):

    z = x * y

    return z

# # 如何使用函数?

# In[2]:

'''

由上面自定义函数可知:

只需要给函数add()提供两个参数,

即可求出它们的积

'''

a = 2

b = 3

c = mul(a,b)

print('2*3=',c)

# # 函数参数:不可变数据类型

# 字符串、数字,元祖这3种是不可变数据类型,其他的都是可变数据类型

# In[3]:

# 定义函数:改变数据的值

def changeIn(a):

    a = a + 1

    return a

'''

使用函数:

参数是不可变的数据类型(字符串、数字、元组)

传递的只是该数据类型的值(相当于复制一份)

'''

b = 1

print('调用函数之前b的值=',b)

c = changeIn(a=b)

print('调用函数之后b的值=',c)

# 从结果看出,调用函数前后的值虽然不同,但数据类型不变都是整形

# # 函数参数:可变数据类型

# In[4]:

# 定义函数:改变字典的值

def changeDic(inputDic):

    inputDic['校花'] = ['奶茶妹妹']

    return inputDic

'''

使用函数

参数是可变数据类型:

传递的是该变量的引用地址

'''

nameDic = {'阿里巴巴创始人':'马云','京东CEO':'刘强东'}

print('调用函数之前的字典:',nameDic)

changeDic(inputDic=nameDic)

print('调用函数之后的字典:',nameDic)

#  # 变量作用域

# Python的作用域一共有2种:全局作用域,局部作用域。

# 定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。 局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。

# In[5]:

# 变量作用域

def aStr():

    aStr = '他强任他强,清风拂山岗,他横任他横,明月照大江.'

    numaStr = len(aStr)  # len()统计字数

    print(numaStr)

aStr()             # aStr为全局变量

print(numaStr)     # numaStr为局部变量,只能在函数aStr()内部使用

# ## 类的使用

# In[1]:

# 创建类

class User():

    """一次模拟问候用户的尝试"""

    def __init__(self,name,sex,age):

        """初始化属性name,sex,age"""

        self.name = name

        self.sex = sex

        self.age = age

    def describe_user(self):

        """描述用户的方法"""

        print(self.name + ' ' + self.sex + ' ' + str(self.age) + '岁')

    def greet_user(self):

        """问候用户的方法"""

        print(self.name + '您好!吃了么?')

# In[2]:

# 根据类创建实例并调用类的方法

ma = User('马云','男',54)

ma.describe_user()

# In[3]:

ma.greet_user()

# # 什么是模块

# # Python内置模块使用

# In[1]:

'''

Python内置模块

'''

# 第1步引入模块

import sys

# 使用模块中的函数、属性

pathList = sys.path

print('Python路径为: \n',pathList)

# # 第三方模块使用

# In[2]:

'''

使用第三方模块:pandas

pandas是数据分析工具

'''

# 引入模块

import pandas as pd

# In[3]:

#文件路径(在本地运行时替换成文件实际路径)

fileNameStr = 'D:\\Python\\notebook\\B9 USB QV数据.xlsx'

# In[4]:

'''

pandas的ExcelFile类支持读取存储在

Excel2003(或更高版本)中的表格型数据

通过parse读取到DataFrame

'''

# 导入excel文件

xl = pd.ExcelFile(fileNameStr)

sizeDf = xl.parse('Sheet1')

# In[5]:

print(sizeDf)

# ## 介绍Python的collections包,了解常用的数据结构

# ## 队列(queue)

# 队列就像在银行排队办理业务,新来的人在队列尾部加入,叫做入队。办理完业务的人从队列首部离开队列,叫做出队。

# 口诀:先入先出

# In[1]:

#导入collections包

from collections import deque

# In[2]:

# 定义队列:给排队的人编号

queue = deque(['001','002','003','004','005'])

# In[3]:

# 入队:新来一人在队尾排队

queue.append('006')

print(queue)

# In[4]:

# 出队:从队列头部删除一个元素

queue.popleft()

# In[5]:

# 此时队列的情况

print(queue)

# # 栈(stack)

# 栈就像储钱罐,往储钱罐里丢入一枚硬币,就是入栈,后面丢入的硬币总是在最上面。

# 口诀:先入后出

# In[6]:

# 定义栈: 浏览个人知乎主页顺序

stack = deque(['知乎动态','知乎回答','知乎文章'])

# In[7]:

# 入栈:在栈顶加入元素

stack.appendleft('知乎专栏')

print(stack)

# In[8]:

# 从栈底删除元素

stack.pop()

print(stack)

# # 排序字典OrderedDict

# In[9]:

'''

OrderedDict:按照插入key的顺序,对字典进行排序

'''

from collections import OrderedDict

# In[10]:

# 定义有序字典

gafataOrDic = OrderedDict({'谷歌':'GOOGLE','苹果':'Apple','Facebook':'fb',

                           '亚马逊':'amzn','腾讯':'HK:00700','阿里巴巴':'baba'})

gafataOrDic

# # 计数器Counter

# In[11]:

'''

计数器

'''

from collections import Counter

poem = '花舞花落泪,花开花瓣飞。花开为谁谢,花谢为谁悲。'

cDict = Counter(poem)

cDict['花']   # 统计'花'字出现了几次

# In[12]:

# 统计出现次数最多的3个字

cDict.most_common(3)

# In[13]:

# 采用切片+拼接的方法,删除poem中的标点符号

poem2 = poem[:5] + poem[6:11] + poem[12:17] + poem[18:23]

print('poem2: ',poem2)

# In[14]:

# 再统计出现最多的3个字

c2Dict = Counter(poem2)

c2Dict.most_common(3)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容