文章目录
- 注释(Comment)
- 解释伴随行
- 文本编码问题
- 输入输出语句(Input & Output)
- 输出语句
- 普通输出
- 格式化输出(3种)
- format 格式总结
- 输入语句
- 基本语句
- if 语句
- match 语句(Python3.10 新增)
- for 循环语句
- while 循环语句
- while/for .. else语句
- continue 语句
- break 语句
- return 语句
- pass 语句
- 总结
注释(Comment)
- 单行注释
# 注释内容
#
井号,只能单行注释。 - 多行注释
由'''2023.1.21新年好! ''' """除了单引号双引号也可以哦 """
'''
或"""
包裹,可以多行注释,一般用于解释函数或程序功能。
解释伴随行
在一些编辑器中,新建 Python 模板会自带形如#!/usr/bin/env python
的注释 。
实际上,#!
是类Unix系统中的Shebang
符号,即解释伴随行。该代码告诉操作系统执行该脚本时,调用系统环境下的 python 解释器。可以在git bash
中使用,直接调用文件名执行。
$ ./test.py
在Windows系统中,该代码实际无效,可以删除。例如在power shell
中运行,仍需采用python [file]
形式调用。
python test.py
文本编码问题
在新建 Python 模板往往会自带以下注释之一,一般位于文件开头前两行。
# coding = utf-8
# -*- coding: utf-8 -*-
解释器会读取该注释,并按指定文本编码解码,从而避免乱码问题。
在Python2.x版本中,默认编码格式为ASCII,而Python3.x中,默认编码格式为UTF-8。
如果出现中文乱码或报错现象,可以指定编码格式为GBK。大小写皆可。
# coding = GBK
# coding = gbk
# -*- coding: GBK -*-
# -*- coding: gbk -*-
输入输出语句(Input & Output)
输入输出语句是实现人机交互的关键。
输出语句
完整格式形如print(*object(s), sep=' ', end='\n', file = sys.stdout, flush = False)
参数 | 含义 |
---|---|
*object(s) | 任意数量的输出,以逗号, 分隔 |
sep | 可选,指定如何分割多个输出对象,默认为空格' ' |
end | 可选,指定在末尾打印的内容,默认为换行'\n' |
file | 可选,写入方法的对象,默认为sys.stdout |
flush | 可选,指定输出是刷新(True )还是缓冲(False )。默认为False |
普通输出
语法格式形如
print(常量、变量、表达式列表)
实例为
print("Hello world")
a = 1
print(a)
print(2)
print(a, 2)
-
Python 可以同时输出多个值,输出结果由空格分隔,这是由
sep
参数默认为空格' '
决定的。而C语言必须书写多个格式声明才能实现。可见 Python 的输出功能更加简洁、强大。 -
Python 中一个 print 输出结束后会自动换行,而C语言的 printf 不会。这是由
end
参数默认为换行'\n'
决定的。
格式化输出(3种)
-
格式一:
print(格式控制 % 输出列表)
print("我今年的年龄%d" % 18) print("酒精浓度为%s%%" % 50) print("今年是%d,去年是%d,明年是%d" % (2023, 2022, 2024)) print("今年是%s,去年是%s,明年是%s" % (2023, 2022, 2024))
该格式与C语言类似。多个输出时用小括号包裹。输出百分号使用两个连续的百分号
%%
。Python 中
%s
既可以输出字符串,也可以输出整型和浮点型。C语言无法这样。 -
格式二:
print("普通字符{format格式}".format(输出列表))
# 无编号 print("我今年的年龄{}".format(18)) print("今年是{},去年是{},明年是{}".format(2023, 2022, 2024)) # 带编号 print("今年是{0},去年是{1},明年是{2}".format(2023, 2022, 2024)) print("今天是{0}年的尾声,你好{0},再见{0}".format(2022) # 带键值 print("我是{a},她是{b},{b}喜欢{a}".format(a = "小明", b = "小红"))
- format格式功能非常强大,风格与 C# 类似。详见 format 格式总结。
- 带编号的format格式在重复使用某些变量时具备优势,使得表达简洁,灵活。
- 带键值的format格式可以使表达式不拘泥于顺序,而按键值配对,更加灵活。
-
格式三:
print(f"普通字符{常量、变量、表达式}")
year = 2023 print(f"我的年龄是{18}岁,今年是{year}年,1+2={1+2}")
f - 格式化字符串(Python3.6新增) 比百分号输出格式与format 输出格式更加高效简洁。
format 格式总结
格式 | 样例 | 输出 | 说明 |
---|---|---|---|
{:.nf} | {:.0f} 3.1415 | 3 | 保留n位小数(n = 0,1…) |
{:+.nf} | {:+.2f} 3.1415 | +3.14 | 带符号保留n位小数 |
{:m>nd} | {:0>3d} 1 | 001 | 向左补0 |
{:m<nd} | {:x<3d} 1 | 1xx | 向右补x |
{:>nd} | {:>3d} 1 | 右对齐 | |
{:<nd} | {:<3d} 1 | 左对齐 | |
{:^nd} | {:^3d} 1 | 中间对齐 | |
{:,} | {:,} 100000 | 100,000 | 千位分隔符 |
{:%} | {:.0%} 0.5 | 50% | 百分比格式 |
{:e} | {:.1e} 5000000 | 5.0e+06 | 指数格式 |
输入语句
语法格式形如
str1 = input(“提示信息”)
- 输出提示信息后,等待用户输入
- 一般存储至变量中,如
password = input("请输入密码:")
- 所有用户输入都视作字符串类型,如果后续用于数值比较,需要转换数据类型。
显然,Python 优化了C语言中的输入语句,将用户提示输出语句和输入绑定在一起。
基本语句
if 语句
i = 0;
if i > 1:# 逻辑代码pass
elif i < -1:# 逻辑代码pass
else:# 逻辑代码pass
由if
、elif
、else
划分分支,常用于单变量分类讨论。可以嵌套,但不推荐过多的嵌套,不够优雅。
注意:
- Python 中用关键字
elif
代替了else if
。 pass
关键词用于给未完成的逻辑代码占位,避免语法报错。
match 语句(Python3.10 新增)
i = 1;
match i:case 0:# 逻辑代码passcase 1:# 逻辑代码passcase 2|3:# 逻辑代码passcase _:# 逻辑代码pass
match 语句用于多分支离散型数据分类。Python3.10 新增。
-
case _
类似C语言中的default,可以匹配任意字段。 -
当不同 case 子句的语句块一致,可以通过
|
设置多个匹配条件,共用语句块。
从形式和上述用法上match 语句和 C语言中的switch 语句几乎没什么不同,而且使用 if 语句也完全可以实现上述需求,那这种新特性的意义何在?
实际上,match 语句适用范围远远不止上述字面量的分类判断。列举一个比较重要的特性:match 语句可以将match
后的待匹配变量的值,赋值给case
后的变量
def func1(name):match name:case "":print("...")case myName:print(f"Hi, my name is {myName}!")
func1("TOM") # Hi, my name is TOM!
for 循环语句
# 1
str1 = "abcdef" # 字符串序列
for i in str:print(i)# 2
for i in range(1, 6):print(i) # 1 2 3 4 5# 3
str1 = "abcdef" # 字符串序列
for i, j in enumerate(str):print(f"第{i}个字母为{j}")# 4. 错误示例
list1 = [1, 2, 3, 4, 5]
for i, num in enumerate(list1):if num == 2:list1.remove(list1[i])print(num) # 1 2 4 5 与预期输出不符# 5. 正确示例
list1 = [1, 2, 3, 4, 5]
for i, num in enumerate(list1.copy()):if num == 2:list1.remove(list1[i])print(num) # 1 2 3 4 5
for 循环一般用于可迭代对象的遍历。
如对列表等可变类型进行循环操作 ,涉及增改删时需慎重。这些操作会改变原有列表元素,从而导致遍历结果异常。
正确且常用的操作是将列表通过copy
方法复制一份,对该复制列表进行遍历即可。
while 循环语句
i = 0
while i <= 5:# 逻辑代码i += 1
while 循环与 for 循环往往可以等价替换,常用于退出条件明确而循环次数未知的情况。
在游戏编程中,我们往往习惯用While True
无限循环包裹。
while/for … else语句
# 1. while..else
i = 0
while i <= 5:print(i)i += 1
else: # 循环正常退出时执行print("循环结束!")# 2. for..else
str1 = "abcdef"
for str in str1:print(str)
else: # 循环正常退出时执行print("正常结束!")
else 关键字可以和循环配合使用,这是C语言所不具备的特性。当循环正常退出时执行 else 后的代码。
注:break 会影响 else 的执行,continue 不会影响。
continue 语句
continue
用于循环语句中,跳过当前循环,继续下一个循环。注意计数器是否变化,否则容易死循环。
break 语句
break
用于循环语句或 switch 语句中,跳出当前层循环,不能跳出多层循环。
return 语句
# 无变量
return# 单个变量
return True
return x
return a+b# 多个变量
return a, b # 默认以元组形式返回
return (a, b) # 与上式等效
return [a, b] # 以列表形式返回
return {'1': a, '2': b} # 以字典形式返回
用于函数中,可以跳出当前函数。当缺省时,实际返回None
。
特别的,Python支持同时返回多个变量,默认以元组类型打包。这是C语言所不具备的。
pass 语句
pass
表示什么都不做。在编程的过程中,可以先用 pass
关键字占位,后续再补充逻辑。
总结
本章总结了诸多Python中的语句,现在,你可以书写一些简单的小程序了。