💡 课堂例题

第 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
返回 讲义
下一步 课堂习题