一、Python基础(基础篇)
提示:以下会基于已有C语言基础的前提下进行讲解
目录:
- 一、Python基础(基础篇)
- 一、基本语句
- 1.print("")打印字符串
- 2.#单行注释
- 3.""""""多行注释
- 4.基本运算符
- 5.print()数据类型的打印、type()数据类型的查看和变量的定义和命名
- 6.input("")从键盘中获取输入信息
- 7.int()和float()实现数据类型的转换
- 8.变量的格式化输出
- print("输出信息+格式化字符" % 变量)
- print("输出信息+格式化字符" % (变量1, 变量2, .., 变量N))
- 9.import导入库/模块和库/模块内关键字的调用
- 10.if判断语句与嵌套
- 11.if语句进阶——elif的使用
- 12.pass 跳过语句
- 13.第一阶段小结:石头剪刀布游戏
- 14.补充:random.uniform() 函数
- random.uniform(min, max)
- 二、循环语句
- 1.赋值运算符
- 2.while循环的使用
- 3.while True: 和 while 1: 死循环与 break 和 continue
- 4.循环的嵌套
- 5.第二阶段小结:九九乘法口诀表
- 6.补充:转义字符
- 三、函数基础
- 1.无参函数的定义与调用
- 2.带参函数的定义和调用
- 3.函数的递归调用
- 4.函数注释文档的使用技巧
- 上一篇文章
- 下一篇文章
一、基本语句
1.print("")打印字符串
print("这是要打印的内容")
- 在默认的情况下,print 都会自动换行,如果不希望自动换行,可以在 print 末尾增加以下代码:
print("这是要打印的内容", end="")
# 也可以让结尾增加其他内容
print("这是要打印的内容", end="---")
也可以利用 print 的特性直接输出一个换行:
print()
print("")
2.#单行注释
# 这是第一行注释
# 这是第二行注释
- 注释通常位于代码之前
- 为了格式整齐,Python的语法建议 # 后面应该加一空格
- 如果要执行的语句和注释都很短,注释可以放在语句后面,且为了格式整齐, # 距离代码语句末尾应该有两个空格
- 小技巧:在PyCharm中,选中要赋予单行注释的文本,按下 ctrl+/ 即可对选中的文本进行单行注释;同理,再按一次可以取消单行注释
PyCharm中,在注释文本前加上 todo 或 TODO 关键字,可以让注释高亮显示,表示这是待执行的注释
# todo(备注) 高亮注释
# TODO(备注) 高亮注释
在PyCharm左下方中会列出标记的 TODO 注释,表示这些注释由用户自己标记,是待执行的注释
3.""""""多行注释
"""
这里是多行注释
这里是多行注释
...
这里是多行注释
"""
4.基本运算符
运算符 | 含义 |
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
// | 取整除 |
% | 取余 |
** | 幂 |
- 与C语言不同的是,Python的除法保留浮点数,因此增加了一个取整除的运算符
- Python比C语言多了一个基本运算符——幂运算,如:2 ** 3 = 8
- 在Python中," * " 还可以用于字符串的运算,计算结果就是字符串重复指定次数的结果
如:“2” * 10 = ‘2222222222’ - 在Python中," + " 还可以用于字符串的运算,计算结果就是两个字符串进行拼接
如:(“张” + “三”) * 2 = “张三张三”
优先级 | 运算符 |
最高 | ** |
中 | *、/、%、// |
最低 | +、- |
- 加括号 () 即可指定优先级
5.print()数据类型的打印、type()数据类型的查看和变量的定义和命名
一般命名法:
- Python变量的命名规则与C语言类似,不能以纯数字组成或以数字开头,变量名不能含有特殊符号
- Python建议在变量名中含多个英文单词时,应使每个单词都用小写表示,且不同单词用 " _ " 隔开
(多个英文单词指包含两个英文单词及以上) - 如:student_name、class_number
驼峰命名法:
(1)小驼峰式命名法:
- 当变量名中含多个英文单词时,还可以利用驼峰命名法命名
- 第一个英文单词以小写字母开始,后续单词的首字母大写
- 如:firstNode、firstName
(2)大驼峰式命名法:
- 每一个英文单词均采用首字母大写的形式
- 如:FirstNode、FirstName
(注:一般命名法会使用得更为普遍)
student_number = "20201111"
student_name = "张三"
print(student_number)
print(student_name, student_number)
- 在对变量进行打印时,直接在print的括号 () 里写变量名即可,不同变量间用 " , " 隔开,逗号后面要跟上一个空格
- 在Python中,定义变量是不需要指定变量的类型的,Python解释器会根据定义变量时等号右侧的内容来自动准确定义数据类型
- 除 “ 字符串 * 整型 ” 外,数字型变量和字符串之间不可以进行运算
- 在Python3.X中,long 和 int 均被整合成 int 以便管理,而Pyhon2.X是区分 long 和 int 的
- 若所指定的是字符串或字符类型,则需要在定义后面跟上 " " 或 ''
可以在PyCharm的调试器中查看数据类型,或者使用 type() 函数:这里输出的是 bool
student_boy = True
print(type(student_boy))
在C语言中不常用的布尔类型bool定义:
# 定义两个布尔类型,在C语言中不常用
student_boy = True
student_girl = False
- 真用 True 表示(即非0数);假用 False 表示(即0),注意写法(首字母大写),在 bool 与数字型数据类型运算时,bool 将被视为 0 或 1 进行运算
- Python还有一个科学计算的类型——复数型complex,一般用于处理工程问题
- 除此之外,Python中还有三个非数字的高级类型:列表、元组、字典,将在以后介绍
利用变量运算的举例:
row = 10
col = 30
acreage = row * col
print(acreage)
6.input("")从键盘中获取输入信息
data = input("提示信息")
data1 = input("请输入第一个的数据:")
data2 = input("请输入第二个的数据:")
- (" ") 里的内容将会是用户输入前的提示,而不需要 print
- 输入的数据将会被视为字符串类型
- 输入的数据将会存放在 data 里面
7.int()和float()实现数据类型的转换
age = input("请输入您的年龄:")
score = input("请输入您的成绩:")
# 将输入的字符串类型转换成所需要的类型
int(age)
float(score)
print(age)
print(score)
- () 里的内容将会被转换成指定的类型 int 或 float
- int() 和 float() 的返回值就是被转换之后的值
实际上要这样一个个地转换数据类型极其不方便,下面给出嵌套变更的方法:
age = int(input("请输入您的年龄:"))
score = float(input("请输入您的成绩:"))
print(age)
print(score)
8.变量的格式化输出
格式化字符 | 含义 |
%s | 字符串 |
%d | 有符号十进制整型,%06d 表示输出的整型显示位数,不足位数用0补齐,右侧对齐 |
%d | 有符号十进制整型,%6d 表示输出的整型显示位数,不足位数用空格补齐,右侧对齐 |
%f | 浮点数,%.2f 表示小数点后只显示两位 |
%% | 输出%符号 |
%x | 以十六进制数方式输出 |
输出语法格式如下:
print(“输出信息+格式化字符” % 变量)
格式化输出一个变量时
print(“输出信息+格式化字符” % (变量1, 变量2, …, 变量N))
格式化输出多个变量时
name = "张三"
print("我的名字是 %s" % name)
# 输出多个格式化字符时
name = "李红"
number = 20201111
score = 90.99
print("我的名字是 %s ,我的学号是 %08d ,我的成绩是 %.2f" % (name, number, score))
- 为了代码格式的整齐与可阅读性,在格式化字符两边分别加一空格隔开
- 输出多个变量时,变量之间有逗号 " , " 隔开,并加一空格
提示:
输入:
GPA = 3.95
print("您的加权平均分为 %.02f" % (GPA * 10 + 50))
输出:
您的加权平均分为 89.50
若输入:
GPA = 3.95
print(" %.02f" % GPA * 10)
则输出:10次GPA
3.953.953.953.953.953.953.953.953.953.95
- 应注意优先级
9.import导入库/模块和库/模块内关键字的调用
例:导入 keyword 库,其中的 keword.kwlist 可以查看 Python 自带的所有关键字
import keyword
print(keyword.kwlist)
- 以库名为前缀,加上点 " . " 后,PyCharm会为我们列出库里的可选关键字
- 即以 文件名.关键字 的方式调用
- 函数调用需要加 () ,而关键字调用不需要加 ()
- 除了函数之外,还可以调用被调文件中所定义的变量,如:在 function_file.py 中定义有 name = "张三,那么在其他文件中 import function_file之后,即可使用 function_file.name,即 “张三”
补充:在工程目录下,我们会看到一个叫 _ pycache_ 的文件:
- 一般在使用 import 导入过某文件并调用里面的内容后,就会在 _ pycache_ 中把被调文件解释好的二进制代码保存下来。
- 这是因为这个时候被调用的文件已经被视为一个库/模块了(因为被调用过),因此里面的内容会视为长期不会被更改的内容(库/模块),所以会以二进制的形式保存下来,这样,在下次调用该文件的时候,就不需要重新解释该文件了,便大大提高的解释效率
- 因此,很多库/模块可能是 .cpy 文件,即已经被解释好了的 Python 文件,以便调用时的高效运行
10.if判断语句与嵌套
比较运算符 | 含义 |
== | 检查是否相等,是返回True |
!= | 检查是否不等,是返回True |
> | 检查是否大于,是返回True |
>= | 检查是否大于或大于,是返回True |
< | 检查是否小于,是返回True |
<= | 检查是否小于或等于,是返回True |
逻辑运算符 | 含义 |
and | 与 |
or | 或 |
not | 非 |
in | 在 |
not in | 不在 |
- and 和 or 在与两侧的条件之间应加一空格,not 在与右侧条件之间应加一空格
- in 和 not in 后面可以跟上一个集合,如:3 in (1, 2, 3) = True
例:
if x > 10 and x < 100:
print("10 < x < 100")
else:
print("x < 10 或 x > 100")
- 要执行的代码块应该缩进4个空格(即一个Tab,以后 Tab = 1 表示4个空格,如此类推)
- if 和 else 下缩进的部分都是一个完整的代码块
例:
is_employee = True
if not is_employee:
print("您不是公司的员工,请勿入内")
else:
print("您是公司的员工,欢迎您")
- 上述例子展示了 bool 的使用
嵌套逻辑与格式如图所示:
例:
income = int(input("请输入您的收入:"))
if income >= 10000:
print("月入过万了,不错")
house = int(input("您有几套房?"))
if house >= 1:
print("不错,房子也有了")
else:
print("没有房子,继续努力")
else:
print("您月入没过万,要加油才行啊")
例:if in 的应用
import function_file
choice = input("请输入您的选择")
if choice in ("1", "2", "3"):
function_file.function1()
else:
function_file.function2()
11.if语句进阶——elif的使用
例:
score = float(input("请输入您的考试成绩:"))
score = score // 10
if score < 6:
print("您的成绩不及格")
elif score == 6 or score == 7:
print("您的成绩及格了")
elif score == 8:
print("您的成绩良好")
else:
print("您的成绩优秀")
12.pass 跳过语句
当条件判断后暂时不想执行任何语句时,可以用 pass 跳过
如:
number1 = input()
number2 = input()
if number1 >= number2:
pass
else:
print("number1 < number2")
13.第一阶段小结:石头剪刀布游戏
需求:
- 从控制台输入想出的手势——(1)石头 / (2)剪刀 / (3)布
- 电脑随机出拳,比较胜负
# 导入随机数的库
import random
# 计算机获取随机数
computer = random.randint(1, 3)
player = int(input("请输入您的出拳类型:1—石头,2-剪刀,3-布:"))
if ((player == 1 and computer == 2)
or (player == 2 and computer == 3)
or (player == 3 and computer == 1)):
print("您出的是: %d,计算机出的是: %d,您获胜了" % (player, computer))
elif player == computer:
print("您出的是: %d,计算机出的是:%d,你们打成了平局" % (player, computer))
else:
print("您出的是: %d,计算机出的是:%d,您输了" % (player, computer))
- 判断条件的处理思想:先处理简单的,复杂的交给 else
- 提示:随机数的库:random ,随机数的库下的整型随机数:random.randint(minint, maxint),返回值是 [minint, maxint] 之间的随机数,因而 minint < maxint,否则报错
- 这里给出一种判断条件较长时的处理方式:
(1)首先按如下格式把条件全部写好,最大的括号是为了能够换行表示
if ((player == 1 and computer == 2) or (player == 2 and computer == 3) or (player == 3 and computer == 1)):
(2)然后分别在每一个or前面(空格后面)回车,PyCharm会自动格式缩进(Tab = 2),实际上缩进(Tab = 1)也符合Python的代码格式,但为了不与 if 的执行语句并列,保留较好阅读性,从而进行 Tab = 2 的缩进
if ((player == 1 and computer == 2)
or (player == 2 and computer == 3)
or (player == 3 and computer == 1)):
14.补充:random.uniform() 函数
random.uniform(min, max)
从 [min, max] 的区间内随机生成一个浮点数
例:
import random
print(random.uniform(1, 1))
二、循环语句
1.赋值运算符
运算符 | 含义 |
a = b | 把b的值赋给a |
a += b | a = a + b |
a -= b | a = a - b |
a *= b | a = a * b |
a /= b | a = a / b |
a //= b | a = a // b |
a %= b | a = a % b |
a **= b | a = a ** b |
- 构造与功能跟C语言是一致的
- Python没有 i++ 之类的运算符
2.while循环的使用
计数习惯:
- 自然计数法:从1开始计数的方法,符合人类习惯
- 程序计数法:从0开始计算的方法,更符合程序设计的思想
- 除非有需要的时候,否则一般使用程序计数法
# 定义计数器的初始值
i = 0
result = 0
while i <= 100:
# 列写满足条件时要执行的代码
if i % 2 == 0:
print(" i 是一个偶数")
result += i
# 处理计数器
i += 1
print(i) # 输出的 i 值仍然保留
print("0~100中偶数项的和为: %d" % result)
- 实际上它与C语言的 while循环 十分相近
- 与 if 语句相似,代码块应该缩进 Tab = 1
循环逻辑与格式如图所示:
- 注:在执行完 while循环 后,i 的值仍然保留在内存中,可以使用
3.while True: 和 while 1: 死循环与 break 和 continue
死循环:
while True:
while 1:
break 与 continue 的用法和C语言的完全一致:
break
continue
4.循环的嵌套
循环嵌套逻辑与格式如图所示:
例:要求使用循环嵌套输出下面图像
# 初始化计数器
row = 1
while row < 10:
#初始化计数器
col = 1
while col <= row:
print("*", end="")
col += 1
print("")
row += 1
- 注:通常用 row 表示行;用 col 表示列
5.第二阶段小结:九九乘法口诀表
需求:
- 符合九九乘法口诀表的排列方式——即三角形排列
- 行(row) × 列(col) = 积
(1)若输出效果如图所示:
# 初始化计数器数值
row = 1
while row < 10:
# 初始化计数器数值
col = 1
while col < row:
print("%d×%d=%d, " % (row, col, row * col), end="")
col += 1
print("%d×%d=%d" % (row, col, row * col))
row += 1
(2)若输出效果如图所示:
# 初始化计数器数值
row = 1
while row < 10:
# 初始化计数器数值
col = 1
while col < row:
print("%d×%d=%d, " % (col, row, col * row), end="")
col += 1
print("%d×%d=%d" % (col, row, col * row))
row += 1
- 用%2d可以进行格式的对齐
- 也可以将 end="" 更改为:end="\t" 来进行格式的对齐
6.补充:转义字符
针对上述转移字符进行介绍:
转义字符 | 含义 |
\ \ (中间不含空格) | 反斜杠符号 |
\ ’ (中间不含空格) | 单引号 |
\ " (中间不含空格) | 双引号 |
\n | 换行 |
\t | 制表 |
\r | 回车 |
- 这些转义字符还可以运用在 print(" ") 的 " " 里面
三、函数基础
1.无参函数的定义与调用
假设这个函数定义在的 .py 文件名为 function_file.py
def function_name():
"""定义一个函数"""
print("Hello Python")
#调用该函数
function_name()
- Python文档规定,函数定义完后,应该与后续的代码保持两行空行的距离
- Python文档规定,函数的上方如果有代码,则应该与上放代码保持两行空行的距离
- 一般可以在 def 的下方写函数定义的注释,如果注释写成 " " " 文本 " " " 的形式,那么如果框选中调用函数并按下 ctrl+q 时,PyCharm就会显示该函数的定义格式和文本注释,例如:
函数定义逻辑与格式如图所示(def 指的是 define):
即可在当前的 .py 文件下定义一个函数
注:
- 要想在其他 .py 文件中调用该文件里的函数,被调函数所在的 .py 文件必须以英文字母开头,因此应该注意习惯 Python源程序文件的命名格式(重要)
- 在当前文件下调用该函数不需要 import 导入
- 函数的调用不能出现在函数定义的上方,因为 Python 是一行一行解释执行的
函数调用的基本方法:
import function_file
function_file.function_name()
- 以 文件名.函数名 的方式来调用
2.带参函数的定义和调用
def summation(num1, num2):
"""定义一个函数"""
result = num1 + num2
return result
print("输出结果是: %d" % summation(10, 20))
- 与C语言一样,函数接收外部数据后的参数属于形参——局部变量,在函数执行完之后会被释放
- 与C语言一样,函数在 return 后函数即结束,不会执行其他代码
3.函数的递归调用
递归——即函数自己调用自己的操作,要注意应包含结束递归条件,不能形成多次递归——注意,Python默认最多997次递归调用
例:检验 0 ~ number 之间含有几个偶数(0是偶数)
def function(number):
"""递归调用函数,检验 0 ~ number 中含有几个偶数"""
"""这个是结束条件"""
if number == 0:
return 1
else:
if number % 2 == 0:
return function(number - 1) + 1
else:
return function(number - 1)
print("0 ~ number 中含义 %d 个偶数" % function(100))
例:打印由可选字符、可选长度、可选行数组成的分割线(用递归调用,不能使用while)
def print_line(string, len, row):
"""
打印由可选字符、可选长度、可选行数组成的分割线
:param string: 分割线的组成字符或字符串
:param len: string的重复次数
:param row: 分割线的行数
"""
if row == 0:
return
else:
print("%s" % string * len)
return print_line(string, len, row - 1)
print_line("H ", 10, 4)
4.函数注释文档的使用技巧
在 def 下方写上三对双引号 " " " " " " 后,在三对双引号中间按下回车,即可自动生成函数注释文档,如图所示:
如上述递归调用例子中的注释:
注:对函数的注释与对参数的注释之间间隔一个空行于是,在调用函数时,在对于的函数名上按下 ctrl+q 即可显示如下效果: