python语言基础
Day 1
2026年3月6日
第一天
注释
对代码的解释,
- 单行注释:#
- 多行注释:三个单引号或双引号
In [ ]:
"""
学习使我快乐
"""
'''
学习使我快乐
'''
print("hello World!"); # 输出语句
# hello World!
变量
命名规范:
- 长度不限制,只能包含:字母数字下划线;
- 第一个字符不能是数字、必须字母或下划线;
- 不是python关键字;
- 命名区分大小写;
- 不建议写成userName(不规范);
常量:没有约束,默认规范全大写
In [ ]:
user_name = 'admin' # 定义一个变量
_name = 'root'
# 1admin = 'admin' # 不能数字开头
_NAME = 'xiaoming'
print(_name)
# root
print(_NAME)
# xiaoming
import keyword
print(keyword.kwlist) # 关键字不能作为变量名
# ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class',
# 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global',
# 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return',
# 'try', 'while', 'with', 'yield']
In [ ]:
num1,num2 = 10,20
print('num1:',num1,'num2:',num2)
# num1: 10 num2: 20
a = b = c = d = 30
print('a:',a,'b:',b,'c:',c,'d:',d)
# a: 30 b: 30 c: 30 d: 30
PI = 3.14 # 常量
print(PI)
# 3.14
作用域
- 全局变量:程序执行时创建,程序结束时销毁;
global声明全局变量,可以函数内修改 - 局部变量:函数调用时创建,调用结束时销毁;
nonlocal声明局部变量,可以嵌套函数内修改
数据结构
- 数值(整型int、浮点型float):数值、没有加引号;
- 布尔类型bool(真true、假flase):比较场景;
- 字符串类型:必须引号包裹,单行字符串推荐单引号,多行必须三个单引号或双引号;
- python中变量的数据类型可以改变
In [ ]:
stu_age = 18
stu_height = 178.5
print(type(stu_age)) # <class 'int'>
print(type(stu_height)) # <class 'float'>
is_True = 18>20
type(is_True) # bool
In [ ]:
user_name = "lihua"
print(user_name) # lihua
print(type(user_name)) # <class 'str'>
user_name = True
print(user_name) # True
print(type(user_name)) # <class 'bool'>
In [ ]:
stu_name = '小明'
stu_sex = '男'
stu_motherland = """
中国
甘肃
"""
print(stu_name,stu_sex,stu_motherland)
# 小明 男
# 中国
# 甘肃
msg = "今天晚饭'好吃'吗?" # 多个单引号或双引号,内外必须要不同种类引号
print(msg) # 今天晚饭'好吃'吗?
msg = 'hello \'' # 转义符'\'
print(msg) # hello '
字符串格式化输出
In [ ]:
# 字符串拼接
name = "name"
age = 18
height = 178.5
# 1、f-strings
msg = f"{name}今年{age}岁,身高{height}"
print(msg) # name今年18岁,身高178.5
# 2、%s: 字符串, %f:浮点,%d:整型
msg = "%s今年%d岁,身高%.2f" %(name,age,height)
print(msg) # name今年18岁,身高178.50
# 3、str.format() 可复用
msg = "{0}今年{1}岁,身高{2}".format(name,age,height)
print(msg) # name今年18岁,身高178.5
msg = "{name}今年{age}岁,身高{height}".format(name=name,age=age,height=height)
print(msg) # name今年18岁,身高178.5
In [ ]:
str = 'python'
print(str[5]) # 索引n
# n
print(str[1:4]) # 切片,步长默认1 [start:end],start包含,end不包含
# yth
print(str[1:4:1]) # 正步长 start<end
# yth
print(str[4:1:-1]) # 负步长 start>end
# oht
print(str[:]) # start默认0,end默认末尾
# python
print(str[::])
# python
print(str[::-1]) # start默认-1,end默认开头
# nohtyp
In [ ]:
print(str[0:4]) # pyth
print(str[0:4:2]) # pt
print(str[0:10:1]) # python
print(str[0:-2:1])# 正负混合,负索引值替换为正
# pyth
print(str[-2:-6:-1])
# ohty
print(str[6:8])
#
In [ ]:
str1 = '123'
str2 = '234'
print(str1+str2)
# 123234
p y t h o n
0 1 2 3 4 5
-6 -5 -4 -3 -2 -1
In [ ]:
# print(str[10]) # 索引越限报错
# str[3] = 's' # 字符串中字符不能修改
列表
定义:list_name = [元素1,元素2,元素n]
添加:
append (元素n)末尾新增
insert (n,元素n)指定位置新增
删除:
del list_name[n]
修改:
list_name[n] = 元素n
查询:
name = list_name[n]
In [ ]:
list_name = ['中国','俄罗斯','美国','英国','新加坡']
print(list_name)
# ['中国', '俄罗斯', '美国', '英国', '新加坡']
list_name.append('日本')
print(list_name)
# ['中国', '俄罗斯', '美国', '英国', '新加坡', '日本']
list_name.insert(3,'澳大利亚')
print(list_name)
# ['中国', '俄罗斯', '美国', '澳大利亚', '英国', '新加坡', '日本']
del list_name[6]
print(list_name)
# ['中国', '俄罗斯', '美国', '澳大利亚', '英国', '新加坡']
list_name[5] = '朝鲜'
print(list_name)
# ['中国', '俄罗斯', '美国', '澳大利亚', '英国', '朝鲜']
# print(list_name[8]) # 越界报错
print(list_name[2:8]) # 切片越界不报错
# ['美国', '澳大利亚', '英国', '朝鲜']
# 是否包含in 适用于列表、字符串
print('中国' in list_name) # True
In [ ]:
num1 = [10,20]
num2 = [60,70]
num_str = [10,'小明',True] # 列表中元素不需要同一类型,但不建议
print(num1+num2) # [10, 20, 60, 70]
print(num1*5) # [10, 20, 10, 20, 10, 20, 10, 20, 10, 20]
num3 = [[1,2,3],[4,5,6],[7,8,9]]
print(num3) # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
元组
tuple = (value1,value2)
不能增删改元素
查:
tuple[0]
tuple[1:3]
删 del tuple
In [ ]:
tuple_name = ('Java','C','Python','C++')
print(tuple_name[1]) # C
print(tuple_name[1:4]) # ('C', 'Python', 'C++')
tuple_name1 = ('PHP','C#')
print(tuple_name + tuple_name1) # +连接两个元组
# ('Java', 'C', 'Python', 'C++', 'PHP', 'C#')
list_name = list(tuple_name)
print(type(list_name)) # <class 'list'>
list_name.append('C#')
print(type(tuple(list_name))) # <class 'tuple'>
print(tuple(list_name)) # ('Java', 'C', 'Python', 'C++', 'C#')
字典
dict={key1:value1,key2:value2}
查询 key索引,get()
新增 新增不存在的key
修改 新增已存在的key
删除 del函数
不可+
列表、元组、字典区别:
列表:可变、有序、可重复
元组:不可变、有序,数据保护场景
字典:无序键值对的集合,键必须唯一
不可变对象:数值、字符串、元组 id()验证内存地址
可变对象:列表、字典
In [ ]:
list_01 = [1,2,3]
list_02 = list_01 # 将list_01的引用地址指向list_02
list_01.append(5)
print(list_02) # [1, 2, 3, 5]
# 如何不指向地址
# 方案1:切片 list_01[:]
# 方案2:list() list(list_01)
# 方案3:浅拷贝(元素为数值、字符串) list_01.copy()
# 方案4:深拷贝(元素为列表等数据结构) copy.deepcopy(list_01)
函数
def 函数名(参数1,参数2):
执行程序
return 返回值
- 位置参数:定义函数的参数与调用函数的参数类型、个数、顺序完全一致
- 关键字参数:调用时(参数1 = 值1,参数2 = 值2),顺序可不一致
- 可变参数:定义时(*args)、必须放位置参数最后面、最终由元组tuple()接收数据,**args 字典dict()接收
- 默认值参数:定义时(参数 = 值)、必须放位置参数最后面
len() eval() max() sum()
In [ ]:
def method01(num1,num2):
num3 = num1+num2+num1*num2
return num3
num4 = method01(1,2)
print(num4)
# 5
str = 'Chinese'
print(len(str)) # 字符串长度
# 7
print(str.count('e')) # 字符串中字符出现的次数
# 2
# help(len)
print(str.index('e')) # 返回指定字符或字符串的下标(索引值)首次
# 4
print(str.rfind('e')) # 返回指定字符或字符串的下标(索引值)最后一次
# 6
print(str.replace('ese','a')) # 字符串替换(替换前,替换后)
# China
# 去掉前后空格
str = ' I am Chinese. '
print(str.strip()) # I am Chinese.
# 字符串分割
text = '我爱我的祖国,我爱我的家,我爱我的dog'
print(text.split(','))
# ['我爱我的祖国', '我爱我的家', '我爱我的dog']
# 字符串是否以指定字符串开头
dian_biao_name = "Q_cbshdidjiajdoijiejiojeojdoewjdoeojdojdowjodjwojowjfojwe"
print(dian_biao_name.startswith('Q')) # True
# 字符串是否以指定字符串结尾
agent_name = 'start.java'
print(agent_name.endswith('.java')) # True
In [ ]:
file = ['main.py','hello.c','main.java','hello.cpp','new.txt']
def whatIsThisFile(filename):
"""获取指定文件名的文件类型"""
fileType = {'py':'Python文件','c':'C文件','java':'Java文件','cpp':'C++文件'}
if fileType.get(filename[filename.rfind('.')+1:]):
return fileType.get(filename[filename.rfind('.')+1:])
else:
return '其他文件'
for i in range(len(file)):
print(f"{file[i]}是一个{whatIsThisFile(file[i])}")
# main.py是一个Python文件
# hello.c是一个C文件
# main.java是一个Java文件
# hello.cpp是一个C++文件
# new.txt是一个其他文件
运算符
算数运算符
加减乘除 + - * /
整除 //
求余 %
次方 **
In [ ]:
a = 10
b = 36
c = 60
print(a+b,a-b,a*b,a/b) # 46 -26 360 0.2777777777777778
print(b//a,b%a,c**2) # 3 6 3600
a += 2
print(a) # 12
b %= 5
print(b) # 1
比较运算符
等于 ==
不等于 !=
大于等于 >=
小于等于 <=
返回布尔型
逻辑运算符
且and 或or 非not
成员运算符
存在in 不存在not in
小括号>算术>比较(成员)>逻辑
In [ ]:
str_1 = '我爱我的祖国'
print('爱' in str_1) # True
list_1 = [12,23,34]
print(12 in list_1, [12,23] in list_1) # True False
tuple_1 = (12,2,3,5)
print(12 in tuple_1,(12,5) in tuple_1) # True False
dict_1 = {'one':1,'two':2}
print('one' in dict_1) # True
输入输出
input() int(input())
In [ ]:
name = input("请输入姓名:")
print(f"姓名为{name}") # 姓名为李明
条件语句
if 条件:
elif 条件:
else:
循环语句
while循环
while 条件: 执行语句
for循环
遍历字符串、元组、列表、字典
range(start,end,step)
In [ ]:
str = None # 0 '' () {} [] 假
# str = {'1':1} # 1 '1' ('1') ['1'] {'1':1} 真
if str:
print("真")
else:
print("假")
假
In [ ]:
i = 0
a = 0
list_1=[]
while i < 5:
list_1.append(int(input(f"请输入第{i+1}名学员成绩:")))
a += list_1[i]
i += 1
print("学员成绩依次是:",list_1,"平均成绩为:",a/5)
# 学员成绩依次是: [90, 40, 80, 60, 30] 平均成绩为: 60.0
In [ ]:
i = 0
dict_score = {}
while i < 3:
name = input(f"请输入第{i+1}名学员姓名:")
j = 0
list_score = [0,0,0]
sum = 0
while j < 3:
list_score[j]=(int(input(f"\t请输入{name}的第{j+1}门成绩:")))
if list_score[j] > 100 or list_score[j] < 0:
print(f'输入成绩{list_score[j]}不合适,请重新输入!!!')
list_score[j] = 0
# break # 退出所在的while循环756
continue # 退出本轮的while循环
sum += list_score[j]
j += 1
list_score.append(round(sum/3,1))
dict_score[name] = list_score
print(f"学员{name}的成绩分别是{list_score[0]}、{list_score[1]}、{list_score[2]}、平均成绩为{list_score[3]}")
i += 1
# 学员小明的成绩分别是89、76、78、平均成绩为81.0
# 学员小亮的成绩分别是76、82、90、平均成绩为82.66666666666667
# 学员小吕的成绩分别是86、94、62、平均成绩为80.66666666666667
print(f"成绩为{dict_score}")
# 成绩为{'小明': [89, 76, 78, 81.0], '小亮': [76, 82, 90, 82.66666666666667], '小吕': [86, 94, 62, 80.66666666666667]}
In [ ]:
for item in ('zhangsan', '历史', 'English'):
print(item)
# zhangsan
# 历史
# English
for (key,value) in {'name':'小明','age':18}.items():
print(key,value)
# name 小明
# age 18
for i in range(5):
print(i)
# 0
# 1
# 2
# 3
# 4
异常
try:
可能引发异常的执行代码
except 异常类 as e:
异常后执行代码
- Exception 父类异常,写在最后
- ValueError 控制台录入值转换异常
- IndexError 列表越界异常
else: 如果try中没有出现异常执行 finally: 无论是否出现异常,都会执行,负责资源释放
raise:抛出异常
In [2]:
try:
num1 = [1,2]
num1[1]
num2 = int(input("请输入数字:"))
except IndexError as e:
print("数组越界",e)
except ValueError as e:
print("数值转换失败",e)
except Exception as e:
print("父类异常",e)
else:
print("else")
finally:
print("finally")
else
finally
In [6]:
class FileHelpError(Exception):
def __init__(self,message = "紧急文件"):
super().__init__(message)
def filename():
file_name = input("请输入文件名:")
if '-help-' in file_name:
raise FileExistsError("文件名异常")
return file_name
while True:
try:
print(filename())
break
except FileExistsError as e:
print(e,"请重新输入")
文件名异常 请重新输入
1
浙公网安备 33010602011771号