Python 基本语法 Note-Algorithm-1

216 阅读7分钟

Python 基本语法的相关知识,内容包括选择 Python 学习算法的原因、Python 语法的特点、基本语法元素、数据类型、控制结构、函数和代码复用。

这一系列笔记用于记录数据结构与算法的相关内容。

一、选择 Python 学习算法的原因

选择 Python 语言学习算法原因有 3 点

1. Python 代码风格简洁

我原本是想过用流程图或者使用伪代码来学习算法,流程图太图形化了不适合,伪代码也不方便,因为我还没有形成自己的伪代码的风格,每写一次一不留神创建一个新语法比较容易忘,与其自己创造一门语言,不如用一套现成的编程语言。

经比较 C、C++、C#、Java、JavaScript、Python 这六种语言,前四个直接 PASS 掉,学习成本过高,JavaScript 语法有点垃圾,Python 从代码的风格上来说,读写简单,学习成本也低。

2. 之前学过 Python

在 Python 编程语言火得一塌糊涂的时候,我也一起跟着随波逐流了一下,结构语法都比较熟悉了,所以不用从零开始学啦。

3. 多多熟悉 Python 不亏

Python 当做主语言不适合,但是把它当做第二门语言是挺不错的,它的社区都建设很好,用途广泛,主语言无法实现的东西可以用它实现,可以和主语言做一个互补,学习它不仅不亏甚至还有点小赚。

二、Python 语法的特点

  1. 语法简洁:实现相同功能,Python 语法的代码行数相对来说很少
  2. 与平台无关:作为脚本语言,只要有解释器就能执行,可以不经修改实现跨平台运行
  3. 粘性扩展:扩展性优异,体现在可以集成 C、C++、Java 等编程语言
  4. 开源理念:开源的解释器和函数库
  5. 通用灵活:科学计算、数据处理、人工智能、机器人
  6. 强制可读性:使用强制缩进来体现语句间的逻辑,显著提高了程序的可读性和可维护性
  7. 支持中文:Python 3.0 解释器财通 UTF-8 编码表达所有字符信息
  8. 模式多样:同时支持面向过程和面向对象编程
  9. 类库丰富:Python 解释器提供了几百个内置类函数库,此外,还有开源社区程序员们贡献了十几万个第三方库

三、基本语法元素

1. 格式框架

采用严格的“缩进”表示格式框架

2. 注释

# 这里是单行注释

'''
这里是多行注释
使用三个单引号
'''

3. 命名和保留字

命名

允许使用采用大小写字母、数字、下划线和汉字等字符及其组合给变量命名,但名字的首字符不能是数字,中间不能出现空格、长度没有限制

注意:标识符对大小写敏感,此外名字不能与 Python 保留字相同,保留字的大小写也是敏感的

Python 3 的 33 个保留字

False  None  True  and  as  assert  break  class  continue  def
del  elif  else  except  finally  for  from  global  if  import
in  is  lambda  nonlobal  not  or  pass  raise  return  try
while  with  yield

四、数据类型

1. 数字类型

Python 提供了整数、浮点数、复数 3 种数字类型

// 这和 JS 大不相同,JS 只提供浮点数一种数字类型
x + y  // 和
x - y  // 差
x * y  // 积
x / y  // 商
x // y  // 取整
x % y  // 取余,也叫模运算
-x  // x 的负值
+x  // x 本身
x**y  // x 的 y 次幂
——————————————————————
abs(x)  // x 的绝对值
divmod(x,y)  // (x//y,x%y),输出为二元组形式(也成元组类型)
pow(x,y[,z])  // (x**y)%z,即 pow(x,y),它与 x**y 相同
round(x[,ndigits])  // 对 x 四舍五入,保留 ndigits 位小数,round(x)返回整数
max(x1,x2,...,xn)  // 最大值
min(s1,x2,...xn)  // 最小值
————————————————————
int(x)  // 将 x 转为整数,x 可以是浮点数或字符串
float(x)  // 返回浮点数 x 或字符串 x 所对应的整数类型
conplex(re[,im])  // 生成一个复数,实部为 re,虚部为 im
————————————————————
math 库 -- Python 提供的内置数学类函数库
// 使用方式 1
import math
matn.<b>()
------------------
// 使用方式 2
from math import <函数名>
<函数名>()

2. 字符串类型

字符串是字符的序列表示,可以用过基本的字符串操作符、内置字符串处理函数和字符串处理方法等对字符串进行操作

'单引号字符串'
"双引号字符串"
'''三引号可以包含单引号和双引号
还可以换行
'''
——————————————————————————
x + y  // 连接两个字符串 x 与 y
x*n 或 n*x  // 复制 n 次字符串
x in s  // 如果 x 是 s 的字传,返回 True,否则返回 False
str[i]  // 索引,返回第 i 个字符
str[N:M]  // 切片,返回索引第 N 到第 M 的字串,其中不包含 M
——————————————————————————
len(x)  // 返回字符串 x 的长度,也可返回其他组合数据类型元素的个数
str(x)  // 返回任意类型 x 所对应的字符串形式
chr(x)  // 返回 Unicode 编码 x 对应的单字符
ord(x)  // 返回单字符表示的 Unicode 编码
hex(x)  // 返回整数 x 对应十六进制数的小写形式字符串
oct(x)  // 返回整数 x 对应八进制的小写形式字符串
————————————————————————————
str.lower()
str.upper()
str.islower()
str.isprintable()
str.isnumeric()
str.isspace()

五、控制结构

程序由 3 种基本结构组成:顺序结构、分支结构和循环结构

1. 顺序结构

按照程序线性顺序依次执行的一种运行方式

2. 分支结构

Python 通过 if、elif、else 等保留字提供分支结构

if <条件 1> :
    <语句块 1>
elif <条件 2> :
    <语句块 2>
else:
    <语句块 N>
——————————————————
<
<=
>
>=
==
!=

2. 循环语句

Python 用过 for、while 等保留字提供遍历循环和无限循环的结构

for <循环变量> in <遍历结构>:  // 遍历循环 for 语句
    <语句块>
-----------------
for i in range(N):  // 循环 N 次
    <语句块>
-----------------
for line in fi:  // 遍历文件 fi 的每一行
    <语句块>
-----------------
for c in s:  // 遍历字符串 s
    <语句块>
-----------------
for itemin ls:  // 遍历列表 ls
    <语句块>
——————————————————————————————————————————
while <条件>:  // 无限循环 while 语句
    <语句块 1>
——————————————————————————————————
保留字 break 用来跳出最内层 forwhile 循环
保留字 continue 用来结束当前当次循环

六、函数和代码复用

1. 函数的定义

Python 使用 def 保留字定义一个函数

def <函数名>(<参数列表>):
    <函数体>
    return <返回值列表>
————————————————————————————
// 函数调用和执行的形式如下
<函数名>(<参数列表>)

函数的调用过程

  1. 调用程序在调用处暂停执行
  2. 在调用时将实参复制给函数的形参
  3. 执行函数体语句
  4. 函数调用结束给出返回值,程序回到调用前的暂停处继续执行

lambda 函数

lambda 保留字用于定义匿名函数,又称 lambda 函数,用于定义简单的函数

<函数名> = lambda <参数列表>:<表达式>

2. 函数的参数传递

函数可以定义可选参数,使用参数的位置或名称传递参数值,根据函数中变量的不同作用域有不同的函数返回值方式。

在定义函数时,如果有些参数存在默认值,即部分参数不一定需要调用程序输入,可以在定义函数时直接为这些参数指定默认值。当函数被调用时,如果没有传入对应的参数值,则使用函数定义时的默认值代替。

3. 函数的递归

函数定义中调用函数自身的方法形成递归。

数学上有个经典例子叫阶乘。

n! = 1          n = 0
n! = n(n-1)!  otherwise

阶乘的例子揭示了递归的两个关键特征

  1. 存在一个或多个基例,基例不需要再次递归,它是确定的表达式。
  2. 所有递归链要以一个或多个基例结尾。

数学归纳法

数学归纳法和递归都利用了递推的原理,本质上是相同的。

递归的使用方法

以阶乘计算为例,可以把阶乘写成一个单独的函数。

def fact(n):
    if n == 0:
        return 1
    else:
        return n*fact(n-1)
num = eval(input("请输入一个整数:"))
print(fact(abs(int(num))))

「@浪里淘沙的小法师」