💡 课堂例题
第 1 章 · Python 语言介绍 · 共 7 题 · 代码均取自课堂讲稿
1
第一个 Python 程序
使用 print() 输出文字,演示单双引号用法,以及单行注释(#)和多行注释("""...""")的写法。
python
print("我爱python!")
print('我来了')
"""
上面的代码只有一个语句,在这个语句中,我们用到了一个名为print的函数,
它可以帮助我们输出指定的内容;print函数圆括号中的'hello, world'是一个字符串,
它代表了一段文本内容;在 Python 语言中,我们可以用单引号或双引号来表示一个字符串。
大家可以试着修改上面的代码,比如将单引号中的hello, world换成其他内容
或者多写几个这样的语句,看看会运行出怎样的结果。
需要提醒大家的是,写 Python 代码时,最好每一行只写一条语句。
虽然我们可以使用;作为分隔将多个语句写在一行中,
但是这样做会让代码变得非常难看,不再具备良好的可读性。
"""
'''
Python 中有两种形式的注释:
单行注释:以#和空格开头,可以注释掉从#开始后面一整行的内容。
多行注释:三个引号(通常用双引号)开头,三个引号结尾,
通常用于添加多行说明性内容。
注释是编程语言的一个重要组成部分,用于在代码中解释代码的作用,
从而达到增强代码可读性的目标。当然,我们也可以将代码中暂时不需要运行的代码段
通过添加注释来去掉,这样当你需要重新使用这些代码的时候,
去掉注释符号就可以了。简单的说,注释会让代码更容易看懂
但不会影响代码的执行结果。
'''
2
关键字与标识符
查看 Python 全部 35 个关键字,掌握标识符的命名规则。
python
import keyword
keyword.kwlist
# 所有关键字:35个
# 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
# 需要注意的是,Python中的所有关键字是区分字母大小写的。
# 例如,for是关键字,但是FOR就不属于关键字。
# 以下是合法的标识符:
MYNAME = "合法"
name = "合法"
name1 = "合法"
my_name = "合法"
# 以下是非法的标识符(取消注释会报错):
# 4gen = "非法" # 以数字开头
# for = "非法" # 属于Python中的关键字
# $book = "非法" # 包含了特殊字符$
3
变量与数据类型
演示整型(int)、浮点型(float)、复数(complex)、字符串(str)、布尔型(bool)五种基本数据类型,以及 type() 检查类型。
python
num = 128 # 整型变量
姓名 = "小明" # 中文变量名可用,但不推荐使用
print(姓名)
a = b = c = 1 # 一次为多个变量赋同样的初值
print(id(a), id(b), id(c)) # 三个变量指向同一内存地址
# Python 语言是一种动态类型语言,变量的类型是可以随时变化的
number = 512 # 整型的变量
print(type(number)) # <class 'int'>
number = "我爱Python编程" # 字符串类型的变量
print(type(number)) # <class 'str'>
# 1、整型(int):支持二进制、八进制、十进制和十六进制表示法
print(0b100) # 二进制整数 → 4
print(0o100) # 八进制整数 → 64
print(100) # 十进制整数 → 100
print(0x100) # 十六进制整数 → 256
# 2、浮点型(float):支持科学计数法
print(123.456) # 数学写法
print(1.23456e2) # 科学计数法 = 123.456
# 3、复数(complex):实部和虚部构成
a = 2.38 + 18.2j
print(a)
# 4、字符串型(str):单引号、双引号或三引号界定
print('hello')
print("hello")
str1 = """白日依山尽
黄河入海流
欲穷千里目
更上一层楼
"""
print(str1)
# 5、布尔型(bool):只有True和False两种值
print(True)
print(False)
# 使用 type 函数检查变量的类型
a = 100
b = 123.45
c = 'hello, world'
d = True
print(type(a)) # <class 'int'>
print(type(b)) # <class 'float'>
print(type(c)) # <class 'str'>
print(type(d)) # <class 'bool'>
4
类型转换
演示 int()、float()、str()、chr()、ord() 等类型转换函数的用法,以及不同进制转换。
python
a = 100
b = 123.45
c = '123'
d = '100'
e = '123.45'
f = 'hello, world'
g = True
print(float(a)) # 100.0 —— int 转 float
print(int(b)) # 123 —— float 转 int(截断小数部分)
print(int(c)) # 123 —— str 转 int
print(int(c, base=16)) # 291 —— str 按十六进制转 int
print(int(d, base=2)) # 4 —— str 按二进制转 int
print(float(e)) # 123.45 —— str 转 float
print(bool(f)) # True —— 有内容的字符串转 bool 均为 True
print(int(g)) # 1 —— True→1, False→0
print(chr(a)) # 'd' —— ASCII 码 100 对应字符 'd'
print(ord('d')) # 100 —— 字符 'd' 对应 ASCII 码 100
"""
说明:str类型转int类型时可以通过base参数来指定进制,
可以将字符串视为对应进制的整数进行转换。
str类型转成bool类型时,只要字符串有内容(不是''或""),
对应的布尔值都是True。
bool类型转int类型时,True会变成1,False会变成0。
在 ASCII 字符集和 Unicode 字符集中,字符'd'对应的编码都是100。
"""
5
运算符综合示例
演示算术运算符、赋值运算符(含海象运算符 :=)、比较运算符和逻辑运算符的综合用法。
python
# ===== 算术运算符 =====
print(1 + 2) # 3 —— 加法运算
print(2 - 1) # 1 —— 减法运算
print(2 * 3) # 6 —— 乘法运算
print(5 / 2) # 2.5 —— 除法运算
print(5 // 2) # 2 —— 整除运算
print(5 % 2) # 1 —— 求模运算
print(5 ** 2) # 25 —— 求幂运算
# ===== 赋值运算符 =====
# 赋值运算符还可以跟算术运算符组合成复合赋值运算符
a = 10
b = 3
a += b # 相当于:a = a + b
a *= a + 2 # 相当于:a = a * (a + 2)
print(a) # 大家算一下这里会输出什么
# ===== 海象运算符(Python 3.8+) =====
# 海象运算符 := 可以在表达式内部为变量赋值
# 赋值运算构成的表达式本身不产生任何值,
# 海象运算符解决了这个问题
# ===== 比较运算符和逻辑运算符 =====
# 比较运算符会产生布尔值,要么是True,要么是False
# 逻辑运算符有三个:and(与)、or(或)和not(非)
flag0 = 1 == 1
flag1 = 3 > 2
flag2 = 2 < 1
flag3 = flag1 and flag2
flag4 = flag1 or flag2
flag5 = not flag0
print('flag0 =', flag0) # flag0 = True
print('flag1 =', flag1) # flag1 = True
print('flag2 =', flag2) # flag2 = False
print('flag3 =', flag3) # flag3 = False
print('flag4 =', flag4) # flag4 = True
print('flag5 =', flag5) # flag5 = False
print(flag1 and not flag2) # True
print(1 > 2 or 2 == 3) # False
6
格式化输入输出
演示 input() 接收输入,以及 % 格式化、f-string、format() 三种输出方式,含整数、浮点数、字符串的格式化。
python
# ===== input() 输入 =====
# Python提供了内置函数input(),用于接收用户的键盘输入
name = input("请输入名字:") # 输入数据
print("你的名字是:", name) # 输出数据
# 无论输入的是数字还是字符串,input()函数返回的结果都是字符串
i = input("请输入数字:")
print(type(i)) # <class 'str'>
# i = int(input("请输入数字:")) # 将字符类型转换为整数
# ===== print() 默认换行 =====
print("白日依山尽") # 自动换到下一行
print("黄河入海流")
print("欲穷千里目")
print("更上一层楼")
# ===== % 格式化 ====
a = 30
print('%o' % a) # 八进制是 36
print('%d' % a) # 十进制是 30
print('%x' % a) # 十六进制是 1e
nHex = 0xFF
print("十六进制是%x,十进制是%d,八进制是%o" % (nHex, nHex, nHex))
# 浮点数格式化
print('%f' % 2.22) # 默认保留 6 位小数
print('%.1f' % 2.22) # 取 1 位小数
print('%e' % 2.22) # 科学计数法
print('%.3e' % 2.22) # 取 3 位小数,科学计数法
# 字符串格式化
print('%s' % 'hello world') # 字符串输出
print('%20s' % 'hello world') # 右对齐,占 20 位
print('%-20s' % 'hello world') # 左对齐,占 20 位
print('%.2s' % 'hello world') # 截取 2 位 → he
print('%10.2s' % 'hello world') # 右对齐,10位占位,取2位
name = '小明'
age = 13
print('姓名:%s,年龄:%d' % (name, age))
# ===== f-string(推荐)=====
print(f'姓名:{name},年龄:{age}')
num = 3.1415926
print(f"π的值为:{num:.2f}") # 保留两位小数
print(f"π的值为:{num:.2%}") # 百分号形式
# 千位分隔符
big_number = 1234567890
print(f"The big number is {big_number:,}")
print(f"The big number is {big_number:_}")
# 字符串对齐
s = "Hello"
print(f"|{s:<10}|") # 左对齐,总宽度为 10
print(f"|{s:>10}|") # 右对齐,总宽度为 10
print(f"|{s:^10}|") # 居中对齐,总宽度为 10
# ===== format() 方法 =====
print('{} {}'.format('hello', 'world')) # 不带字段
print('{0} {1}'.format('hello', 'world')) # 带数字编号
print('{0} {1} {0}'.format('hello', 'world')) # 打乱顺序
print('{1} {1} {0}'.format('hello', 'world')) # 打乱顺序
print('{a} {b} {a}'.format(b='hello', a='world')) # 带关键字
7
格式化输出进阶 + 二进制输出
f-string 高级技巧:前导零、百分比、日期时间、调试、自定义对齐;输出二进制数的多种方式。
python
# ===== f-string 高级技巧 =====
# 千分位分隔符
result = 1000000000
print(f'{result:,}') # 以,作为数字千分位分隔符
print(f'{result:_}') # 以_作为数字千分位分隔符
# 浮点数四舍五入
num = 3.1415926
print(f"{num:.2f}") # 3.14
print(f"{num:.4f}") # 3.1416
int_num = 123.987
print(f"{int_num:.0f}") # 124
# 百分比格式化
rate = 0.758
print(f"{rate:.2%}") # 75.80%
print(f"{rate:.1%}") # 75.8%
# 前导零设置
num1 = 5
print(f"{num1:03d}") # 3位长度 → 005
num2 = 123
print(f"{num2:05d}") # 5位长度 → 00123
# 大数字格式化
big_num = 1234567.89
print(f"{big_num:,}") # 1,234,567.89
print(f"{big_num:,.2f}") # 1,234,567.89
# 文本对齐 + 自定义填充字符
text = "Python"
print(f"{text:-<10}") # 左对齐,填充 - → "Python----"
print(f"{text:=>10}") # 右对齐,填充 = → "====Python"
print(f"{text:*^10}") # 居中,填充 * → "**Python**"
# 日期时间处理
import datetime
now = datetime.datetime.now()
print(f"{now:%Y-%m-%d}") # 年-月-日
print(f"{now:%Y/%m/%d %H:%M:%S}") # 年/月/日 时:分:秒
print(f"{now:%H:%M:%S}") # 时:分:秒
# 调试技巧
x = 10; y = 20
print(f"{x = }") # 直接显示变量名和值 → x = 10
print(f"{x + y = }") # x + y = 30
num = 3.1415
print(f"{num = :.2f}") # 结合格式 → num = 3.14
# 动态设置宽度和精度
width = 8; precision = 2
value = 123.456
print(f"{value:{width}.{precision}f}") # " 123.46"
# 列表去掉[]输出
my_list = [1, 2, 3, 4]
print(' '.join(map(str, my_list))) # 1 2 3 4
print(*my_list) # 1 2 3 4
print(*my_list, sep=',') # 1,2,3,4
# ===== 输出二进制数 =====
num = 10
# 使用 format() 方法
print('{0:b}'.format(num)) # 1010
# 使用 f-string
print(f'{num:b}') # 1010
# 使用 bin() 函数
binary_str = bin(num)[2:] # 去掉前缀 '0b'
print(binary_str) # 1010