Python3入门1--变量、常用循环体、代码结构、代码练习

第一章 变量、常用循环体、代码结构、代码练习

第二章 列表、元组等数据结构、字符串驻留机制及字符串格式化操作

第三章 函数、面向对象、文件操作、深浅拷贝、模块、异常及捕获

第四章 项目打包、类和对象高级、序列、迭代器、生成器、装饰器

第五章 正则表达式、json、logging日志配置、数据库操作、枚举、闭包、匿名函数和高阶函数、time、datetime

第六章 Socket编程、多线程(创建方式、线程通信、线程锁、线程池)

简介

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。

Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

  • Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
  • Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。
  • Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
  • Python 是初学者的语言: 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏

Python 应用

  • Youtube - 视频社交网站
  • Reddit - 社交分享网站
  • Dropbox - 文件分享服务
  • 豆瓣网 - 图书、唱片、电影等文化产品的资料数据库网站
  • 知乎 - 一个问答网站
  • 果壳 - 一个泛科技主题网站
  • Bottle - Python微Web框架
  • EVE - 网络游戏EVE大量使用Python进行开发
  • Blender - 使用Python作为建模工具与GUI语言的开源3D绘图软件
  • Inkscape - 一个开源的SVG矢量图形编辑器。

环境搭建

Python3 可应用于多平台包括 Windows、Linux 和 Mac OS X。

先下载,安装,windows为例

windows-python下载地址

在这里插入图片描述

直接下载完,安装即可,记得勾选 Add to Path,不然还要再配置下环境变量。。

在这里插入图片描述

自定义安装即可,配置给所有用户可用

在这里插入图片描述

完成后,cmd到控制台

python -V # 查看版本号

运行python

  • 交互式

    cmd 下,直接 python进入交互页

    C:>python           # Windows/DOS
    
  • 命令行脚本

    python py文件即可

    **注意:**在执行脚本时,请检查脚本是否有可执行权限。

    C:>python script.py         # Windows/DOS
    
  • 集成开发 IDE (PyCharm) 破解企业版即可、或者用 VSCode

第一个Python3.x程序

查看 python版本

python -V
# 或
python --version

hello.py

创建一个hello.py文件

#!/usr/bin/python3
 
print("Hello, World!")

python命令执行

$ python hello.py

以上输出结果

Hello, World!

输出到文件中

有点类似java的io流

fi = open('D:/text.txt', 'a+') # 文件不存在时会自动创建文件 a+ 表示文件追加模式
print("hello world", file = fi)
fi.close()

Python基础

python中,一切皆是对象。

编码格式

默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件指定不同的编码:

# -*- coding: cp-1252 -*-

转义符

\ + 要实现的转移功能首字母

\n :换行

\t :一个制表位table

原字符

使字符串中的转义字符不起作用,使用方式:在字符串之前加 r或者R

注意;最后一个字符不能是一个 \ ,可以是 \\

print(r"hello\nworld")
print(R"hello\nworld")

标识符

  • 第一个字符必须是字母表中字母或下划线 _
  • 标识符的其他的部分由字母、数字和下划线组成。
  • 标识符对大小写敏感。

Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型

变量

变量有三部分组成

  • 标识,表示对象的内存地址,id(obj)可获取
  • 类型,对象的数据类型,type(obj)可获取
  • 值,对象存储的具体数据,print(obj)可打印输出

变量多次赋值后,变量会更变存储的内存地址,没有被变量指向的内存中的数据,被称之为垃圾数据,会进行数据回收

内存分析图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wTHwjybb-1648188624242)(imgs/4.png)]

多变量赋值

a = b = c = 1 # 链式赋值
a, b, c = 1, 2, "wlh" # 解包赋值
a, b, c = tuple('1', '2', '3')	==》 a,b,c = 1,2,3	#解包赋值

变量互换值

a, b = 1, 2
a, b = b, a

python保留字

and exec not
assert finally or
break for pass
class from print
continue global raise
def if return
del import try
elif in while
else is with
except lambda yield

python查看保留字

import keyword
print(keyword.kwlist)

注释

  • 单行注释:Python中单行注释以 # 开头
# 第一个注释
print("hello python")
  • 多行注释 '''或者 """
'''
第三注释
第四注释
'''
 
"""
第五注释
第六注释
"""
print ("Hello, Python!")

行与缩进

python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {}

缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数

if True:
    print ("True")
else:
    print ("False")

多行语句

Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠 ** 来实现多行语句

total = item_one + \
        item_two + \
        item_three

在 [], {}, 或 () 中的多行语句,不需要使用反斜杠 \

total = ['item_one', 'item_two', 'item_three',
        'item_four', 'item_five']

数据类型

标准数据类型

Python3 中有六个标准的数据类型:

  • Number(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Set(集合)
  • Dictionary(字典)

Python3 的六个标准数据类型中:

  • **不可变序列(3 个):**Number(数字)、String(字符串)、Tuple(元组);
  • **可变序列(3 个):**List(列表)、Dictionary(字典)、Set(集合)。

Number数字类型

python中数字有四种类型:整数、布尔型、浮点数和复数。

  • int (整数), 如 1, 只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
  • bool (布尔), 如 True,False
  • float (浮点数), 如 1.23、3E-2
  • complex (复数), 如 1 + 2j、 1.1 + 2.2j

整数类型 int

整数可以表示为二进制、十进制、八进制、十六进制

print('十进制', 188)
print('二进制', 0b10011001) # 0b开头
print('八进制', 0o176)      # 0o开头
print('十六进制', 0x1EAF)   # 0x开头

浮点数类型 float

浮点数的存储不精确,可能出现小数位数不确定的情况

解决方案: 导入decimal模块,使用Decimal()函数即可

from decimal import Decimal

print(Decimal('1.1') + Decimal('2.2'))

布尔类型 bool

取值两种,True(1)和False(0)

可以转化为整数

f1 = True
print(f1)  # 结果为 True

print(f1 + 1)  # 结果为 2

字符串(String)

  • Python 中单引号 和双引号 " 使用完全相同。
  • 使用三引号(‘’’“”")可以指定一个多行字符串。
str='''人生苦短,
我用python
'''
print(str)
  • 转义符 \。
  • 反斜杠可以用来转义,使用 r 可以让反斜杠不发生转义。 如 r"this is a line with \n"\n 会显示,并不是换行。
  • 按字面意义级联字符串,如 "this " "is " “string” 会被自动转换为 this is string
  • 字符串可以用 + 运算符连接在一起,用 ***** 运算符重复。
  • Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
  • Python 中的字符串不能改变。
  • Python 没有单独的字符类型,一个字符就是长度为 1 的字符串。
  • 字符串的截取的语法格式如下:变量[头下标:尾下标:步长]
# 转义 \n 换行
name = 'wlh\nhello'
print(name)

print('------------------使用原字符去除转义')
# 使用原字符去除转义
name = r'wlh\nhello'
print(name)

print('------------------级联字符串')
# 级联字符串
name = 'wlh''\n''hello'
print(name)

print('------------------字符串 + 运算符   用 * 表示重复')
# 字符串 + 运算符   用 * 表示重复
name = 'wlh'
print(name * 2)

print('------------------Python 中的字符串有两种索引方式')
# Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始
name = 'Python'
# 获取 'P' 两种方式
print(name[0], name[-6])

# 字符串的截取
# 变量[头下标:尾下标:步长]
# 获取 'Pyt'
print(name[0:3])

#获取 on
print(name[4:6])

数据转换函数

在这里插入图片描述

  • str()

    name = '张三'
    age = 20
    print('我叫' + name + ',今年' + str(age) + '岁')
    
  • int()

    抹零取整

    如果字符串转为int,那么字符串必须是 纯数字串,有小数也不行

    str1 = '198'
    print(type(int(str1))) # int类型
    
    f1 = 198.2
    print(int(f1))  # 值 198
    
    print(int(True)) # 输出 1
    
  • float()

    末尾.0占位

    如果字符串转为float,那么字符串必须是 数字串,可以有小数,非数字串则会报错

    in1 = 200
    in1 = float(in1)
    print(in1)  # 200.0
    

判断数据类型

  • type()
  • isinstance()
a = 111
isinstance(a, int)  # 返回True

type(a)  # 返回<class 'int'>

两者的区别:

  • type()不会认为子类是一种父类类型。
  • isinstance()会认为子类是一种父类类型

注意:Python3 中,bool 是 int 的子类,True 和 False 可以和数字相加,True1、False0 会返回True,但可以通过is来判断类型。

issubclass(bool, int)  # 判断 bool是否是 int的子类
True

True==1
True  # 返回True

True+1 # 返回2

等待用户输入 input

input用户输入后的结果类型是str,如果涉及到运算,请注意转换数据类型

用户输入后,给name赋值

name = input("请输入用户名")

a = int(input('输入一个加数'))
b = int(input('输入另一个加数'))
print(a + b)

同一行显示多条语句

Python 可以在同一行中使用多条语句,语句之间使用分号 ; 分割

import sys; x = 'wlh';

print输出

print 默认输出是换行的,如果要实现不换行需要在变量末尾加上 end=""

# 换行输出
print( x )
print( y )

# 不换行输出
print( x, end=" " )
print( y, end=" " )

导入包import 与 from…import

在 python 用 import 或者 from...import 来导入相应的模块。

将整个模块(somemodule)导入,格式为: import somemodule

从某个模块中导入某个函数,格式为: from somemodule import somefunction

从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc

将某个模块中的全部函数导入,格式为: from somemodule import *

运算符

算数运算符

以下假设变量: a=10,b=20

+ 加 - 两个对象相加 a + b 输出结果 30
- 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10
* 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200
/ 除 - x除以y b / a 输出结果 2
% 取模 - 返回除法的余数 b % a 输出结果 0 注意公式 余数=被除数-除数*商
** 幂 - 返回x的y次幂 a**b 为10的20次方, 输出结果 100000000000000000000
// 取整除 - 返回商的整数部分(向下取整 >>> 9//2 4

赋值运算符

以下假设变量a为10,变量b为20:

运算符 描述 实例
= 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
+= 加法赋值运算符 c += a 等效于 c = c + a
-= 减法赋值运算符 c -= a 等效于 c = c - a
*= 乘法赋值运算符 c *= a 等效于 c = c * a
/= 除法赋值运算符 c /= a 等效于 c = c / a
%= 取模赋值运算符 c %= a 等效于 c = c % a
**= 幂赋值运算符 c **= a 等效于 c = c ** a
//= 取整除赋值运算符 c //= a 等效于 c = c // a

赋值方式:

# 链式赋值
a = b = c = 20  # 注意,abc三个变量是指向同一块内存空间
print(a, b, c)

# 参数赋值
a += 20
print(a)

# 解包赋值
d, e, f = 10, 20, 30
print(d, e, f)

# python变量值交换(简单的一批)
h,j=10,20
h,j=j,h # 现在 h=20,j=10

比较运算符

以下假设变量a为10,变量b为20:

运算符 描述 实例
== 等于 - 比较对象是否相等(比较的是值) (a == b) 返回 False。
!= 不等于 - 比较两个对象是否不相等 (a != b) 返回 true.
<> 不等于 - 比较两个对象是否不相等。python3 已废弃。 (a <> b) 返回 true。这个运算符类似 != 。
> 大于 - 返回x是否大于y (a > b) 返回 False。
< 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。 (a < b) 返回 true。
>= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。
<= 小于等于 - 返回x是否小于等于y。 (a <= b) 返回 true。

比较对象的标识是否相同,使用 is关键字

比较对象的标识是否不同,使用 is not关键字

a, b = 10, 10 # 由于对象10已经存在,在内存中则只创建一次
print(a == b) # 比较的是变量的值是否相等(Value值) True
print(a is b) # 比较的是变量的标识是否相等(id值) True

# 以数组为例
list1 = [11,22,33]
list2 = [11,22,33]  # list1和list2是不同的对象,虽然值相同
print(list1 == list2) # 比较value  (True)
print(list1 is list2) # 比较id	 (False)
print(list1 is not list2) # 比较id	 (True)

逻辑运算符

Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20:

运算符 逻辑表达式 描述 实例
and x and y 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 (a and b) 返回 20。
or x or y 布尔"或" - 如果 x 是非 0,它返回 x 的计算值,否则它返回 y 的计算值。 (a or b) 返回 10。
not not x 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 not(a and b) 返回 False

成员运算符

除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。

运算符 描述 实例
in 如果在指定的序列中找到值返回 True,否则返回 False。 x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
not in 如果在指定的序列中没有找到值返回 True,否则返回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。
list = [11,22,33,44]
a = 11
if a in list:
    print('a在列表中')
else:
    print('a不在列表中')

身份运算符

身份运算符用于比较两个对象的存储单元

运算符 描述 实例
is is 是判断两个标识符是不是引用自一个对象 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False
is not is not 是判断两个标识符是不是引用自不同对象 x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。
# 以数组为例
list1 = [11,22,33]
list2 = [11,22,33]  # list1和list2是不同的对象,虽然值相同
print(list1 == list2) # 比较value  (True)
print(list1 is list2) # 比较id	 (False)
print(list1 is not list2) # 比较id	 (True)

位运算符

下表中变量 a 为 60,b 为 13,二进制格式如下:

& 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果 12 ,二进制解释: 0000 1100
| 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 (a | b) 输出结果 61 ,二进制解释: 0011 1101
^ 按位异或运算符:当两对应的二进位相异时,结果为1 (a ^ b) 输出结果 49 ,二进制解释: 0011 0001
~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1 (~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式。
<< 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。 a << 2 输出结果 240 ,二进制解释: 1111 0000 移动一位相当于*2,移动两位=60*4=240
>> 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数 向右移动一位,相当于除以2了,移动两位除以4,三位除以8

运算符优先级

()括号优先 -->算数运算 --> 位运算 --> 比较运算 --> 布尔运算 --> 赋值运算

在这里插入图片描述

程序的组织结构

计算机的流程控制主要分为三种结构:

  • 顺序结构
  • 选择结构 -if语句
  • 循环结构 - while 、for -in 语句

对象的布尔值

python一切皆对象

获取对象的布尔值: 使用内置函数 bool(obj)

以下对象的布尔值为False

  • False
  • 数值0
  • None
  • 空字符串
  • 空列表
  • 空元组
  • 空字典
  • 空集合

以下值都为False

print(bool(False)) # False值
print(bool(0))  # 0
print(bool(0.0)) # 0.0
print(bool(None)) # None值
print(bool('')) # 空字符
print(bool([])) # 空数组
print(bool(list())) # 空数组
print(bool(())) # 空元组
print(bool(tuple())) # 空元组
print(bool({
    
    })) # 空字典
print(bool(dict())) # 空字典
print(bool(set())) # 空集合

其他值都为True

print(bool(True))
print(bool(18))
print(bool('111'))
......

对象放入条件判断

上面得知,对象的布尔值,所以我们在写程序时,可以将对象直接放入条件判断语句中,简化代码

示例

age = int(input('请输入你的年龄'))
if age:  # 当 age 不为 0 时,age的bool值为True,所以可直接放入判断中
    print('年龄为:', age)
else:
    print('格式不正确')

选择结构

单分支结构

语法结构:

if 条件表达式:
    条件执行体

图示

在这里插入图片描述

示例:

money = 2000
s = int(input('输入取款金额'))
if money >= s:
    money -= s
    print('余额充足,取款成功,余额为:', money)

双分支结构

# 语法
if 条件表达式:
	条件执行体1
else:
    条件执行体2

示例:

num = int(input('请输入一个整数'))
if num % 2 == 0:
    print('是偶数')
else:
    print('是奇数')

多分支结构

# 语法
if 条件表达式1:
	条件执行体1
elif 条件表达式2:
    条件执行体2
...
[else:]
	条件执行体else

示例:

score = int(input('请输入你的成绩'))

if 90 <= score <= 100:
    print('优')
elif score >= 80:
    print('良')
else:
    print('差,继续努力')

条件表达式

条件表达式是if…else的简写

语法:

# 如果判断条件为True,此表达式返回值为 x ,否则返回 y
x if 判断条件 else y

示例:

num_a = int(input('请输入第一个整数'))
num_b = int(input('请输入第二个整数'))
print(str(num_a) + '大于等于' + str(num_b) if num_a >= num_b else str(num_a) + '小于' + str(num_b))

pass语句

语句什么都不做,只是一个占位,用在先搭建语法结构,还没想好怎么写的时候

可以配合哪些语句使用:

  • if语句的条件执行体
  • for-in语句的循环体
  • 定义函数的函数体

示例:

num = 100
if num == 100:
    pass
else:
    print('a')

循环结构

range()内置函数的使用

用于生成一个整数序列,返回值是一个迭代器对象

在这里插入图片描述

示例

# 第一种创建方式
r = range(10) # 默认从 0 开始, 步长默认为 1    [0,10) 半闭半开区间,其中不包括10
print(list(r)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  把r转换成了列表类型

# 第二种创建方式
r = range(1, 10)  # 从1开始, 步长默认为 1 
print(list(r))  # [1, 2, 3, 4, 5, 6, 7, 8, 9]  把r转换成了列表类型

# 第三种创建方式
r = range(1, 10, 2)  # 从1开始, 步长为 2 
print(list(r))  # [1, 3, 5, 7, 9]  把r转换成了列表类型

# 判断10 是否在这个整数序列中
print(10 in r) # False

range类型的优点:

不管range对象表示的整数序列有多长,所有的range对象占用的空间都是一样的,因为仅仅需要存储start,stop,step,只有用到range对象的时候,才回去计算序列中的相关元素。

while循环

# 语法
while 条件表达式:
    条件执行体

示例:

a = 1
while a < 5:
    print(a)
    a += 1

练习: 1-100之间的偶数和

a = 1
sum = 0
while a <= 100:
    if not a % 2:  # a %2==0时,bool值是False,然后取反即可
        sum += a
    a += 1
print(sum)

for-in 循环

in 表达从(字符串、序列等)中依次取值,又称遍历

for-in遍历的对象必须是可迭代的对象

语法:

for 自定义的变量 in 可迭代对象:
    循环体

示例:

for item in 'Hello World':
    print(item)
    

b = range(10)  # 从0-9
for item in b:
    print(item, end='') # 0123456789  ,end=''表示一行显示

如果在循环体中没有用到自定义的变量,可以将变量写作 _

for _ in range(4):
    print('hello world')  # 循环四次hello world

练习1:使用for循环计算1-100偶数和

sum = 0
for i in range(1, 101, 1):
    if not i % 2:
        sum += i

print(sum)

练习2:输出100-999之间的水仙花数

个位、十位、百位所有数的3次方的和 = 本身

举例: 153=3*3*3+5*5*5+1*1*1

for item in range(100,1000):
    ge = item % 10
    shi = item // 10 % 10
    bai = item // 100
    if ge**3 + shi**3 + bai**3 == item:
        print(item)

break

结束循环结构,通常和if分支结构一起使用

for item in range(3):
    if item == 1:
        print('1')
        break

continue

用于结束当前的循环,进入下一个循环,通常和if一起使用

示例:

输出1-50之间,5的倍数

for item in range(1,51):
    if item % 5:
        continue
    print(item)

else的使用

在这里插入图片描述

示例

for item in range(3):
    pwd = input('请输入你的密码')
    if pwd == '8888':
        print('密码正确')
        break
    else:
        print('密码错误')
else:  # 当for循环中执行了break后,与for配合使用的else将不会起作用
    print('三次密码均输入错误')

嵌套循环

内循环和外循环

练习1:输出一个三行四列的矩形

for i in range(3):
    for j in range(4):
        print('*', end='\t')

    print() # 换行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g4ymoVeI-1648188624244)(imgs/11.png)]

练习2:生成一个树,n行就有n个*

for i in range(1,10): # 外循环表示行数 [1,10) 一共9行
    for j in range(1, i + 1):
        print('*',end='')
    print()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dX9l8Vzl-1648188624245)(imgs/12.png)]

练习3:九九乘法表

for i in range(1,10):
    for j in range(1, i + 1):
        print(j, '*', i, '=', i * j, end='\t')
    print()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e89PkiZU-1648188624245)(imgs/13.png)]




第一章 变量、常用循环体、代码结构、代码练习

第二章 列表、元组等数据结构、字符串驻留机制及字符串格式化操作

第三章 函数、面向对象、文件操作、深浅拷贝、模块、异常及捕获

第四章 项目打包、类和对象高级、序列、迭代器、生成器、装饰器

第五章 正则表达式、json、logging日志配置、数据库操作、枚举、闭包、匿名函数和高阶函数、time、datetime

第六章 Socket编程、多线程(创建方式、线程通信、线程锁、线程池)

猜你喜欢

转载自blog.csdn.net/weixin_45248492/article/details/123734413