Python 基础学习

有过语言基础不多介绍,反正Python和Java,C++等一样,是一门计算机语言。Python的特色体现在简洁易读,比较接近语言习惯,如 print('Hello World')直接明了解释为打印Hello World。Python还广泛地用于数据采集(爬虫等),这也是作者学习Python的第一理由。

本篇博客学习开发环境和基础语法,并在本篇结束后实现一个小例子。

  1. Windows下Python开发环境搭建
  • 安装Python3

Python是一种面向对象的解释型计算机程序设计语言,所以运行Python需要编译器和解释器。和其他解释型语言一样,我们需要下载Python安装包。官网地址:https://www.python.org/。这个安装包分2.x和3.x版本,我们选用最新的3.7来做开发。具体步骤:在download下选择Windows,在下载页面里选择你想要的Python版本下载。如3.7.4(下图),选择executable installer下载为exe,运行安装后可自动设置环境变量。

  • 安装Anaconda

另外,为了方便Python包管理和更新,我们也下载一个管理软件Anaconda(Anaconda里面包含了conda、Python等180多个科学包及其依赖项)。我是原先有3.6版本需要更新,当然你也可以直接在Anaconda里下载配置Python3.7,这样相关关联包也能保持一致。Anaconda下载地址:https://www.anaconda.com/distribution/。选择Anaconda 3版本,根据提示下载并安装。安装完成后在命令行输入 conda --version ,显示版本号即表示安装并配置环境变量成功。我的是conda 4.7.12。

Anaconda可以创建虚拟环境提供Python开发,像我需要增加python3.7的开发环境,可以这样操作:输入以下命令

conda create -n learn python=3.7

activate learn

上面的截图为命令运行部分截图,可以看见安装了pip、sqlite、python3.7等包。

activate learn表示激活该环境。

以下为Anaconda常用命令

conda create -n learn python=3 // 创建一个名为learn的环境并指定python版本为3(的最新版本)
conda remove -n learn --all // 删除learn环境及下属所有包
conda env list      //显示Anaconda下所有环境
activate 环境名     //激活(切换)环境
conda list          // 列出当前环境的所有包
conda install 包名  //安装第三方包  如conda install requests
conda remove  包名  //卸载第三方包 如conda remove requests
conda update  包名 //更新requests包 如conda update requests  
  • Pycharm 安装

Pycharm 是目前 Python 语言最好用的集成开发工具。它有社区版和专业版(收费),我们选择社区版来进行基础开发。官网下载地址:https://www.jetbrains.com/pycharm/download/#section=windows 。按提示安装,插件页可以只选择MarkDown 来install,然后启动。

Pycharm中就可以配置上文的Anaconda环境。选择settings——Project —— Project Interpreter。在右侧Project Interpreter条目里点击设置按钮,下拉选择Add,弹出 Add Project Interpreter窗口。如下图:

Virtualenv Environment:在New enviroment里选择 Base Interpreter为刚刚上一步建立的learn环境,路径为Anaconda路径下env文件夹。如D:\software\anaconda\envs\learn\python.exe,这就表示绑定了learn虚拟环境来开发。

*勾选Inherit global site-packages可以使用base interpreter中的第三方库,不选将和外界完全隔离;

*勾选Make available to all projects可将此虚拟环境提供给其他项目使用。选择勾选上,使得新建项目不必在重新下载第三方包,可以根据实际情况选择。

Conda Environment:选择Existing environment  指定Interpreter为learn目录下python.exe。

  • 完成

直到完成这里,我们才算是配置好了一套新的python3.7的开发环境。

 

   2.      Python 语法基础

语法的部分可以参考菜鸟教程或其他基础教程学习,这里简单记录下。

  • 数据类型和变量

Python 中的变量赋值不需要类型声明,且在使用前都必须赋值,变量赋值以后该变量才会被在内存中创建。等号(=)用来给变量赋值。

基本数据类型分为数字、字符串str、列表list、字典dict、元祖tuple、集合set、布尔值。数据类型又可分为可变数据类型和不可变数据类型。

可变数据类型:在id不变的情况下,值value可以发生改变,如列表、字典、元祖、集合

不可变数据类型:值value改变时id也会发生改变,如数字、字符串、布尔

上一段代码 

# 数字类型 分为整型int和浮点型float
a = 1  # int型赋值
b = c = 1  # b=1,c=1 同步赋值
e, f = 2, 3  # e=2,f=3 分开赋值
weight = 65.5  # float类型
print(a, b, c, e, f, weight)


# 字符串类型
msg1 = 'Hello'
msg2 = 'World'
msg3 = msg1 + ' ' + msg2
print(msg3)  # 打印
name = input("What is your name?")  # 输入
print('Hello', name)

#布尔值:布尔值只有两种——True和False,布尔值的作用就是用来判断。
ok = True
print(ok)

# 列表list: 包含在[ ]内,内部的元素可以是字符串、数字、列表、元祖、集合、字典,各自以逗号隔开
list1 = [3, 2, 1, 'hello']
list1.append('world')  # 增加元素 输出为[3,2,1,'hello','world']
list1.remove(3)  # 删除元素 输出为[2,1,'hello','world']
del list1[2]  # 删除元素 [1,'hello','world']
list1[0] = 8  # 修改元素的值,索引从0开始 [8,'hello','world']
print(list1)

# 字典dict:定义在{ }内,逗号分割,每一个元素的形式都是key:value 无序
dic1 = {'name': 'jack', 'country': 'china', 'age': 17, 'hobby': ['girls', 'money', 'delicious food']}
dic1['sex'] = 'male'  # 增加字典元素
del dic1['country']  # 删除字典元素
dic1['age'] = 18  # 赋值
print(dic1)

#元祖tuple:可以存放多个值。元祖是不可变类型,写法与列表相似,只是将[ ] 改为( )
t=(1,[1,3],'sss',(1,2)) #t=tuple((1,[1,3],'sss',(1,2)))
print(type(t))

还有一个重要类型是集合Set ,Set是一个无序且不重复的元素集合,用逗号分隔,元素必须是不可变对象。这里也附一个Set方法大全

方法名语法格式说明举例
add()set1.add()向 set1 集合中添加数字、字符串、元组或者布尔类型>>> set1 = {1,2,3}
>>> set1.add((1,2))
>>> set1
{(1, 2), 1, 2, 3}
clear()set1.clear()清空 set1 集合中所有元素>>> set1 = {1,2,3}
>>> set1.clear()
>>> set1
set()
set()才表示空集合,{}表示的是空字典
copy()set2 = set1.copy()拷贝 set1 集合给 set2>>> set1 = {1,2,3}
>>> set2 = set1.copy()
>>> set1.add(4)
>>> set1
{1, 2, 3, 4}
>>> set1
{1, 2, 3}
difference() set3 = set1.difference(set2)将 set1 中有而 set2 没有的元素给 set3>>> set1 = {1,2,3}
>>> set2 = {3,4}
>>> set3 = set1.difference(set2)
>>> set3
{1, 2}
difference_update()set1.difference_update(set2)从 set1 中删除与 set2 相同的元素>>> set1 = {1,2,3}
>>> set2 = {3,4}
>>> set1.difference_update(set2)
>>> set1
{1, 2}
discard()set1.discard(elem)删除 set1 中的 elem 元素>>> set1 = {1,2,3}
>>> set1.discard(2)
>>> set1
{1, 3}
>>> set1.discard(4)
{1, 3}
intersection()set3 = set1.intersection(set2)取 set1 和 set2 的交集给 set3>>> set1 = {1,2,3}
>>> set2 = {3,4}
>>> set3 = set1.intersection(set2)
>>> set3
{3}
intersection_update()set1.intersection_update(set2)取 set1和 set2 的交集,并更新给 set1>>> set1 = {1,2,3}
>>> set2 = {3,4}
>>> set1.intersection_update(set2)
>>> set1
{3}
isdisjoint()set1.isdisjoint(set2)判断 set1 和 set2 是否没有交集,有交集返回 False;没有交集返回 True>>> set1 = {1,2,3}
>>> set2 = {3,4}
>>> set1.isdisjoint(set2)
False
issubset()set1.issubset(set2)判断 set1 是否是 set2 的子集>>> set1 = {1,2,3}
>>> set2 = {1,2}
>>> set1.issubset(set2)
False
issuperset()set1.issuperset(set2)判断 set2 是否是 set1 的子集>>> set1 = {1,2,3}
>>> set2 = {1,2}
>>> set1.issuperset(set2)
True
pop()a = set1.pop()取出 set1 中一个元素,并赋值给 a>>> set1 = {1,2,3}
>>> a = set1.pop()
>>> set1
{2,3}
>>> a
1
remove()set1.remove(elem)移除 set1 中的 elem 元素>>> set1 = {1,2,3}
>>> set1.remove(2)
>>> set1
{1, 3}
>>> set1.remove(4) 会报错 集合里没有4这个对象
symmetric_difference()set3 = set1.symmetric_difference(set2)取 set1 和 set2 中互不相同的元素,给 set3>>> set1 = {1,2,3}
>>> set2 = {3,4}
>>> set3 = set1.symmetric_difference(set2)
>>> set3
{1, 2, 4}
symmetric_difference_update()set1.symmetric_difference_update(set2)取 set1 和 set2 中互不相同的元素,并更新给 set1>>> set1 = {1,2,3}
>>> set2 = {3,4}
>>> set1.symmetric_difference_update(set2)
>>> set1
{1, 2, 4}
union()set3 = set1.union(set2)取 set1 和 set2 的并集,赋给 set3>>> set1 = {1,2,3}
>>> set2 = {3,4}
>>> set3=set1.union(set2)
>>> set3
{1, 2, 3, 4}

update()

set1.update(elem)添加列表或集合中的元素到 set1>>> set1 = {1,2,3}
>>> set1.update([3,4])
>>> set1
{1,2,3,4}
  • 运算符及字符串内置方法

 算术运算符

+、-、*、/、%和其他语言一样使用。

**表示次幂 如a**b表示a的b次方。

//表示取整除 如9.0/4.0 = 4.0

比较运算符:返回True或False

== 比较对象是否相等

!=(<>) 比较对象是否不相等

> 、>=、<、<=  大于..大于等于..小于..小于等于

赋值运算

=、+=、-=、*=、/=、%=、**=、//= 都是计算后赋值

逻辑运算

and、or、not 与或非

成员运算

in 、not in 包含、不包含

身份运算

is、is not 是不是引自一个对象

字符串内置方法 s='ab'

方法名语法格式说明举例
strip()s.strip()移除空白strip 
lower()s.lower()返回字符串小写格式 
upper()s.upper()返回字符串大写格式 
capitalize()s.capitalize()返回字符串首字母大写,其他字母全部小写的新字符串 
isspace()s.isspace()

判断字符串是否是空白(空格、制表符、换行符等)字符(没有任何字符

不算是空白)

>>> print(' '.isspace())
True
>>> print(''.isspace())
False

>>> print(s.isspace())
False

center()s.center(width, fillchar])

将字符串居中,左右两边使用fillchar进行填充,,使得整个字符串

的长度为width,fillchar默认为空格。如果width小于字符串的长度,

则无法填充直接返回字符串本身(不会创建新字符串对象)。


>>> print('ab'.center(4,'_'))
_ab_
>>> print('ab'.center(5,'_'))
__ab_
ljust()s.ljust(width[, fillchar])使用fillchar填充在字符串S的右边,使得整体长度为width 
rjust()s.rjust(width[, fillchar])使用fillchar填充在字符串S的左边,使得整体长度为width>>> print(s.ljust(5,'_'))
ab___
>>> print(s.rjust(5,'_'))
___ab
zfill()s.zfill(width)用0填充在字符串S的左边使其长度为width

>>> print(s.zfill(5))

000ab

count()s.count(c, start, end)

返回字符串S中子串c出现的次数

可以指定从哪里开始计算(start)以及计算到哪里结束(end)

>>> print(s.count('a')) 

1

endswith()

startswith()

s.endswith(c, start, end)
s.startswith(c, start, end)

检查字符串S是否以c结尾/开始(或元祖中一个),

返回布尔值的True和False

>>> print(s.endswith('b'))

True

>>> print('abcxyz'.endswith(('ab','xyz'))) True

find()

rfind()

s.find(c, start, end)
s.rfind(c, start, end)

搜索字符串S中是否包含子串c,如果包含,

则返回sub的索引位置,否则返回"-1" rfind表示最右边的索引

>>> print('abcxyzXY'.find('xy'))

3

>>> print('abcxyzXY'.find('Xy'))

-1

index()

rindex()

s.index(sub, start, end)
s.rindex(sub, start, end)

index()和find()一样,唯一不同点在于当找不到子串时,

抛出ValueError错误

 
replace()s.replace(old, new, count)

将字符串中的子串old替换为new字符串

如果给定count,则表示只替换前count个old子串

找不到old则返回原字符串

>>> print('abcxyzoxy'.replace('xy','XY')) abcXYzoXY

>>> print('abcxyzoxy'.replace('xy','XY',1)) abcXYzoxy

 

还有strip()移除、join连接、split()分割、len()长度等,详细可查阅官方文档https://docs.python.org/3/library/stdtypes.html#string-methods

  • 条件控制及循环控制

这里先先了解Python的缩进原则:

顶级代码必须顶行写,即如果一行代码本身不依赖于任何条件,那它必须不能进行任何缩进
同一级别的代码,缩进必须一致
官方建议缩进用4个空格(一般在开发工具里会自动排版)

上一段代码:

# 条件控制
score = input('>>: ')
score = int(score)
if score >= 90:  # 可以使用or和and叠加条件 如score >= 90 and score<=100
    print('A')
elif score >= 80:
    print('B')
elif score >= 70:
    print('C')
elif score >= 60:
    print('D')
else:
    print('E')

# while循环
count = 0
while count < 10:
    print(count)
    count += 1
    if count == 5:
        break;  # break:跳出本层循环 continue:跳出本次循环
# while True: #死循环
#    print('ok')
# while 1: #死循环
#    print('ok')

# for循环
info_dic = {'name': 'jack', 'age': 18, 'number': '13567884563'}
albums = ('Poe', 'Gaudi', 'Freud', 'Poe2')
years = (1976, 1987, 1990, 2003)
msg1 = 'hello'
line, row = 2, 3
for row in range(1, 10):
    # print默认end='\n',即会自动回车,这里设置end=' '就不会自动换行了
    print('%s*%s=%s' % (line, row, line * row), end=' ')  # 占位符:%s(可以为字符串占也可以为数字),%d(只能作为数字的占位符)
for k in info_dic:  # 循环取字典的key
    print(k)
for k in info_dic.values():  # 循环取字典的value
    print(k)
for i in range(len(msg1)):  # range是范围,即当i在msg1的长度范围以内时执行以下代码
    print(i, msg1[i])  # 输出的是元素的位置序数和元素
for album in sorted(albums):  # sorted:排序
    print(album)
for album in reversed(albums):  # reversed:翻转
    print(album)
  • 文件处理

后面谈到网络下载会再讲述这个,这里简单写个代码新建并读取文件

# 文件处理
#r ,只读模式:默认模式,文件必须存在,不存在则抛出异常
# w,只写模式:不可读,不存在则创建,存在则清空内容
#"b"表示以字节的方式操作 如wb表示写入字节
f=open('new.txt','w',encoding='utf-8')
f.write('1111111\n')
f.writelines(['22222\n','3333\n','444444\n'])
f.close()
f = open('new.txt', 'r', encoding='utf-8')
print(f.read())
print(f.readlines())
f.close()
#输出结果
#1111111
#22222
#3333
#444444

#[]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值