Python学习(三)基础入门(数据类型、变量、条件判断、模式匹配、循环)

news2025/1/13 20:40:40

目录

    • 一、第一个 Python 程序
      • 1.1 命令行模式、Python 交互模式
      • 1.2 Python的执行方式
      • 1.3 SyntaxError 语法错误
      • 1.4 输入和输出
    • 二、Python 基础
      • 2.1 Python 语法
      • 2.2 数据类型
        • 1)Number 数字
        • 2)String 字符串
        • 3)List 列表
        • 4)Tuple 元组
        • 5)Set 集合
        • 6)Dict 字典
        • 7)空值
      • 2.3 变量、常量
        • 1)变量
        • 2)常量
      • 2.4 条件判断
        • 1)条件判断语法
        • 2)举例说明
        • 3)input() 条件判断报错
      • 2.5 模式匹配、复杂匹配
        • 1)模式匹配
        • 2)复杂匹配
        • 3)匹配列表
      • 2.6 循环
        • 1)for 循环
        • 2)while 循环

一、第一个 Python 程序

在正式编写第一个 Python 程序前,我们先复习一下什么是命令行模式和 Python 交互模式。

1.1 命令行模式、Python 交互模式

命令行模式:

在 Windows 开始菜单选择 “命令提示符”,就进入到命令行模式,它的提示符类似 C:\>

Python 交互模式:

在命令行模式下敲命令 python,就看到类似如下的一堆文本输出,然后就进入到 Python 交互模式,它的提示符是 >>>

在 Python 交互模式下输入 exit() 并回车,就退出了 Python 交互模式,并回到命令行模式:

也可以直接通过开始菜单选择 Python 3.10 (64-bit) 菜单选项,直接进入 Python 交互模式。

了解了如何启动和推出 Python 的交互模式,我们就可以正式开始编写 Python 代码了。

1.2 Python的执行方式

  • 数学计算:

在交互模式的提示符 >>> 下,直接输入代码,按回车,就可以立刻得到代码执行结果。现在,试试输入 100+200,回车之后就可以立马得到计算结果:

>>> 100+200
300
  • 打印指定文字:

如果要让 Python 打印出指定的文字,可以用 print() 函数,然后把希望打印的文字用单引号或者双引号括起来,单不能混用单引号和双引号:

>>> print('hello, world')
hello, world
  • 执行 .py 文件:

在命令行模式下,可以执行 python 进入 Python 交互环境,也可以执行 python hello.py 运行一个 .py 文件。

此外,在命令行模式运行 .py 文件和 Python 交互环境下直接运行 Python 代码有所不同。Python 交互环境会把每一行 Python 代码的结果自动打印出来,但是,直接运行 Python 代码却不会默认打印。

比如,写入一个 calc.py 的文件,内容如下:

100+200+300

然后再命令行模式下执行:

C:\work>python calc.py

发现什么输出都没有,这是正常的。想要输出结果,必须用 print() 打印出来,如下所示:

print(100+200+300)

再执行,就可以看到结果:

C:\work>python calc.py
600

最后,Python交互模式的代码时输入一行,执行一行,二命令行模式下直接运行 .py 文件时一次性执行该文件内的所有代码。

可见,Python 交互模式 主要是为了调试 Python 代码用的,也便于初学者学习,它 不是正式运行 Python 代码的环境

1.3 SyntaxError 语法错误

如果遇到了 SyntaxError,表示输入的 Python 代码有语法错误,最常见的一种语法错误是使用了中文括号

>>> print'hello')
  File "<stdin>", line 1
    print'hello'^
SyntaxError: invalid character '(' (U+FF08)

或者使用了中文引号

>>> print(“hello”)
  File "<stdin>", line 1
    print(“hello”)
          ^
SyntaxError: invalid character '“' (U+201C)

1.4 输入和输出

  • 输入:

如果要让用户从电脑输入一些字符串怎么办?Python 提供了一个 input() 方法。可以让用户输入字符串,并存放到一个变量里。

比如输入用户的名字:

>>> name = input();
Michael

当你输入 name=input() 并按下回车后,Python 交互式命令行就在等待你的输入了。这时,你可以输入任意字符,然后按回车后挖成输入。

输入完成后,不会有任何提示,Python 交互式命令又回到 >>> 状态了。我们刚才输入的内容存放到 name 变量里了。可以直接输入 name 查看变量内容,如下所示:

>>> name
'Michael'
  • 输出:

print() 在括号中加上字符串,就可以像屏幕上输出指定的文字。比如输出 'hello, world',用代码实现如下:

>>> print('hello, world')
hello, world

print() 函数也可以接受多个字符串,用英文逗号 , 隔开,就可以连成一串输出:

>>> print('The quick brown fox', 'jumps over', 'the lazy dog')
The quick brown fox jumps over the lazy dog

print() 函数会依次打印每个字符串,遇到英文逗号 , 会输出一个空格。因此,输出的字符串是这样拼起来的:

print() 也可以打印整数,或者计算结果:

>>> print(300)
300
>>> print(100 + 200)
300

因此,我们可以把计算 100 + 200 的结果打印得更漂亮一些:

>>> print('100 + 200 =', 100 + 200)
100 + 200 = 300

有了输入和输出,我们就可以把上次打印 'hello, world' 的程序改成有意义一些:

name = input('please enter your name: ')
print('hello', name)

再次运行这个程序,你会发现,程序一运行,会首先打印出 please enter your name: 。这样用户就可以根据提示,输入姓名后,得到 hello, xxx 的输出:

每次运行该程序,根据用户输入的不通,输出结果也会不同。


二、Python 基础

2.1 Python 语法

Python 的语法比较简单,采用缩进方式,写出来的代码就像下面的样子:

# print absolute value of an interger:
a = 1000
if a >= 0:
    print(a)
else:
    print(-a)
  • 注释:

# 开头的语句是注释,注释的作用是方便代码阅读,解释器会忽略掉注释。

  • 缩进:

缩进有利有弊。

好处1:强迫你写出格式化的代码,应该始终坚持使用 4个空格作为缩进

好处2:强迫你写出缩进较少的代码,你会倾向于把一段很长的代码拆分成若干函数,从而得到缩进较少的代码。

坏处:“复制-粘贴”功能失效了。IDE 很难像格式化 Java 代码那样格式化 Python 代码,当你重构代码时,粘贴过去的代码必须重新检查缩进是否正常。

  • 大小写敏感:

请务必注意,Python 程序是大小写敏感的,如果写错了大小写,程序会报错。

2.2 数据类型

Python3 中有 六个标准的数据类型:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Sets(集合)、Dictionary(字典)。

Python3 的六个标准数据类型中:

  • 不可变数据(3个): Number(数字)、String(字符串)、Tuple(元组);
  • 可变数据(3个): List(列表)、Dictionary(字典)、Set(集合)。
1)Number 数字

Python3 支持 int、float、bool、complex(复数)。

数字类型是顾名思义用来存储数值的,需要记住的是,有些和 Java 的字符串差不多的是,如果改变了数据类型的值,将重新分配内存空间。

Python 支持三种不同的数值类型:

  • 整型(Int):通常被称为是整型或整数,是正或负整数,不带小数点。Python3 整型是没有大小限制的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型。
  • 浮点型(float):浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 × 10的2次方 = 250)。
  • 复数(complex):复数由实数部分和虚数部分构成,可以用 a + bj,或者 complex(a, b) 表示,复数的实部 a 和虚部 b 都是浮点型。

示例:创建一个 number.py,内容如下:

counter = 100    # 整型变量
miles   = 1000.0 # 浮点型变量
name    = "test" # 字符串

print(counter)
print(miles)
print(name)

执行结果:

数字类型转换:

  • int(x):将 x 转换为一个整数。
  • float(x):将 x 转换到一个浮点数。
  • complex(x):将 x 转换到一个复数,实数部分为 x,虚数部分为 0。
  • complex(x, y):将 x 和 y 转换到一个复数,实数部分为 x,叙述部分为 y。x 和 y 是数字表达式。

和别的语言一样,数字类型支持各种常见的运算,不过 Python 的运算比别的大多数常见语言都更加丰富。此外,还有大量丰富的方法,提供更高效的开发。

数值运算示例:

  • +:加法,例:5 + 4 = 9
  • -:减法,例:4.3 - 2 = 2.3
  • *:乘法,例:3 * 7 = 21
  • /:除法,得到一个浮点数,例:2 / 4 = 0.5
  • //:除法,得到一个整数,例:2 // 4 = 0
  • %:取余,例:17 % 3 = 2
  • **:乘方,例:2 ** 10 = 1024
2)String 字符串

创建字符串可以使用单引号 '、双引号 "、三单引号 ''' 和三双引号 """,其中三引号可以多行定义字符串,Python 不支持单字符类型,单字符在 Python 也是作为一个字符串使用。

我们定义一个 s='python' 语句,它在计算机中的执行顺序是:

  1. 先在内存中创建一个字符串 “python”;
  2. 在程序栈寄存器中创建一个变量 s;
  3. 最后把 “python” 字符串的地址赋值给 s。

字符串的常见操作:

  • 切片(slice):语法为 [ 起始 : 结束 : 步长],选取的区间为 “左闭右开”。“起始” 为空,则默认从头开始;“结束” 为空,则默认一直到结尾;步长为空,则默认为1。
>>> s = '学习Python'
>>> s[0], s[-1], s[3:], s[::-1]
('学', 'n', 'ython', 'nohtyP习学')
  • 替换(可以使用正则表达式)
>>> s = '学习Python'
>>> s.replace('Python', 'Java')
'学习Java'
  • 查找

    find():返回子字符串第一次出现的索引,找不到返回 -1

    index():返回子字符串第一次出现的索引,找不到抛出 ValueError

    rfind():返回子字符串最后一次出现的索引,找不到返回 -1

    rindex():返回子字符串最后一次出现的索引,找不到抛出 ValueError

>>> s = '学习Python'
>>> s.find('P') # 返回第一次出现的子串的下标(从0开始)
2
>>> s.find('h', 2) # 设定从下标2开始查找
5
>>> s.find('2333') # 查找不到会返回-1
-1
>>> s.index('y') # 返回第一次出现的子串的下标
3
>>> s.index('a') # 不同于find(),查找不到会抛出异常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found
  • 转大小写

    upper():将所有字母转大写。

    lower():将所有字母转小写。

    swapcase():将所有字母交换大小写。

    capitalize():将第一个字母转换为大写,其余字母转换为小写。

    istitle():检查字符串是否为标题格式(首个单词的首字母大写,其余小写)。

    isupper():检查是否所有字母大写。

    islower():检查是否所有字母小写。

>>> s = '学习Python'
>>> s.upper() # 转大写
'学习PYTHON'
>>> s.swapcase() # 交换大小写
'学习pYTHON'
>>> s.istitle() # 是否首字母大写,其余小写
True
>>> s.islower() # 是否小写
False
  • 去空格

    strip([chars]):去除字符串两端的指定字符(默认为空白字符)。

    lstrip([chars]):去除字符串左侧的指定字符(默认为空白字符)。

    rstrip([chars]):出去字符串右侧的指定字符(默认为空白字符)。

>>> s = ' 学习Python '
>>> s.strip()
'学习Python'
  • 格式化:有以下三种方式可以进行格式化:(推荐使用 format() 格式化字符串

方式一:使用 % 格式化

常见的占位符如下。

占位符替换内容
%d整数
%f浮点数
%s字符串
%x十六进制整数

有几个 %? 占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个 %?,括号可以省略。

>>> s1 = '%s %s' % ('Windriver', 21)
>>> s1
'Windriver 21'

其中格式化整数和浮点数还可以指定是否补0和整数与小数的位数:

# 是否补0、保留位数
>>> '%2d-%02d' % (3, 1)
' 3-01'
>>> '%.2f' % 3.1415926
'3.14'

如果你不太确定应该用什么,%s 永远起作用,它会把任何数据类型转换为字符串:

>>> 'Age: %s. Gender: %s' %

方式二:使用 format() 格式化

方式三:使用 f-string 格式化

>>> s2 = '{}, {}'.format('Windriver', 21)
>>> s2
'Windriver, 21'
>>> s3 = '{0}, {1}, {0}'.format('Windriver', 21)
>>> s3
'Windriver, 21, Windriver'
>>> s4 = '{name}: {age}'.format(name='Windriver', age=21)
>>> s4
'Windriver: 21'
  • 连接与分割:使用 + 连接字符串,每次操作会重新计算、开辟、释放内存,效率很低,推荐使用 join()。
>>> l = ['2024', '12', '09', '22:00']
>>> '-'.join(l)
'2024-12-09-22:00'
>>> '-'.join(l).split('-')
['2024', '12', '09', '22:00']
  • 字符串编码:所有 Python 字符串都是 Unicode 字符串,当需要将文件保存到外设或进行网络传输时,就要进行编码转换,以提高效率。
# encode() 将字符转换为字节
>>> s = '学习Python'
>>> print(s.encode()) # 默认输出 UTF-8 编码格式。(输出内容中b开头表示当前内容为二进制)
b'\xe5\xad\xa6\xe4\xb9\xa0Python'
>>> print(s.encode('gbk')) # 输出为 GBK 编码格式
b'\xd1\xa7\xcf\xb0Python'

# decode() 将字节转换为字符
>>> s.encode().decode('utf8')
'学习Python'
>>> s.encode('gbk').decode('gbk')
'学习Python'
3)List 列表

类似 Java List 集合接口。

列表(List) 是写在方括号 [] 之间,用英文逗号 , 分隔开的元素列表,列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字、字符串甚至可以包含列表(嵌套),列表中的元素是可以改变的。

示例:

>>> Weekday = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']

# list 根据坐标查询
>>> Weekday[0]
'Monday'

# list 根据内容查询(重复的话,仅返回第一个坐标)
>>> Weekday.index('Wednesday')
2

# list 增加元素
>>> Weekday.append('new')
>>> Weekday
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'new']

# list 删除
>>> Weekday.remove('Thursday')
>>> Weekday
['Monday', 'Tuesday', 'Wednesday', 'Friday', 'new']
4)Tuple 元组

元组(Tuple) 与列表类似,不同之处在于 元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开,组中的元素类型也可以不相同。

示例:

>>> letters = ('a', 'b', 'c', 'd', 'e', 'f', 'g')

# Tuple 根据坐标查询
>>> letters[0]
'a'

# Tuple 输出子元组
>>> letters[0:3]
('a', 'b', 'c')
5)Set 集合

类似 Java Set 集合接口。

集合(Set) 是一个无序不重复元素的序列,使用大括号 {} 或者 set() 函数创建集合。

注意:创建一个空集合必须使用 set() 而不是 {},因为 {} 是用来创建一个空字典。

  • 集合可以进行的操作:集合运算、添加、删除。(集合不能被切片,也不能根据坐标查询)

示例:

>>> a_set = {1, 2, 3, 4}

# Sets 添加
>>> a_set.add(5)
>>> a_set
{1, 2, 3, 4, 5}

# Sets 删除
>>> a_set.discard(5)
>>> a_set
{1, 2, 3, 4}
6)Dict 字典

类似 Java Map 集合接口。

字典(Dict) 是一种映射类型,它的元素是键值对,字典的关键字必须为不可变类型,且不能重复。创建空字典使用 {}

示例:

>>> logo_code = {
... 'BAIDU': 'Baidu',
... 'SINA': 'Sina',
... 'YOKU': 'Youku'
... }
>>> logo_code
{'BAIDU': 'Baidu', 'SINA': 'Sina', 'YOKU': 'Youku'}

# 输出键为 'one' 的值
>>> logo_code['SINA']
'Sina'

# 输出所有健
>>> logo_code.keys()
dict_keys(['BAIDU', 'SINA', 'YOKU'])

# 输出所有值
>>> logo_code.values()
dict_values(['Baidu', 'Sina', 'Youku'])

# 输出键值对个数
>>> len(logo_code)
3
7)空值

空值 是 Python 里一个特殊的值,用 None 表示。

注意:None 不能理解为 0,因为 0 是有意义的,而 None 是一个特殊的控制。

此外,Python 还允许创建自定义数据类型,我们后面会继续讲到。

2.3 变量、常量

1)变量

变量 的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。

变量命名的规则:

变量名必须由 英文大小写(区分大小写)、数字下划线 _ 组成。

  1. 小写字母: 变量名通常使用小写字母,单词之间用下划线分隔,这种风格称为 蛇形命名法(Snake Case)
  2. 简洁明了: 变量名应简短且具有描述性,避免使用模糊不清的缩写。
  3. 避免使用关键字: 不要使用 Python 的关键字作为变量名,如 ifforwhile 等。
  4. 避免使用数字开头: 变量名不应以数字开头,这会导致语法错误。

举个例子:

a = 1
b = 'T007'
c = True
  • 可以看到,变量可以是整数、字符串、布尔值等各种类型。

这种变量本身类型不固定的语言称之为 动态语言,与之对应的是 静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如 Java 是静态语言,赋值语言如下:(//表示 Java 注释)

int a = 123; // a是整数类型变量
a = "ABC"; // 报错:不能把字符串赋给整型变量

和静态语言相比,动态语言更灵活,就是这个原因。

最后,理解变量在计算机内存中的表示也非常重要。当我们编写如下代码:

a = 'ABC'

Python 解释器做了两件事:

  1. 在内存中创建了一个 ABC 的字符串;
  2. 在内存中创建了一个名为 a 的变量,并把它指向 ABC

Python 中,变量和变量值的关系实际上和 Java 的 “地址引用” 以及 C 的 “指针” 是相同的概念。

所以大家可以猜到,没错!Python 中也是通过 垃圾收集器(GC) 来进行内存回收的!

2)常量

所谓 常量 就是指不能改变的变量,比如常用的数学常数 π 就是一个常量。在 Python 中,通常用 全部大写 + 下划线 的变量名来表示常量。如下所示:

PI = 3.14159265359

但事实上 PI 仍然是一个变量,Python 根本没有任何机制保证 PI 不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法,如果你一定要改变变量 PI 的值,也不会报编译错误。

最后解释一下整数的除法为什么也是精确的。

在 Python 中,有两种除法,一种除法是 /。如下所示:

>>> 10 / 3
3.3333333333333335

/ 除法计算结果是 浮点数,即使是两个整数恰好整除,结果也是浮点数。如下所示:

>>> 9 / 3
3.0

还有一种除法是 //,称为 地板除,即相除之后向下取整为整数。如下所示:

>>> 10 // 3
3

因为 // 地板除只取结果的整数部分,所以 Python 还提供一个余数运算,可以得到两个整数相除的余数,如下所示:

>>> 10 % 3
1

无论整数做 // 地板除还是取余数,结果永远是整数。所以,整数运算结果永远是精确的。

总结:

Python 支持多种数据类型,在计算机内部,可以把任何数据都看成一个 “对象”,而变量就是在程序中用来指向这些数据对象的,对变量赋值就是把数据和变量给关联起来。

对变量赋值 x = y 是把变量 x 指向阵阵的对象,该对象是变量 y 所指向的。随后对变量 y 的赋值 不影响 变量 x 的指向。

注意:

1.Python 的整数没有大小限制,而某些语言的整数根据其存储长度是有大小限制的,例如 Java 对 32 位整数的范围限制在 -214748364821473647

2.Python 的浮点数也没有大小限制,da你是超出一定返回就直接表示为 inf(无限大)。

2.4 条件判断

计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。

1)条件判断语法

条件判断语法如下:

if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
elif <条件判断3>:
<执行3>
else:
<执行4>

2)举例说明

比如,输入用户年龄,根据年龄打印不同的内容,在 Python 程序中,用 if 语句实现:

age = 20
if age >= 18
    print('your age is', age)
    print('adult')

根据 Python 的缩进规则,如果 if 语句判断是 True,就把缩进的两行 print() 语句执行了,否则,什么也不做。执行结果如下:

也可以给 if 添加一个 else 语句,如果 if 判断是 Flase,不执行 if 的内容,执行 else 内容:

age = 3
if age >= 18:
    print('your age is', age)
    print('adult')
else:
    print('your age is', age)
    print('teenager')

注意不要少写了冒号 :,执行结果如下:

当然上面的判断是很粗略的,完全可以用 elif 做更细致的判断:

  • elifelse if 的缩写,完全可以有多个 elif
age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')

补充: if 判断条件还可以简写,比如写:

if x:
 print('True')

只要 x 是非零数值、非空字符串、非空list等,就判断为 True,否则为 False

3)input() 条件判断报错

当我们使用 input() 读取用户的输入后,如果我们直接进行条件判断会报错,如下代码所示:

birth = input('birth: ')
if birth < 2000:
    print('00前')
else:
    print('00后')

执行后,输入 1982,结果报错:

Traceback (most recent call last):
  File "D:\pythonProject\python-demo\test\test.py", line 2, in <module>
    if birth < 2000:
TypeError: '<' not supported between instances of 'str' and 'int'

这是因为 input() 返回的数据类型是 strstr 不能直接和整数比较,必须先把 str 转换成整数。Python 提供了 int() 函数来进行转换:

birth = input('birth: ')
birth = int(birth)
if birth < 2000:
    print('00前')
else:
    print('00后')

再次运行,就可以得到正确的结果。

2.5 模式匹配、复杂匹配

1)模式匹配

模式匹配:使用 match 语句来针对某个变量匹配若干种情况。避免用 if … elif … elif … else … 判断,可读性较差。

例如,某个学生的成绩只能是 ABC,用 match 语句编写的代码如下所示:

score = 'B'

match score:
    case 'A':
        print('score is A.')
    case 'B':
        print('score is B.')
    case 'C':
        print('score is C.')
    case _: # _表示匹配到其他任何情况
        print('score is ???.')

使用 match 语句时,我们依次用 case xxx 匹配,并且可以在最后(且仅能在最后)加一个 case _ 表示 “任意值”,相比一连串的 if … elif … 更易读。

2)复杂匹配

复杂匹配:即在 match 语句的基础上,除了可以匹配简单的单个值外,还可以匹配多个值、匹配一定范围,并且把匹配后的值绑定到变量:

age = 15

match age:
    case x if x < 10:
        print(f'< 10 years old: {x}')
    case 10:
        print('10 years old.')
    case 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18:
        print('11~18 years old.')
    case 19:
        print('19 years old.')
    case _:
        print('not sure.')
  • case x if x < 10:表示当 age < 10 成立时匹配,且赋值给 x。
  • case 10:仅匹配单个值。
  • case 11|12|...|18:能匹配多个值,用 | 分隔。
3)匹配列表

匹配列表:即在 match 语句的基础上,支持数组匹配。

代码示例如下:

args = ['gcc', 'hello.c', 'world.c']
# args = ['clean']
# args = ['gcc']

match args:
    # 如果仅出现 gcc,报错:
    case ['gcc']:
        print('gcc: missing source ')
    # 出现 gcc,且至少指定了一个文件
    case ['gcc', file1, *files]:
        print('gcc compile: ' + file1 + ',' + ','.join(files))
    # 仅出现 clean
    case ['clean']
    	print('clean')
    case _:
        print('invalid command.')
  • case ['gcc']:表示列表仅有 ‘gcc’ 一个字符串,没有指定文件名,报错;
  • case ['gcc', file1, *files]:表示列表第一个字符串是 gcc,第二个字符串绑定到变量 file1,后面的任意个字符串绑定到 *files(符号 * 的作用将在 函数的参数 中讲解),它实际上表示至少指定一个文件;
  • case ['clean']:表示列表仅有 clean 一个字符串;
  • case _:表示其他所有情况。

2.6 循环

Python 的循环有两种,一种是 for 循环,另一种是 while 循环。

1)for 循环

for ... in 循环是依次把 List 或 Tuple 中的每个元素迭代出来,看例子:

names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name)

执行这段代码,会依次打印 names 的每一个元素,结果如下:

所以 for x in ... 循环就是把每个元素代入变量 x,然后执行缩进块的语句。

再比如,我们像计算 1~10 的整数之和,可以用一个 sum 变量做累加,代码如下:

sum = 0
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    sum = sum + x
print(sum)

注意: 如果是在 Python 的交互模式下,或者在编写模块时,for 循环后面是必须要加一个 else 语句的,用于在 for 循环正常结束后(即没有遇到 break)执行,否则会报 SyntaxError: invalid syntax。正确写法如下:

sum = 0
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    sum = sum + x
else:
    print(sum)

为了简化操作,Python 提供了一个 range() 函数,可以生成一个整数序列,再通过 list() 函数可以转换为 list。比如 range(5) 生成的序列是从 0 开始小于 5 的整数:

>>> list(range(5))
[0, 1, 2, 3, 4]

那么上述计算 1~10 的整数之和,就可以简写为这样:

sum = 0
for x in range(11):
    sum = sum + x
print(sum)

执行结果:

2)while 循环

while循环 是指只要条件满足,就不断循环,条件不满足时则退出循环。

比如,我们要计算 100 以内所有奇数之和,可以用 while 循环实现:

sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
print(sum)

在循环内部变量 n 不断自减,直到变为 -1 时,不再满足 while 条件,循环退出。

整理完毕,完结撒花~ 🌻





参考地址:

1.Python课程,https://liaoxuefeng.com/books/python/introduction/index.html

2.学习Python,这一篇管够(入门|基础|进阶|实战),https://zhuanlan.zhihu.com/p/421726412

3.Python学习——尾递归及装饰器优化,https://cloud.tencent.com/developer/article/1964203

4.【Python】Python变量和函数的命名规范,https://blog.csdn.net/baidu_22713341/article/details/139345722

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2276143.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLM - Llama 3 的 Pre/Post Training 阶段 Loss 以及 logits 和 logps 概念

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/145056912 Llama 3 是 Meta 公司发布的开源大型语言模型&#xff0c;包括具有 80 亿和 700 亿参数的预训练和指令微调的语言模型&#xff0c;支持…

[RabbitMQ] RabbitMQ运维问题

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

MongoDB如何使用

1.简单介绍 MongoDB是一个开源、高性能、无模式的文档型数据库&#xff0c;当初的设计就是用于简化开发和方便扩展&#xff0c;是NoSQL数据库产品中的一种。是最 像关系型数据库&#xff08;MySQL&#xff09;的非关系型数据库。 MongoDB是一个基于分布式文件存储的数据库由C语…

【2024年华为OD机试】(C卷,100分)- 分割均衡字符串 (Java JS PythonC/C++)

一、问题描述 题目描述 均衡串定义&#xff1a;字符串中只包含两种字符&#xff0c;且这两种字符的个数相同。 给定一个均衡字符串&#xff0c;请给出可分割成新的均衡子串的最大个数。 约定&#xff1a;字符串中只包含大写的 X 和 Y 两种字符。 输入描述 输入一个均衡串…

React Fiber框架中的Commit提交阶段——commitMutationEffect函数

Render阶段 Render阶段可大致归为beginWork&#xff08;递&#xff09;和completeWork&#xff08;归&#xff09;两个阶段 1.beginWork流程&#xff08;递&#xff09; 建立节点的父子以及兄弟节点关联关系 child return sibling属性给fiber节点打上flag标记(当前节点的flag) …

【STM32-学习笔记-6-】DMA

文章目录 DMAⅠ、DMA框图Ⅱ、DMA基本结构Ⅲ、不同外设的DMA请求Ⅳ、DMA函数Ⅴ、DMA_InitTypeDef结构体参数①、DMA_PeripheralBaseAddr②、DMA_PeripheralDataSize③、DMA_PeripheralInc④、DMA_MemoryBaseAddr⑤、DMA_MemoryDataSize⑥、DMA_MemoryInc⑦、DMA_DIR⑧、DMA_Buff…

IoT平台在设备远程运维中的应用

IoT平台是物联网技术的核心组成部分&#xff0c;实现了设备、数据、应用之间的无缝连接与交互。通过提供统一的设备管理、数据处理、安全监控等功能&#xff0c;IoT平台为企业构建了智能化、可扩展的物联网生态系统。在设备远程运维领域&#xff0c;IoT平台发挥着至关重要的作用…

浅谈云计算05 | 云存储等级及其接口工作原理

一、云存储设备 在当今数字化飞速发展的时代&#xff0c;数据已然成为个人、企业乃至整个社会的核心资产。从日常生活中的珍贵照片、视频&#xff0c;到企业运营里的关键业务文档、客户资料&#xff0c;数据量呈爆炸式增长。面对海量的数据&#xff0c;如何安全、高效且便捷地存…

网络传输层TCP协议

传输层TCP协议 1. TCP协议介绍 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一个要对数据的传输进行详细控制的传输层协议。 TCP 与 UDP 的不同&#xff0c;在于TCP是有连接、可靠、面向字节流的。具体来说&#xff0c;TCP设置了一大…

【Linux系列】`find / -name cacert.pem` 文件搜索

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【论文笔记】Sign Language Video Retrieval with Free-Form Textual Queries

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Sign Language Video Retr…

Observability:将 OpenTelemetry 添加到你的 Flask 应用程序

作者&#xff1a;来自 Elastic jessgarson 待办事项列表可以帮助管理与假期计划相关的所有购物和任务。使用 Flask&#xff0c;你可以轻松创建待办事项列表应用程序&#xff0c;并使用 Elastic 作为遥测后端&#xff0c;通过 OpenTelemetry 对其进行监控。 Flask 是一个轻量级…

网站目录权限加固

说明 在一个入侵链路中&#xff0c;往往是利用某个安全漏洞&#xff0c;向服务器写入或上传一个webshell&#xff08;后门&#xff09;&#xff0c;再通过webshell提权或进行后续渗透入侵行为。 这个过程中&#xff0c;获取webshell是最关键最重要的一个步骤&#xff0c;如能在…

qt QPainter setViewport setWindow viewport window

使用qt版本5.15.2 引入viewport和window目的是用于实现QPainter画出来的内容随着窗体伸缩与不伸缩两种情况&#xff0c;以及让QPainter在widget上指定的区域(viewport)进行绘制/渲染&#xff08;分别对应下方demo1&#xff0c;demo2&#xff0c;demo3&#xff09;。 setViewpo…

一些计算机零碎知识随写(25年1月)-1

我原以为世界上有技术的那批人不会那么闲&#xff0c;我错了&#xff0c;被脚本真实了。 今天正隔着画画呢&#xff0c;手机突然弹出几条安全告警通知。 急忙打开服务器&#xff0c;发现问题不简单&#xff0c;直接关服务器重装系统..... 首先&#xff0c;不要认为小网站&…

分布式锁Redisson详解,Redisson如何解决不可重入,不可重试,超时释放,主从一致问题的分析解决(包括源码简单分析)

目录 1. Redisson解决不可重入锁导致的死锁问题 2. 不可重试问题 Pub/Sub 的优势 锁释放的发布逻辑 3. 超时释放的问题 1. 锁的超时释放机制背景 2. 源码分析 2.1 锁的获取 2.2 看门狗机制 2.3 看门狗续期实现 2.4 手动设置锁的过期时间 总结 4. 主从一致性 问题…

【微服务】面试 4、限流

微服务限流技术总结 一、微服务业务面试题引入 在微服务业务面试中&#xff0c;限流是重要考点&#xff0c;常与分布式事务、分布式服务接口幂等解决方案、分布式任务调度等一同被考查。面试官一般会询问项目中是否实施限流及具体做法&#xff0c;回答需涵盖限流原因、采用的方…

爬虫基础之爬取歌曲宝歌曲批量下载

声明&#xff1a;本案列仅供学习交流使用 任何用于非法用途均与本作者无关 需求分析: 网站:邓紫棋-mp3在线免费下载-歌曲宝-找歌就用歌曲宝-MP3音乐高品质在线免费下载 (gequbao.com) 爬取 歌曲名 歌曲 实现歌手名称下载所有歌曲 本案列所使用的模块 requests (发送…

树莓派-5-GPIO的应用实验之GPIO的编码方式和SDK介绍

文章目录 1 GPIO编码方式1.1 管脚信息1.2 使用场合1.3 I2C总线1.4 SPI总线2 RPI.GPIO2.1 PWM脉冲宽度调制2.2 静态函数2.2.1 函数setmode()2.2.2 函数setup()2.2.3 函数output()2.2.4 函数input()2.2.5 捕捉引脚的电平改变2.2.5.1 函数wait_for_edge()2.2.5.2 函数event_detect…

Scala分布式语言二(基础功能搭建、面向对象基础、面向对象高级、异常、集合)

章节3基础功能搭建 46.函数作为值三 package cn . itbaizhan . chapter03 // 函数作为值&#xff0c;函数也是个对象 object FunctionToTypeValue { def main ( args : Array [ String ]): Unit { //Student stu new Student() /*val a ()>{"GTJin"…