python语法基础
1.注释
1.1 单行注释
# 这是注释内容 print("hello world!") print("hello world!") # 在代码后也可以编写注释
1.2 多行注释
""" 代码完成的功能是,打印输出 hello world 1.首先调用 print 函数 2.给 print 函数传入要打印输出的参数 """ print("hello world!")
1.3 快捷键注释
快捷键注释 ctrl + /
2.变量
2.1 变量定义语法
变量在程序中表现为一个唯一不重复的名字,只需要定义一个名字,给这个名字变量赋值即可。
注意:变量意味着存储的数据是可以变化的。
# 定义一个变量,名字为val ,这个变量临时存储的值为100 val = 100 # 下面将这个变量的值,更改为其他的值 200 val = 200
注意:这里的等号(=),叫做赋值运算符,表示将 = 号后面的数据存储到名字为 = 号前面的名字变量里。
在取变量名时,注意:
1.标识符由字母、下划线和数字组成,且数字不能开头;
2.python 中的标识符是区分大小写的;
3.变量名一般用小写加下划线组成;
4.不能和关键字和已有的名字冲突;
2.2 变量的类型
1) 数字类型:整数和小数
2)字符串类型:除了数字类型的数据,处理更多的就是字符串类型数据;
在python 程序里,无论任何字符写到两个单引号或者双引号内部,都称为 字符串。
3) 布尔类型:用于表示逻辑运算结果,该变量只有两个值,True 或者 False.
注意:python 中定义变量时 不需要指定类型,python 会根据变量的值来推导变量的类型,可以使用type()函数来查看变量的类型。
2.3 不同类型之间的运算规则
1)算术运算符
+ - * / : 加 减 乘 除
// 取整数
% 取余数
** 幂
2)复合赋值运算符
= 赋值
+= 加法赋值
-= 减法赋值
*= 乘法赋值
/= 除法赋值
//= 取整赋值
%= 取模(余数)赋值
**= 幂赋值
注意:
1.数字和数字之间可以进行所有的运算
2.数字和字符串之间只能进行乘法运算
3.字符串和字符串之间可以进行加法运算
2.4 变量的输入和输出
1.print 函数
1)普通输出变量
# 定义一个整数类型变量 my_number = 100 # 定义一个字符串类型变量 my_string = 'hello world!' # 输出两个变量 print(my_number) print(my_string)
注意:变量名不能加引号
2)格式化输出变量
格式化输出就是让数据按照一定的格式输出,例如:我的名字是xxx.
进行格式化输出的流程:
1.先定义输出格式.
2.在格式中填充数据.
案例:已知有数据:name = '司马二狗',age = 30,salary = 19988.78,请按照“我的名字是xxx,我的年龄是xxx,我的工资是xxx”的格式将变量输出。
定义输出格式,需要用到格式化占位符,用来暂时替代不确定的值。
% 被称为 格式化操作符,专门用于处理字符串中的格式
1. 包含 % 的字符串,被称为 格式化字符串
2. % 和不同的 字符 连用,不同类型的数据 需要使用 不同的格式化字符
常用格式化字符:
%s 字符串
%d 有符号十进制整数,%06d 表示输出的整数显示位数,不足的地方使用 0 补全
%f 浮点数, %.2f 表示小数点后只显示两位
%% 输出%
# 定义名字、年龄、工资变量 name = '司马二狗' age = 30 salary = 19988.78 # 格式化字符串 format_string = '我的名字是%s,我的年龄是%d,我的工资是%.2f' % (name,age,salary) # 输出格式化后的字符串 print(format_string)
2.input函数
input函数主要用于从键盘获取数据。
注意:无论输入的数据是小数、整数、还是字符串,input函数统统当做字符串类型来获取。
# 获得键盘输入 your_name = input('请输入您的名字:') # 输出内容 print(your_name)
2.5变量的类型转换
变量类型转换就是将变量的类型,由一种类型转换为另一种类型。
例如:将变量从数字类型转换为字符串类型
由于各种原因,在拿到数据之后,数据的类型和我们预期的不符,导致无法进行相关的计算(数据类型决定了数据之间的运算规则),因此我们需要先将数据的类型转换为我们预期的类型,再进行计算。
因为 input接受的任何数据都当做了 string 类型来处理。此时如果想要进行数值运算,就必须将字符串转换为数字类型,再进行计算,因为类型不同,运算规则不同。
使用以下函数完成变量类型的转换:
1.int(val) 将变量(val) 转换为 int 类型;
2.float(val) 将变量 (val)转换为 float 类型;
3.str(val) 将变量(val)转换为 str 类型;
# 输入左操作数 left_number = input('请输入一个数字:') # 输入右操作数 right_number = input('请输入一个数字:') # 将字符串类型变量转换为数字类型 left_number_int = int(left_number) right_number_int = int(right_number) # 对两个数进行加法计算 result = left_number_int + right_number_int # 计算结果 print(result)
3.分支语句
3.1 if 分支语句
1)单个分支语法格式
a = 10 if a > 5 : print('a>5')
2)两个分支语法格式
name = 'Obama' if name == 'Obama': print('我是Obama') elif name =='Trump': print('我是Trump')
name = 'Obama' if name == 'Obama': print('我是Obama') else: print('我是其他人!')
3)多个分支语法格式
day = input('请输入1-7的数字:') if day =='1': print('今天是星期一') elif day == '2': print('今天是星期二') elif day == '3': print('今天是星期三') elif day == '4': print('今天是星期四') elif day == '5': print('今天是星期五') elif day =='6': print('今天是星期六') elif day == '7': print('今天是星期日') else: print('无法确定星期几')
3.2 if 条件成立
1.运算符:== 、 != 、 > 、 < 、 >= 、 <=
# 请输入你的用户名 username = input('请输入您的用户名:') # 请输入您的密码 password = input('请输入您的密码:') # 判断用户名是否正确 if username =='admin': # 再判断密码是否合法 if password == 'admin': # 打印欢迎信息 print('欢迎 %s 登录系统!' % username)
2.多个条件之间的关系
运算符:and 、or 、not
a = 10 b = 20 c = 30 d = 40 # and 两个条件都为真,则结果为真 result = a > b and c < d print('result:', result) # or 有一个条件为真,则结果为真 result = a > b or c < d print('result:', result) # not 如果条件为真,则结果就为假 result = not(a > b ) print('reslut:',result)
3.猜拳游戏
import random user_quan = int(input('请出拳 石头(0)、剪刀(1)、布(2):')) computer_quan = random.randint(0,2) if (user_quan == 0 and computer_quan ==1) or\ (user_quan == 1 and computer_quan == 2) or \ (user_quan == 2 and computer_quan == 0): print('您赢了!') elif user_quan == computer_quan: print('平局!') else: print('您输了!')
4.循环语句
4.1 while 循环
1.while循环的语法格式
while 条件:
重复执行的一行或多行代码
2.while循环
1) 计算1-100之间的累加和
i = 1 sum = 0 while i <=100: sum = sum + i i +=1 print('1~100的累加和为:%d '% sum)
2)计算1-100之间所有的偶数累加和
i = 1 sum = 0 while i <= 100: if i % 2 == 0: sum = sum + i i += 1 print('1~100的偶数和为:%d ' % sum)
4.2 break 和 continue
当循环体执行到break语句时,就会马上退出循环
while True: name = input('请输入一个名字(stop停止输入):') if name == 'stop': # 退出循环 break else: print(name)
当循环执行到continue语句时,跳过该次循环,并不退出循环
i = 1 sum =0 while i < 100: if i % 2 == 0: # i 一定要加 1 ,否则会进入死循环 i += 1 # 如果 i 为偶数则跳过该次循环 continue sum = sum + i i += 1 print('1~100除偶数之外的累加和为: %d ' % sum)
5.函数
5.1 函数语法格式
在python 中,函数使用def 关键字来定义,包含函数的名字(功能的名字),函数的实现(实现功能的代码)。
函数的行为分为:函数定义和函数调用。
1.函数定义是实现函 数功能的过程。
2.函数调用是使用功能。
注意:函数不调用是不会自动执行的。
1-100这个功能,可以写成这样的一个函数(功能代码块):
def my_sum(): i = 1 s = 0 while i <= 100: s = s + i i += 1 print('1~100的累计和为:%d ' % s) # 函数调用 my_sum()
5.2 函数的参数
我们可以将我们要开始和结束数字传递给函数,让函数按照我们传递的参数来计算。
def my_sum(start,end): my_start = start my_end = end my_sum = 0 while my_start <= my_end: my_sum = my_sum + my_start my_start += 1 print('%d~%d的累计和为:%d' % (start,end,my_sum)) # 函数调用 my_sum(2,50)
函数参数的作用就是让函数依据我们给定的值来进行运算,这样可以增强函数的通用性。函数可以有多个参数。
例如:我们想要编写一个具有加法功能函数,很显然需要两个参数:
def my_add(num1,num2): result = num1 + num2 print('num1 + num2 = ',result) my_add(10,20)
def my_add(num1,num2): result = num1 + num2 print('num1 + num2 = ',result) my_add(10,20) my_add(num1=10,num2=20) my_add(num2=20,num1=10)
1.按照从左向右的顺序传递叫做位置参数。
2.按照形参名字传递叫做关键字参数。
def my_add(num1,num2,num3,num4): result = num1 + num2 + num3 +num4 return result my_add(100,200,300,num4=10)
注意:需要保证位置参数在关键字参数之前即可。
5.3 函数的返回值
return 语句将函数的运行结果返回给函数的调用者:
def my_add(num1,num2): result = num1 + num2 return result # 使用一个变量保存函数执行的结果 my_add_result = my_add(10,20) #使用结果进行下一步计算 finish_result = my_add_result + 100 # 输出最终结果 print('最终结果:',finish_result)
注意:
1.只要函数执行碰到return 就会停止执行;
2.函数中可以编写多个return,但有且只有一个return 会执行;
3.return 后面可以跟上要返回的值,单独使用相当于 return None.
4.break 用在循环中,用来终止循环执行。return 用在函数中,用来终止函数执行。
5.4 局部变量 和 全局变量
1.全局变量:在函数外部定义的变量。全局指的是该变量在当前python 文件范围内是可见的。全局变量可以被当前python 文件内的所有函数直接使用。
2.局部变量:在函数内部定义的变量,该变量只能在定义的函数内部使用。
注意:python 解释器搜索同名变量时,是“就近原则”
5.5 函数的缺省参数(默认参数)
默认参数指的是当函数调用中省略了实参时默认使用的值。
默认参数的语法与使用:
1.在函数声明或定义时,直接对参数赋值。这就是设置形参的默认参数。
2.在函数调用时,省略部分或全部的参数。这时可以用默认参数来代替。
def my_function(a ,b=20 ,c=30): return a+b+c my_function(10) my_function(10,100) my_function(10,100,1000)
注意:带有默认值的参数,一定要位于参数列表的最后面。
5.6 函数文档及作用
函数也需要添加注释,方便函数功能、参数以及返回值的含义能够被调用者知悉。
# 单行函数文档字符串 def my_function(param): """函数做了什么事,返回什么结果.""" return param + 10 # 多行函数文档字符串 def my_add(num1,num2): """ 计算两个整数的和 :param num1: 加法运算的左操作数 :param num2: 加法运算的右操作数 :return: 返回两个操作数相加的结果 """ result = num1 + num2 return result
注意:可以通过 ctrl + q 快捷键查看函数信息,也可以通过 help() 函数来查看函数信息。
5.7 单一职责原则
单一职责原则说的是一个函数只负责一个事情,这是因为,如果一个函数承担的职责过多,就等于把这些职责混合在一起,一个职责的变化可能会影响其他职责的能力。
============================================================================================
6.容器
根据不同容器的特性,将常用容器分为序列式容器和非序列式容器:
1.序列式容器中的元素在存放时都是连续存放的,也就是序列式容器中,除了第一个元素的前面没有元素,最后一个元素的后面没有元素,其他所有的元素前后都有一个元素。包括:字符串、列表、元组。
2.非序列式容器在存储元素时不是连续存放的,容器中的任何一个元素前后都可能没有元素。包括:字典、集合。
1)序列式容器支持根据索引(下标)访问元素,而非序列式容器不支持索引(下标)的方式访问元素。
2)序列式容器支持切片操作,而非序列式容器不支持切片操作。
1.字符串
1.1 字符串语法格式
一般使用两个单引号或者两个双引号,很少使用三引号。
1.2 字符串遍历
字符串属于序列式容器,支持依据索引的操作。
1)可以使用 while 循环来访问字符串容器中的每一个字符元素。
注意:序列式容器的索引都是以 0 开始的,并不是从 1 开始。
my_string = '我今年10岁了!' i = 0 while i < len(my_string): print(my_string[i], end=' ') i += 1
2) python 是一门简单易用的语言,对于容器的遍历,提供了另外一种简单方式,for 循环。
my_string = '我今年10岁了!' for v in my_string: print(v, end=' ')
1.3 字符串替换
使用字符串的 replace 方法,该方法默认会将字符串中所有指定字符或子串替换为新的字符串,也可以指定第三个参数,替换多少次。
poetry = '远看泰山黑乎乎,上头细来下头粗,茹把泰山倒过来,下头细来上头粗。茹' # 将所有的‘茹’ 替换为 ‘如’ right_poetry = poetry.replace('茹', '如') print(right_poetry) # 只替换第一次出现的‘茹’ right_poetry = poetry.replace('茹' , '如' , 1) print(right_poetry)
1.4 字符串查找 和 切片
例如:
现在有一邮箱地址如下:
user_email = 'simagoushen@itcast.cn'
a. 我们希望从邮箱地址字符串中获取用户名和邮箱后缀名, 那么这个问题如何解决?
1.由分析可知,@ 符号之前为用户名,@ 符号之后的内容为邮箱后缀名。
2.首先获得@ 符号的位置,从开始位置截取到 @ 符号位置,即可获得用户名。
3.从 @ 符号位置开始截取到字符串最后,即可获得邮箱后缀名。
b. 如何获得@ 符号的位置?
我们可以使用字符串提供的 find 方法,该方法可返回查找字符串第一次出现的位置,查找字符串不存在则会返回 -1.
注意: find 方法默认从字符串 开始位置 ( 0 位置 )开始查找,我们也可以指定从哪个位置范围开始查找,设置 find 的第二个参数表示从哪个位置开始查找,第三个参数,表示查找结束位置。
poetry = '远看泰山黑乎乎,上头细来下头粗,茹把泰山倒过来,下头细来上头粗。' # 从 10 位置开始查找 ‘上’ position = poetry.find('上', 10 ,100) print(position)
c. 如何获得指定范围的字符串?
字符串属于序列式容器,可以根据索引获得某一个字符,也可以根据由两个索引标识的区间获得区间内的字符序列。
poetry = '远看泰山黑乎乎,上头细来下头粗,茹把台上倒过来,下头细来上头粗。' # 从 0 位置开始到 7 位置之前,不包含 7 位置字符 print(poetry[0:7]) # 起始位置不写,默认就是0 print(poetry[:7]) # 从 0 位置开始到最后,结束位置不写默认字符最后一个位置的下一个位置。 print(poetry[9:]) # 步长,每个2个字符选取一个字符串,组成一个序列 print(poetry[0:7:2]) # 如果步长为负数,那么起始位置参数和结束位置参数就会反过来。 print(poetry[6: : -1]) # 位置也可以使用负数 print(poetry[-3: -1]) print(poetry[-3: ]) print(poetry[: : -1])
d. 下面我们看看你如何解决这个问题?