Python 3入门指南
1. Python 的安装
-
在 Windows 上安装
- 访问 Python 官方网站。
- 下载最新的 Windows 安装程序(推荐选择 64-bit installer)。
- 运行下载的
.exe
文件。 - 在安装向导的第一个界面,一定要勾选 “Add Python to PATH” 选项。
- 点击 “Install Now” 开始安装。
-
在 Linux 上安装
- 对于基于 Debian/Ubuntu 的系统:
sudo apt update && sudo apt install python3
- 对于基于 Red Hat/CentOS 的系统:
sudo yum install python3
- 对于基于 Debian/Ubuntu 的系统:
-
在 macOS 上安装
- 在终端中安装 Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 使用 Homebrew 安装 Python:
brew install python
- 在终端中安装 Homebrew:
2. 变量
- 变量就像一个“容器”,用来存储数据。
- 语法:
变量名 = 值
- 变量命名规范:
- 只能包含字母、数字、下划线。
- 不能以数字开头。
- 不能使用关键字。
- 区分大小写。
- 命名风格:
- 小驼峰命名法(camelCase):
getNameByLine = "zhangsan"
- 大驼峰命名法(PascalCase):
class GetNameByLine:pass
- 蛇形命名法(snake_case):
get_name_by_line = "zhangsan"
- 小驼峰命名法(camelCase):
3. 数据类型
-
基本类型:
int
、float
、string
、boolean
-
type()
查看数据类型 -
类型转换:
str
->int
:int(a)
str
->float
:float(a)
int
->str
:str(a)
float
->str
:str(a)
int
->float
:float(a)
float
->int
:int(a)
-
输入整数求和与差:
one = input("请输入第一个数:") two = input("请输入第二个数:") print(one + two) print(int(one) + int(two)) print(float(one) + float(two)) print(int(one) - int(two)) print(float(one) - float(two))
4. 运算符
- 赋值运算符:
=
- 算术运算符:
+
,-
,/
,*
,%
,//
,**
- 复合赋值运算符:
+=
,-=
,*=
,/=
,//=
,**=
,%=
- 三位整数拆解:
num = int(input("请输入一个三位整数")) print("个位数是:", num % 10) print("十位数是:", num // 10 % 10) print("百位数是:", num // 100)
- 关系运算符:
==
,!=
,<
,>
,<=
,>=
,is
- 逻辑运算符:
and
,or
,not
5. 条件语句
if
格式:if 条件:# 条件成立
if-else
格式:if 条件:# 条件成立 else:# 条件不成立
if-elif-else
格式:if 条件:# 条件成立 elif 条件1:# 条件成立 else:# 条件不成立
- 猜数字游戏:
import random ran = random.randint(1, 10) guess = int(input("请输入数字:")) if ran == guess:print("恭喜你猜对了") elif ran > guess:print("你猜的数字小了") else:print("你猜的数字大了")
6. 循环语句
while
循环格式:while 条件:# 要执行的代码
for
循环格式:for 变量 in 序列:# 要执行的代码
- 打印 1-10:
n = 1 while n <= 10:print(n)n += 1
- 1-50 中被 3 整除的数:
n = 1 while n <= 50:if n % 3 == 0:print(n)n += 1while n <= 50 and n % 3 == 0:print(n)n += 1
for
循环示例:for i in range(5):print(f"当前数字是: {i}")
- 循环控制:
break
和continue
break
:终止整个循环。continue
:跳过本次循环,进入下一次迭代。
7. 字符串(str
)
is
vs==
:is
:比较内存地址id()
。==
:比较值。
- 索引: 正索引 (
0
到len-1
) 和反向索引 (-1
到-len
)。 - 切片:
s[start:end:step]
s = 'ABCDEFG' print(s[1:4]) # BCD print(s[:5]) # ABCDE print(s[-3:]) # EFG print(s[::-1]) # GFEDCBA print(s[::-2]) # GECA print(s[6:0:-2]) # GEC
- 常见操作:
''' 替换 replace 切割 split rsplit splitlines partition rpartition 修改大小写 capitlize title upper lower 空格处理 ljust rjust center lstrip rstrip strip 字符串拼接 join ''' s = '这是小周的Python学习笔记,欢迎大家阅读,小周很乐意帮助你' result = s.replace('小周', 'yanleaf', 1) # 替换replace(old,new,count)默认替换全部,可以通过count指定替换次数 print(result) s = '小周 小明 小红' result = s.split(' ', 1) print(result) # split('分隔符',maxsplit)返回一个列表 maxsplit指定最多分割次数 rsplit()跟split同理 s = '''小周加油 小周要加油 小周努力加油 ''' result = s.splitlines() # 按行分割 print(result) s = '小周 小明 小红' result = s.partition(' ') # partition()返回一个元组 print(result)s = 'hello WOrld' result = s.title() # title() 首字母大写 print(result) result = s.upper() # upper() 全字符串大写 print(result) result = s.lower() # lower() 全字符串小写 print(result) result = s.capitalize() # capitalize() 第一个单词首字母大写 print(result)# admin admin s = ' admin ' print(len(s)) result = s.strip() # 去除左右两边空格 print(len(result)) print(result) result = s.lstrip() # 去除左侧空格 print(len(result)) print(result) result = s.rstrip() # 去除右侧空格 print(len(result)) print(result) s = 'hello world' result = s.center(20) # center(width,fillchar) 居中 print(result) result = s.ljust(20) # ljust(width,fillchar) 左对齐 print(result) result = s.rjust(20) # rjust(width,fillchar) 右对齐 print(result) s1 = 'hello' s2 = 'world' result = ','.join([s1, s2]) print(result) # 格式化 ''' %d %s %f print('name is %s' %xx) format ''' name = '小周' age = 18 height = 1.75 print('name is %s,age is %d,height is %f' % (name, age, height)) print('name is {},age is {},height is {}'.format(name, age, height)) name = '小明' age = 18 result = 'name is {0},age is {1},我也是{1}'.format(name, age) print(result) result = 'name is {name},age is {age},我也是{age}'.format(name='yanleaf', age=21) print(result)name = '小明' score_chinese = 80 score_math = 90 s = '{0}本次考试数学分为:{2},语文分数为:{1},英语分数:{2}'.format(name, score_math, score_chinese) print(s) s = '{name}本次考试数学分为:{score_math},语文分数为:{score_chinese},英语分数:{score_math}'.format(name='小周', score_math=90, score_chinese=80) print(s)
8. 列表(List)
-
定义:
[]
-
获取元素: 通过索引和切片。
-
切片示例:
''' 列表 空列表 [] 有内容的列表 ['A','B'],[1,2,3,4] [3.5,3.9] ''' list1 = [] # print(type(list1)) list2 = ['牛奶', '面包', '火腿肠', '辣条', '臭豆腐', '食盐', '方便面'] list3 = ['牛奶', '面包', '火腿肠', '辣条', '臭豆腐'] # 获取列表里面元素 通过索引(下标) print(list3[0]) print(list3[3]) # 切片 0 1 2 不['牛奶', '辣条']包含2 所以得出为['牛奶', '面包'] print(list3[:2]) # 没有指定 start 和 end,所以默认从最后一个元素开始(因为 step 是负数)。 # step = -3 表示从后往前每隔两个元素取一个值。 # 第一个值 索引(4)臭豆腐 然后减3 得出索引(1)面包,1-3=-2 超出索引停止切片 print(list3[::-3]) # 食盐 辣条 print(list2[-2:-5:-2]) # [start:end:step] print(list2[::3]) print(list2[-2::-5])
-
添加、删除、修改、查询:
''' 添加 删除 修改 查询 ''' list1 = [] list2 = ['面包'] list1.append('牛奶') list1.append('吐司') list1.append('鸡蛋') # print(list1) list2.append('薯条') # print(list2) # list1,list2 # list1=list1+list2 # print(list1)# list1.extend(list2) # extend 扩展 # print(list1) ''' 数字 n=1+3 字符串 s= 'aa'+'bb' ---> aabb 列表 list0=[1,2,3]+['a','b']-->[1,2,3,'a','b'] '''''' 买多件 商品名称 价格 数量 ''' # isBoolean = True # container = [] # 存放商品信息 # while isBoolean: # name = input("请输入商品名") # price = input("请输入商品价格") # number = input("请输入商品数量") # goods = [name, price, number] # # 添加商品到container # container.append(goods) # answer = input("是否继续添加,按q或Q退出添加") # if answer.lower() == 'q': # isBoolean=False # print("-----"*4) # # 遍历container # print('名称\t价格\t数量\t') # for goods in container: # print(goods[0],float(goods[1]),goods[2])''' 删除 pop remove clear pop(index):根据下表删除列表元素,超出范围会出现IndexError: pop index out of range pop()从后往前依次删除 remove(element):根据元素名称删除,如果不存在则返回ValueError: list.remove(x): x not in list 如果列表中存在多个同名元素element 只会删除喻道德第一个元素 后面元素则不会被删除 关键字in: 元素 in 列表 表示元素是否在列表中 返回值为bool ''' list1 = ['牛奶', '牛奶', '面包', '吐司', '鸡蛋', '牛奶', '火腿肠', '牛奶'] list1.pop(-1) print(list1) print("-----"*6) list1.pop() print(list1) list1.pop() print(list1) # remove 删除指定元素 list1.remove('吐司') print(list1) # 判断是否存在要删除的元素 # if '吐司' in list1: # list1.remove('吐司') # print(list1) # else: # print("没有吐司")# 删除多个元素 如果有紧挨着则会漏删一个 # for i in list1: # if i == '牛奶': # list1.remove(i) # print(list1)n = 0 while n < len(list1):if list1[n] == '牛奶':list1.remove('牛奶')else:n += 1 print(list1)li = [1, 1, 1, 2, 3] elem = 1 rusult_li = [] for i in li:if i != elem:rusult_li.append(i) li = rusult_li print(li) for i in range(len(list1)):if list1[i] == '牛奶':list1.remove('牛奶')i -= 1 print(list1)# 修改 insert # insert(位置,元素) 元素占了位置,其他元素只能向后移动 # index(元素) 根据元素找到该元素下标 返回值是下标位置 list2 = [1, 2, 3, 4, 5, 6, 7] list2.insert(1, 8) # 在索引1位置插入8 print(list2) weizhi = list2.index(5) list2[weizhi] = 8 # print(list2)# 列表.count(元素) 返回整数 返回值是0则表示不存在此元素 存在则返回个数 list1 = [1, 5, 4, 6, 7, 8, 9, 10] print(list1.count(5))del list1[3] # 删除指定索引位置的元素 print(list1)list1.clear() # 删除列表中所有元素 print(list1)a = 'hello' b = a c = a del a print(b,c) l1 = [1, 2, 3] l2 = l1 l3 = l1 del l1 print(l2,l3)
-
排序:
#### 生成8个1-20随机整数 保存到列表中遍历打印 import randomnumbers = [] for i in range(8):num = random.randint(1, 20)# print(num)numbers.append(num) print(numbers) # numbers.sort() # 默认升序 从小到大 可以通过reverse参数控制升序还是降序 # print(numbers) # numbers.sort(reverse=True) # print(numbers) numbers.reverse() # 反转 print(numbers)
-
冒泡排序:
### 冒泡排序 numbers = [5, 1, 4, 3, 2, 6, 7, 9, 8, 10] for j in range(0, len(numbers) - 1): # 外层循环控制排序轮数for i in range(0, len(numbers) - 1 - j): # 内层循环控制每轮排序if numbers[i] > numbers[i + 1]: # 判断相邻元素大小a = numbers[i] # 交换相邻元素numbers[i] = numbers[i + 1] # 赋给相邻元素numbers[i + 1] = a print(numbers)
‘’’
9. 元组(Tuple)
元组的特点:
- 元素不能修改。
- 使用小括号
()
。
元组的定义:
名 = ()
- 注意: 如果元组只有一个元素,必须在元素后添加逗号,例如
('aa',)
。
t1 = ()
print(type(t1))
t2 = ('aa',)
print(type(t2))
t2 = ('a', 'b', 'c', 'a')
元组的常用操作:
-
索引和切片:
print(t2[0]) print(t2[1:]) print(t2[::-1])
-
查找元素:
count()
:统计指定元素出现的次数。index()
:获取指定元素第一次出现的下标位置。- 使用
in
关键字判断元素是否存在。
n = t2.count('a') print(n) n = t2.index('a') print(n) print("---" * 4) n = t2.index('a', 0, 3) # 从0开始找,3结束(不包含索引3) print(n) print("---" * 4) n = t2.index('a', 1) # 从索引1开始找 print(n) print("---" * 4) if 'c1' in t2:print('c在元组中') print("不存在") # 这行代码在 if 条件不满足时会被执行 print("---" * 4)
-
遍历:
for i in t2:print(i)
-
元组与列表的转换:
- 元组转列表:
list(tuple)
- 列表转元组:
tuple(list)
- 元组转列表:
10. 字典(Dictionary)
字典的特点:
- 使用花括号
{}
。 - 存储键值对
key: value
。 - **键(key)**必须是唯一的,**值(value)**可以重复。
字典的添加与修改:
- 添加/修改元素:
字典名[key] = value
- 如果键不存在,则添加新键值对。
- 如果键已存在,则替换原来的值。
dict1 = {}
print(type(dict1))
dict1['name'] = '张三'
print(dict1)
dict1['name'] = '张三1'
print(dict1)
dict1['age'] = 18
dict1['sex'] = '男'
print(dict1)
# 改变年龄
dict1['age'] = 21
print(dict1)
dict1['source'] = 90
'''
如果字典不存在键 则添加
如果字典存在键 则修改
'''
字典的删除:
pop(key)
:根据键删除键值对,并返回被删除的值。popitem()
:删除并返回最后一个键值对(元组形式)。del 字典名[key]
:删除指定的键值对。clear()
:清空字典。
<
book = {'书名': 'python','出版社': 'xx出版社','作者': '小周','价格': 66.6
}
# book.clear()
# print(book)# r=book.pop('价格')
# print(r)
print("---" * 4)
# r = book.popitem()
# print(r)
# print(book)del book['作者']
print(book)
print("---" * 4)
字典的查询:
get(key, default)
:根据键获取值,如果键不存在,返回默认值(不报错)。字典名[key]
:根据键获取值,如果键不存在,会报错KeyError
。len()
:获取字典的长度(键值对的数量)。
books = {'书名1': 'python', '价格': 20, '作者': '小周'}
value = books.get('书名2', '默认')
print(value)
# print(len(books))
value = books['书名1']
print(value)
字典的遍历:
- 直接遍历字典,得到的是所有的键。
values()
:获取所有的值。items()
:获取所有的键值对(元组列表)。
# for key in books:
# print(key)print("----" * 4)
print(list(books.values())) # ['python', 20, '小周']
print("----" * 4)
for value in books.values():print(value)
print("----" * 4)
print(books.items())
print("----" * 4)
for i in books.items():print(i)
print("-----" * 4)
# 获取键值对
for key, value in books.items():print(key, value)
字典的其他方法:
setdefault(key, value)
:如果键不存在,则添加,如果存在,则不做任何操作。update(other_dict)
:合并其他字典。fromkeys(seq)
:创建一个新字典,以序列seq
中的元素作为键。
books.setdefault("书名", "python3基础语法")
print(books)
dict1 = {'a': 10, 'b': 20}
# books.update(dict1)
# print(books)
resul = books.fromkeys(dict1)
print(resul)
11. 集合(Set)
集合的特点:
- 使用花括号
{}
。 - 没有重复元素。
- 无序。
集合的定义:
{} -> {元素, 元素, ...}
-> 集合。{} -> {k, v}
-> 字典。- 使用
set()
创建空集合。
set1 = {'zhangsan'}
print(type(set1))list1 = {1, 3, 6, 9, 5, 7, 9, 8}
set2 = set(list1)
print(set2)
set3 = set() # 空集合set
print(type(set3))
print(len(set3))
集合的添加与删除:
add()
:添加单个元素。update()
:添加多个元素(来自另一个集合或可迭代对象)。remove(element)
:删除指定元素,如果元素不存在会报错KeyError
。discard(element)
:删除指定元素,如果元素不存在,不报错。pop()
:随机删除并返回一个元素。del set1
:删除整个集合。clear()
:清空集合。
set3.add("三体")
print(set3)
set3.add("盗墓笔记")
print(set3)# append extend --> list
# add update --> set
set1.update(set3)
print(set1)set1 = {'Y6LD', '8E5Y', 'YDMI', 'D1F3', 'AFIP'}
set1.remove('Y6LD')
print(set1)
set1.discard('Y6LD')
print(set1)
# del set1
# set1.clear()
set1.add('ABCD')
print(set1)
print("---" * 4)
set1.pop()
print(set1)
验证码生成示例:
- 使用
set
的不重复特性来生成验证码。
'''
产生五组(不允许重复) 字母和数字组成4位验证码
最终打印输出五组验证码
'''
# code_list=set()
# import random
# s='QWERTYUIOPASDFGHJKLZXCVBNM123456789'
# while True:
# code=''
# for i in range(4):
# index=random.randint(0,len(s))
# code+=s[index]
# code_list.add(code)
# if len(code_list)==5:
# break
# print(code_list)
集合的运算:
- 交集:
intersection()
或&
。 - 并集:
union()
或|
。 - 差集:
difference()
或-
。
set1 = {'1', '2', '3', '4'}
set2 = {'3', '4', '5', '6'}
print(set1.intersection(set2)) # &
print(set1.union(set2)) # |
print(set1.difference(set2)) # -
print(set1 | set2) # 并集
print(set1 & set2) # 交集
print(set1 - set2) # 差集
12.列表推导式 (List Comprehensions)
列表推导式是一种简洁而强大的语法,可以根据已有的列表或可迭代对象快速创建新列表。它能让你的代码更精炼、可读性更高。
基本格式:[ 表达式 for 变量 in 可迭代对象 ]
这种格式用于对可迭代对象中的每个元素执行相同的操作,然后将结果放入新列表中。
案例1:生成 1 到 20 的整数列表
传统的 for
循环写法:
list1 = []
for i in range(1, 21):list1.append(i)
print(list1)
列表推导式写法:
lists = [i for i in range(1, 21)]
print(lists)
带有 if
条件的格式:[ 表达式 for 变量 in 可迭代对象 if 条件 ]
这种格式用于在创建新列表时,只包含满足特定条件的元素。
案例2:生成 1 到 100 之间的所有偶数
传统的 for
循环写法:
list1 = []
for i in range(1, 101):if i % 2 == 0:list1.append(i)
print(list1)
列表推导式写法:
list1 = [i for i in range(1, 101) if i % 2 == 0]
print(list1)
案例3:从列表中筛选出所有只包含字母的字符串
list2 = ['62', 'hello', '100', 'world']
list3 = [word for word in list2 if word.isalpha()]
print(list3)
带有 if-else
的格式:[ 表达式1 if 条件 else 表达式2 for 变量 in 可迭代对象 ]
这种格式可以根据条件对每个元素进行不同的处理。
案例4:根据首字母对字符串进行大小写转换
需求: 遍历一个字符串列表。如果字符串以 h
开头,则首字母大写;否则,所有字母都转为大写。
list2 = ['62', 'hello', '100', 'world']
result = [i.title() if i.startswith('h') else i.upper() for i in list2]
print(result)
案例5:根据数字的奇偶性,进行不同的数学运算
需求: 遍历 1 到 10,如果是偶数则加 10,如果是奇数则减 5。
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = [num + 10 if num % 2 == 0 else num - 5 for num in numbers]
print(result) # 输出:[-4, 12, -2, 14, 0, 16, 2, 18, 4, 20]
嵌套循环生成笛卡尔积
可以使用嵌套的列表推导式来简化嵌套循环。
需求: 生成所有由 x
和 y
组成的坐标点,其中 x
范围是 1 到 3,y
范围是 A
到 C
。
coords = [(x, y) for x in range(1, 4) for y in 'ABC']
print(coords)
# 输出:[(1, 'A'), (1, 'B'), (1, 'C'), (2, 'A'), (2, 'B'), (2, 'C'), (3, 'A'), (3, 'B'), (3, 'C')]
字典推导式
列表推导式也可以用于生成字典。语法类似于列表推导式,只是用 {}
替代了 []
。
需求: 将一个列表转换为字典,键为元素,值为元素的平方。
nums = [1, 2, 3, 4, 5]
squares = {num: num**2 for num in nums}
print(squares) # 输出:{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}