python基础知识

1.1 开发模式

  • 交互模式:简单的调试或者测试
img
  • 开发流程

创建以.py结尾的python文件

在python文件中输入打印“hello world”的代码

运行编写完的python代码文件

  • 使用pycharm创建python项目

    • 注释作用:描述一段代码的实现逻辑和功能,增强代码的可读性,易于维护

    • 单行注释:以#开头,注释一行,多行注释需在注释的内容开头分别添加#

    • 多行注释:'''注释内容'''或者 ''''''注释内容'''''' 可以对多行内容整体进行注释

    • 注释在代码执行过程中不会被执行,注释数量没有限制

    • 注释快捷键:“Ctrl”+ “/”

1.2 注释

  • 注释作用:描述一段代码的实现逻辑和功能,增强代码的可读性,易于维护

  • 单行注释:以#开头,注释一行,多行注释需在注释的内容开头分别添加#

  • 多行注释:'''注释内容'''或者 ''''''注释内容'''''' 可以对多行内容整体进行注释

  • 注释在代码执行过程中不会被执行,注释数量没有限制

  • 注释快捷键:“Ctrl”+ “/”

1.3 变量

  • 变量指向各种类型值的名字,当使用该类型值时,直接使用变量,不需要再写具体的值。

格式:变量名 = 数值

  • 变量的类型不需要显示指定,python解释器会自动判断数据类型。可将任意数据类型赋值给变量。

  • 变量名词命名简洁明了,见名知意

module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_VAR_NAME, instance_var_name, function_parameter_name, local_var_name

  • 使用type(变量)查看变量类型

1.4 数据类型

img
img

***** eval(str)**根据str的值来自动判断转换为哪一种数据类型:

eval("123”) 转换为int

eval(“3.25”)转换为float

1.5 输入、输出

  • input()用于在程序执行过程中接收用户输入的内容,默认接收的输入内容为字符串类型

  • print()用于在程序执行过程中输出内容:

直接输出内容

输出单个和多个变量

格式化输出

1.6 格式化输出

格式化输出应用示例:

print("你输入的名字是:%s" %name)

print(“你输入的名字是:%s,你输入的年龄是:%d” %(name, age))

print(“你的身高是:%.2f” %height)

占位****符 意义 占位****符 意义
%c 字符 %X 十六进制整数
%s 通过str()字符串转换来格式化 %x 十六进制整数
%e 索引符号 %o 八进制整数
%E 索引符号 %i 有符号十进制整数
%f 浮点实数,默认保留6位小数;指定精度:%.<n>f, <n>代表保留的小数位数 %d 有符号十进制整数
%g %f和%e的简写 %u 无符号十进制整数
%G %f和%e的简写
  1. 格式化输出时,若打印%,需使用%%表示是字符串而不是转化说明符

  2. print无换行输出:

print(“hello”, end=””)

print(“world”)

  1. 简洁格式化:format

print(“你的名字是:{},你的年龄是{}”.format(name, age)

1.7 标识符、命名规则、关键字

标识符:

  • 在python程序开发过程中,自定义的一些符号、名称

  • 由字母、数字、下划线组成,不能以数字开头

  • 标识符区分大小写

命名规则:

  • 见名知意

    module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_VAR_NAME, instance_var_name, function_parameter_name, local_var_name

  • 不能使用关键字

关键字:

  • 在Python内部具有特殊功能的标识符

  • 通过keyword模块的kwlist函数查看

1.8 运算符

算术运算符:

符号 意义
+ 加:两个对象相加
- 减:得到负数或者一个数减去另外一个数
* 乘:两个数相乘或是返回一个被重复若干次的字符串
/ 除:x除以y
% 取模:返回除法的余数
** 幂:返回x的y次幂
// 取整除:返回商的整数部分

赋值运算符:

符号 意义
= 简单的赋值运算符
+= 加法赋值运算符
-= 减法赋值运算符
*= 乘法赋值运算符
/= 除法赋值运算符
%= 取模赋值运算符
**= 幂赋值运算符
//= 取整除赋值运算符

比较运算符:

符号 意义
== 等于:比较对象是否相等
!= 不等于:比较两个对象是否不相等
> 大于:返回x是否大于y
< 小于:返回x是否小于y
>= 大于等于:返回x是否大于等于y
<= 小于等于:返回x是否小于等于y

逻辑运算符:

符号 意义
and x and y:如果表达式x和y同时为True,则返回True,否则返回False
or x or y:如果x或y中某一表达式为True,则返回True,否则返回False
not not x:如果表达式x为True,则返回False,否则返回True

运算符优先级:

img

2 条件判断、循环

2.1 条件判断

  • 条件判断语法格式:

if条件:

逻辑代码

else:

其他逻辑代码

img
  • 多条件判断语法格式:

if 条件1:

逻辑代码1

elif 条件2:

逻辑代码2

elif 条件3:

逻辑代码3

else:

其他逻辑代码

  • If嵌套语法格式:

if 条件1:

if 内部条件1:

内部逻辑代码1

elif 内部条件2:

内部逻辑代码2

else:

内部其他逻辑代码

elif 条件2:

逻辑代码2

else:

其他逻辑代码

2.2 循环

2.2.1 while循环

  • 语法格式

while 判断条件:

条件满足,执行语句

  • 执行流程

首先对while条件判断,当条件为true时,执行循环体内语句块,然后再判断while条件,仍然为true则继续执行语句块,直到条件为false循环结束,执行循环后的代码

img
  • 应用场景

对于满足某种条件,重复调用实现相同功能的代码

2.2.2 for循环

  • 语法格式

for 临时变量 in 序列:

序列中存在待处理元素则进入循环体执行代码

for i in range(0, 10, 1)

range(0,10): [0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

  • 执行流程

每次循环判断for中的条件,从序列的零脚标开始,将序列中的元素赋值给临时变量,进入循环体执行代码,执行完所有判断for中序列是否存在下一个元素,如果存在则继续进入循环体,依次类推,直到序列中最后一个位置的元素被处理完,循环结束。

img

2.2.3 B****reak跳出循环

  • 跳出break所在的整个循环,结束循环,继续执行循环外的语句。

  • while循环中使用break

while 条件:

break # 整个循环结束

  • while循环嵌套中使用break

while 条件:

代码

while条件:

break # 只结束内层整个循环

代码

  • for 循环中使用break

for 变量 in 序列:

break #整个循环结束

  • for嵌套循环中使用break

for 变量in序列:

代码

For变量in序列:

break #只结束内层整个循环

代码

  • 总结:break的作用范围值作用与它所在的循环,不影响其他外部循环

2.2.4 continue跳出本次循环

  • continue跳出本次循环,当次循环中continue后的语句将不会被执行,继续执行下一次循环

  • while循环中使用continue

while 条件:

if条件:

continue #本次循环结束,后边的代码语句不执行

代码语句 #不会不执行

代码语句 #不会不执行

  • for循环中使用continue

for变量in序列:

if条件:

continue #本次循环结束,后边的代码语句不执行

代码语句 #不会不执行

2.3 项目实践

计算器功能:

  1. 根据用户输入的数字和运算符,自动计算结果

  2. 能够支持大部分运算符的计算

  3. 对程序可能产生的异常,优化处理

2.4 代码作业

小美奶茶馆盛大开业了!今天,门店前立出了以下招牌:

小美奶茶馆售卖宇宙无敌奶茶,奶茶虽好,可不要贪杯哦!每次限尝一种口味:

1)原味冰奶茶 3元 2)香蕉冰奶茶 5元 3)草莓冰奶茶 5元 4)芒果冰奶茶 7元

5)珍珠冰奶茶 7元

请您帮助小美奶茶馆的收银小妹设计一款价格结算系统,要求:

顾客可输入1-5来选择奶茶口味,输入其他数字则输出:‘Woops!我们只售卖以上五种奶茶哦!新口味敬请期待!’

顾客可输入购买数量,根据奶茶口味和数量计算总价。

顾客可输入是否为本馆会员,会员可以享受9折优惠。

输出顾客购买的详细信息,包括奶茶口味、购买数量、总价。若是会员输出会员价。

建议大家使用格式化输出。

3 字符串、列表、元组、字典

3.1 字符串

  • 字符串类型变量定义

S=”hello”或者’hello’

  • 组成字符串的方式

使用‘+’号将两个字符串连接成一个新的字符串

使用字符串格式化符号

  • 下标
img

通过下标获取指定位置的字符:string_name[index]

  • 切片

语法:string_name[起始:结束:步长]

  • 常用内置方法
方法 说明
find(str[, start,end]) 在字符串中查找制定的字符串是否存在,如果存在则返回第一个子字符串的起始下标,如果不存在则返回-1start、end是可选参数,表示查找子字符串的起始和结束范围
count(str[, start, end]) 在字符串中统计包含的子字符串的个数
replace(old, new[, count]) 使用新的子字符串替换指定的旧子字符串,返回新的字符串count是可选参数,可以指定替换的字符串个数,默认全部替换
split(sep[, maxsplit]) 按照指定的分隔符分割字符串,返回分割之后所有元素的列表maxsplit 是可选参数,指定对几个分隔符进行分割
startswith(prefix[, start, end]) 判断字符串是否以指定前缀开头,返回值为True或Falsestart、end是可选参数,表示查找前缀的起始和结束范围
endswith(suffix[, start, end]) 判断字符串是否以制度后缀结束,返回值为True或Falsestart、end是可选参数,表示查找后缀的起始和结束范围
upper() 字符串所有字符大写
lower() 字符串所有字符小写

3.2 列表

  • 可以存储相同或者不同类型数据的集合。通常是相同类型。

  • 列表定义

name_list = ["zhangsan”, “lisi”, “wangwu”]

  • 顺序存储,可通过下标获取内部元素

name_list[0]

name_list[1]

  • 内容可变,可通过下标修改元素值

name_list[0] = “xiaobai”

  • 使用循环遍历列表

  • 嵌套列表

  • 常用内置方法

方法 说明 例子
添加元素:append()insert() append()列表末尾条件元素insert()在列表指定的下标位置添加元素 list.append(element)insert(index, element)
组合列表:+extend() +组合两个列表生成新的列表extend()向调用它的列表中添加另外一个列表的元素 list1 = list2 + list3list1.extend(list2)
删除元素:delpop()remove() del删除列表某下标位置的元素remove删除某名称的元素pop删除列表末尾元素 del list[index]list.remove(element)list.pop()
判断元素在列表中是否存在:innot in 可作为条件判断中的条件
排序:sort() 列表内元素重排序:sort() 升序sort(reverse=True)倒序 num_list.sort()num_list.sort(reverse=True)
内容倒置:reverse 将列表内容倒置 list.reverse()
统计元素个数:count 统计列表内指定元素个数 List.count(element)

3.3 元组

  • 顺序存储相同/不同类型的元素

  • 元组定义,使用()将元素括起来,元素之间用“,”隔开

  • 特性:不可变,不支持添加、修改、删除元素操作

  • 查询:通过下标查询 元组指定位置的元素

  • 空元组定义:none_tuple = ()

  • 只包含一个元素的元组:one_tuple = (“one”,)

  • 循环遍历元组

  • 存储Key-Value键值对类型的数据

  • 字典定义:{key1:value1, key2:value2, …}

  • 查询:根据key查找value

  • 创建空字典:dic = {}

  • 内置方法

3.4 字典

方法 说明
dic[key] = value 添加/修改键值对
del dic[key] 删除键值对
len(dic) 键值对个数
dic.get(key) 查找某键(不管是否存在)若键存在于字典中,则返回该键对应值若键不存在,则返回null
dic.get(key, default_value) 若键不存在,则添加键并设置默认值为default_value,并返回default_value
for key in dic.keys() 遍历字典所有键
for value in dic.values() 遍历字典所有值
for item in dic.items() 遍历字典所有键值对,返回元组,即type(item)为元组
for key,value in dic.items() 遍历字典所有键值对,返回key和value
dic.clear() 清空字典

3.5 集合set

  • 无序存储不同数据类型不重复元素的序列

  • 集合定义:set = {"value1”, “value2”, “value3”, …}

  • 使set(序列)中对序列中元素去重,同时创建集合

例如:name_set = set(list)

  • 创建空集合:none_set = set()

  • 使用in和not in判断一个元素在集合中是否存在

  • 内置方法

方法 说明
len(set) 集合元素个数
set = set(list)set = set(str) 将list的元素去重,并存储到set中将字符串中的字符去重,并存储到set中
set.add(ele) 添加元素至集合
set.update(序列)set.update([ele3, ele4], [ele5, ele6]) 添加序列中的元素至集合,并且去重
set.remove(ele) 删除集合中的元素删除不存在的元素时会报错
set.discard(ele) 删除集合中的元素删除不存在的元素时不会报错
set.pop() 随机删除集合中的某个元素,同时返回被删除的元素
set.clear() 清空集合
交集intersection(&) set1 = {1,2,3,4}set2 = {2,6,7,8}set3 = set1 & set2set3 = set1.intersection(set2)
并集union( ) set1 = {1,2,3,4}set2 = {2,6,7,8}set3 = set1 set2set3 = set.union(set2)
差集difference(-) set1 = {1,2,3,4}set2 = {2,6,7,8}set3 = set1 - set2set3 = set1.difference(set2)
对称差集(^) set1 = {1,2,3,4}set2 = {2,6,7,8}set3 = set1 ^ set2

4 函数

4.1 基本概念

  • 对实现某一功能的封装

  • 函数定义

def 函数名称(参数):

函数体代码

return 返回值

  • 函数调用:函数名(参数)

带参函数注意:调用函数时传入的参数个数与函数定义参数个数相同;

参数顺序要相同

  • 函数参数

形参:定义函数时设置的参数

实参:调用函数时传入的参数

4.2 函数类型

  • 无参无返回值函数

  • 无参有返回值函数

  • 有参无返回值函数

  • 有参有返回值函数

***返回多个值时用逗号”,”隔开

img

4.3 变量

  • 局部变量

函数内部定义的变量

不同函数内的局部变量可以定义相同的名字,互不影响

作用范围:函数体内有效,其他函数不能直接使用

  • 全局变量

函数外部定义的变量

作用范围:可以在不同函数中使用

在函数内使用global关键字实现修改全局变量的值(字典、列表除外,全局变量的字典 / 列表可在任意函数直接修改,不需使用global关键字

全局变量命名建议以g_开头,如:g_name

4.4 函数参数

4.4.1 缺省参数

  • 函数定义带有初始值的形参

  • 函数调用时,缺省参数可传,也可不传

  • 缺省参数一定要位于参数列表的最后

  • 缺省参数数量没有限制

  • 调用带有参数的函数时,通过指定参数名称传入参数的值

  • 可以不按函数定义的参数顺序传入

  • 函数可以接收不定个数的参数传入

  • def function([formal_args, ]*args)函数调用时,传入的不定参数会被封装成元组

  • def function([formal_args, ]**args)函数调用时,如果传入key=value形式的不定长参数,会被封装成字典

4.4.2 命名参数

4.4.3 不定长参数

img

4.4.4 拆包

  • 对于定义了不定长参数的函数,在函数调用时需要把已定义好的元组或者列表传入到函数中,需要使用拆包方法
img

4.5 递归函数及应用

  • 函数调用自身

  • 注意:递归过程中要有 用于结束递归的判断

img
img

4.6 匿名函数及应用

  • 用lambda关键字创建匿名函数

  • 定义:lambda [参数列表]:表达式

  • 匿名函数可以作为参数被传入其他函数

img
img

5 文件操作

5.1 日期和时间

5.1.1 time模块

  • time()函数获取当前时间戳

  • localtime([seconds])格式化时间戳为本地时间,返回时间元组

字段 属性
tm_year 2018
tm_mon 1到12
tm_mday 1到31
tm_hour 0到23
tm_min 0到59
tm_sec 0到61(60或61是润秒)
一周的第几日 tm_wday 0到6(0是周一)
一年的第几日 tm_yday 1到366,一年中的第几天
夏令时 tm_isdst 是否为夏令时,值为1时是夏令时,值为0 时不是夏令时
img
img
  • time.strftime(format[, time_tuple])格式化日期函数
格式化符号 说明
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月份中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%s 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或者P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
img
  • time.strptime(string, format)将日期时间字符串转换为时间元

  • img
  • time.mktime(time_tuple)将时间元组转换为时间戳

img
  • time.sleep(seconds)程序睡眠等待几秒钟

5.1.2 datetime模块

  • datetime.datetime.now()获取当前日期和时间

  • strftime(format)日期时间格式化

img
  • datetime.datetime.fromtimestamp(timestamp)将时间戳转换为日期时间
img
  • datetime.timedelta(时间间隔)返回一个时间间隔对象,通过时间间隔可以对时间进行加减法得到新的时间
img

img

5.2 文件与文件夹操作

5.2.1 文件操作

OPEN(文件路径,访问模式,ENCODING=编码格式)R:只读模式W:只写模式A:追加模式 打开一个已存在的文件,或者创建新的文件R模式打开不存在的文件会报错W模式代开不存在的文件会创建新的文件
close() 关闭已打开的文件
write(data) 向文件中写入字符串
read() 读取文件全部内容
readlines() 读取文件全部内容,返回一个列表,每行数据是列表中的一个元素
readline() 按行读取文件数据
writelines(字符串序列) 将一个字符串序列(如字符串列表等)的元素写入到文件中
os.rename(oldname, newname) 文件重命名
os.remove(filepath) 删除文件
with open(文件路径,访问模式) as f: f.write(“hello python”) 自动调用close方法

read和readlines一次性读取,并将内容保存在内存中

img

readline逐行读取

img

5.2.2 文件夹操作

OS.MKDIR(PATH) 创建文件夹
os.getcwd() 获取程序运行的当前目录
os.listdir(path) 获取指定目录下的文件列表
os.rmdir(path) 删除文件夹
shutil.rmtree(path) 删除非空文件夹
os.chdir(path) 切换目录
img

5.3 JSON文件、CSV文件操作

5.3.1 JSON文件

  • 引入json模块:import json

  • dumps(python_data):将Python数据转为JSON编码的字符串

  • loads(json_data):将json编码的字符串转换为python的数据结构

  • dump(python_data, file):将python数据转换为JSON编码的字符串,并写入文件

  • load(json_file):将JSON数据文件中读取数据,并将json编码的字符串转换为python的数据结构

  • python数据类型与JSON类型对比

img
img

5.3.2 CSV格式文件

  • csv格式文件默认以逗号分隔

  • 引入csv模块:import_csv

  • writerow([row_data])一次写入一行数据

  • writerows([[rowdata], [rowdata], …])一次写入多行数据

img
  • reader(file_object)根据打开的文件对象返回一个可迭代的reader对象

可以使用next(reader)遍历reader对象,获取每一行数据

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

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,374评论 0 5
  • 有时候技术总是不够用,明明已经学了很多技能了,但是碰到问题还是不够用。手工处理耗时太长的问题已经困扰着希望解放双手...
    蝴蝶之梦天使阅读 307评论 0 0
  • 数据类型: 数字类型(int、float、bool(True or False)、complex) 字符串(str...
    GHope阅读 2,441评论 1 22
  • 1.1 Python简介 [if !supportLists]• [endif]Python是一种面向对象、解释型...
    Chliao阅读 542评论 0 1
  • 世界只有两样东西,是值得我们深深景仰的,一个是我们头顶上的灿灿星空,另一个是我们内心的崇高道德法则——康德1据记载...
    為學阅读 287评论 0 0