前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【python】零基础入门(2/3):if 语句 || for 循环 || while 循环 || try-except 异常处理

【python】零基础入门(2/3):if 语句 || for 循环 || while 循环 || try-except 异常处理

原创
作者头像
魏言
修改2025-02-20 11:17:39
修改2025-02-20 11:17:39
14600
代码可运行
举报
运行总次数:0
代码可运行

6. if 语句

6.1. 基本的 if 语句

常用的 if 语句如下,if 后面接个条件语句,如果为 True 且不为空,就执行 if 后续代码,如果不符合,就不执行。

if 后面如果直接传 True 或者返回结果为 True 的条件语句时,会执行 if 内的代码。

if 后面如果传某个对象如数字、字符串、列表、字典等,如果对方非空,会执行 if 内的代码。

相对应的,如果 if 后面传 False 或者返回结果为 False 的条件语句,或者传入空值、空列表以及None,都不会执行 if 后续的代码。

代码语言:python
代码运行次数:0
复制
name = ''
age = 17
sign = False

if True:
    print('目标为 True,执行if后的代码')

if age < 18:
    print('条件语句返回为 True,执行 if 后的代码')

if sign:
    print('目标为 False,if 后的代码不执行')

if name:
    print('目标为空值,if 后的代码不执行')

if None:
    print('目标为 None,if 后的代码不执行')

words = '已成年' if age >= 18 else '未成年'  # 单行if语句
print(words)

输出结果为:

代码语言:txt
复制
目标为 True,执行if后的代码
条件语句返回为 True,执行 if 后的代码
未成年

6.2. if-else 语句

如果符合 if 的条件,就执行 if 后面的代码,如果不符合,就执行 else 后面的代码。

备注:如果出现异常报错,属于额外情况,不属于“不符合 if 条件”,执行 else 语句。

代码语言:python
代码运行次数:0
复制
age = 17
if age >= 18:  # if-else语句
    print('已成年')
else:
    print('未成年')

输出结果为:

代码语言:txt
复制
未成年

6.3. if-elif-else 语句

在 if-elif-else 语句中,elif 可以多加,变成 if-elif-elif-else 模式、if-elif-elif-elif-else 模式都可以。

else 可以不要,变成 if-elif 或者 if-elif-elif 的模式

代码语言:python
代码运行次数:0
复制
age = 17
if age > 18:  # if-elif-else语句,elif可以多加,else可以不要
    print('已成年')
elif age == 18:
    print('刚成年')
else:
    print('未成年')

输出结果为:

代码语言:txt
复制
未成年

6.4. 嵌套 if 语句

if 语句是可以多层嵌套的,简单的嵌套用法示例如下:

代码语言:python
代码运行次数:0
复制
age = 17
if age >= 18:  # 嵌套if语句
    if age == 18:
        print('刚成年')
    else:
        print('已成年')
else:
    print('未成年')

输出结果为:

代码语言:txt
复制
未成年

6.5. if 语句和与、或、非

if 语句和与、或、非的结合用法示例如下,非常实用:

代码语言:python
代码运行次数:0
复制
if 3 < 5 and 7 < 9:  # 多条件判断,与
    print('3小于5 且 7小于9')

if 3 < 5 or 7 > 9:  # 多条件判断,或
    print('3小于5 或 7小于9')

if not 3 > 5:  # 非
    print('3不大于5')

输出结果为:

代码语言:txt
复制
3小于5 且 7小于9
3小于5 或 7小于9
3不大于5

6.6. if 语句和 is、in

if 语句和 is、in 结合,用于条件判断,很常用。

代码语言:python
代码运行次数:0
复制
age = 17
age2 = age
if 'a' in 'abc':  # if语句和in结合,可以加not
    print('True')

if age is age2:  # if语句和is结合,可以加not
    print('age 和 age2 是一个对象')

输出结果为:

代码语言:txt
复制
True
age 和 age2 是一个对象

7. for 循环

7.1. for 循环的简单用法

使用 for 循环,可以对对象内容进行遍历,包括字符串,列表等。

遍历 range() 函数、字符串、列表:

代码语言:python
代码运行次数:0
复制
for num in range(1, 4):  # 遍历range()函数
    print(num)

for char in 'Ok':  # 遍历字符串
    print(char)

colors = ['red', 'green', 'blue']
for color in colors:  # 遍历列表
    print(color)

输出结果为:

代码语言:txt
复制
1
2
3
O
k
red
green
blue

遍历字典:

代码语言:python
代码运行次数:0
复制
infor = {'name': 'Weiyan', 'age': 17, 'city': 'shenzhen'}
print('遍历字典的键:')
for key in infor.keys():  # 遍历字典的键
    print(key)

print('遍历字典的值:')
for value in infor.values():  # 遍历字典的值
    print(value)

print('遍历字典的键值对:')
for key, value in infor.items():  # 遍历字典的键值对
    print(key, value)

输出结果为:

代码语言:txt
复制
遍历字典的键:
name
age
city
遍历字典的值:
Weiyan
17
shenzhen
遍历字典的键值对:
name Weiyan
age 17
city shenzhen

7.2. 遍历多个序列

使用 zip() 函数,可以同时遍历多个字对象。

如果两个对象的长度不同,则当短的那个遍历完成,整个遍历就结束。

代码语言:python
代码运行次数:0
复制
names = ['Weiyan', 'Youzi']
ages = [16, 17]
for name, age in zip(names, ages):  # 遍历多个序列
    print(name, age)

输出结果为:

代码语言:txt
复制
Weiyan 16
Youzi 17

7.3. 嵌套for循环

for 循环是可以多层嵌套的,一个简单的生成九九乘法表的示例如下:

代码语言:python
代码运行次数:0
复制
for i in range(1, 10):  # for循环中嵌套for循环
    for j in range(1, i+1):
        print(f"{j}×{i}={j*i}", end=' ')
    print('')

输出结果为:

代码语言:txt
复制
1×1=1 
1×2=2 2×2=4 
1×3=3 2×3=6 3×3=9 
1×4=4 2×4=8 3×4=12 4×4=16 
1×5=5 2×5=10 3×5=15 4×5=20 5×5=25 
1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36 
1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49 
1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64 
1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81 

算是一个比较经典的练习题,很多人初学时应该都试着做过吧。

7.4. for 循环和 else 结合

当 for 循环与 else 结合,如果循环中途没有 break,则循环结束后,会运行 else 中的代码

代码语言:python
代码运行次数:0
复制
for i in range(1, 6):  # for循环和else结合,如果中途没有break的话,循环结束后执行
    print('循环进行中,此时i=', i)
    if i == 5:
        break
else:
    print('循环结束,此时i=', i)

输出结果为:

代码语言:txt
复制
循环进行中,此时i= 1
循环进行中,此时i= 2
循环进行中,此时i= 3
循环进行中,此时i= 4
循环进行中,此时i= 5

7.5. for 循环中的 break、continue 和 pass

当 for 循环中,遇到 pass 时,什么也不会发生,遇到 continue 时,当前一轮循环直接结束,进入下一轮循环。

如果是遇到 break,则整个循环终止。

一个简单的示例如下,遇到7就跳过的游戏:

代码语言:python
代码运行次数:0
复制
for i in range(1, 1000):  # 使用continue跳过当前一轮循环,继续下一轮循环,使用break终止循环
    if i % 7 == 0 or '7' in str(i):
        continue
    elif i >= 16:
        break
    else:
        pass
        print(i)

输出结果为:

代码语言:txt
复制
1
2
3
4
5
6
8
9
10
11
12
13
15

8. while 循环

8.1. 基本的 while 循环

代码语言:python
代码运行次数:0
复制
num = 0
while num <= 3:  # 基本的while循环
    num += 1
    print(num)

输出结果为:

代码语言:txt
复制
1
2
3
4

8.2. while 循环和 else

当 while 循环与 else 结合,如果循环中途没有 break,则循环结束后,会运行 else 中的代码

代码语言:python
代码运行次数:0
复制
num = 0
while num <= 10:
    num += 1
else:
    print(num)

输出结果为:

代码语言:txt
复制
11

8.3. while 循环和 True

while 循环条件设置为 True 或者返回为 True 的的判断语句时,将进入无限循环,需要使用 break 来退出循环。

代码语言:python
代码运行次数:0
复制
num = 0
while True:
    num = num + 1
    if num < 5:
        print('循环继续,此时num=', num)
        continue
    elif num == 5:
        print('循环将中断,此时num=', num)
        break

输出结果为:

代码语言:txt
复制
循环继续,此时num= 1
循环继续,此时num= 2
循环继续,此时num= 3
循环继续,此时num= 4
循环将中断,此时num= 5

8.4. 用 while 循环处理用户输入

用 while 循环处理用户输入,可以设定正确输入条件,如果不符合,就让用户重新输入,如果符合,就把循环 break 掉。

代码语言:python
代码运行次数:0
复制
while True:  # 常见的用while循环处理用户输入
    name = input('输入名称:')
    if name.lower() == 'weiyan':
        print('welcome,', name.lower(), '!')
        break
    else:
        print('名称不符,请重新输入。')

输出结果为:

代码语言:txt
复制
输入名称:123
名称不符,请重新输入。
输入名称:yes
名称不符,请重新输入。
输入名称:Weiyan
welcome, weiyan !

8.5. while 循环中的 break、continue 和 pass

while 循环中,遇到 pass,什么也不会发生,遇到 continue,会跳过当前一轮循环剩下的代码,直接进入下一轮循环,遇到 break 则整个循环终止。

备注:pass 语句是一个空操作,它仅仅用来占位。它和 continue 的区别是,当前一轮的循环中,pass 之后的代码也会执行,而 continue 之后的代码不会执行

代码语言:python
代码运行次数:0
复制
i = 0
while True:
    i = i + 1
    if i == 10:
        break
    elif i % 2 == 0:
        pass
    elif i % 2 == 1:
        continue
    print('此时i是偶数,i =', i)

输出结果为:

代码语言:txt
复制
此时i是偶数,i = 2
此时i是偶数,i = 4
此时i是偶数,i = 6
此时i是偶数,i = 8

8.6. 嵌套 while 循环

while 循环的嵌套用法其实和 for 循环差不多,每层循环条件的设置是重点,它将决定循环中变量的变化顺序。

依然以九九乘法表为例,这里使用 while 循环去实现:

代码语言:python
代码运行次数:0
复制
i = 1
while i <= 9:  # while循环中嵌套while循环,
    j = 1
    while j <= i:
        print(f'{j}×{i}={i*j}', end=' ')
        j = j + 1
    print('')
    i = i + 1

输出结果为:

代码语言:txt
复制
1×1=1 
1×2=2 2×2=4 
1×3=3 2×3=6 3×3=9 
1×4=4 2×4=8 3×4=12 4×4=16 
1×5=5 2×5=10 3×5=15 4×5=20 5×5=25 
1×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36 
1×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49 
1×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64 
1×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81 

9. try-except 异常处理

9.1. ty-except 基本用法

我们使用 try 来运行一串有可能报异常的代码,然后在 except 中预估好可能出现什么异常,以及对应的处理方式。

基本用法,这里对字符类型错误的 TypeError 异常进行捕获和处理:

代码语言:python
代码运行次数:0
复制
try:
    num = '2' + 3
    print(num)
except TypeError:
    print('字符类型错误')

输出结果为:

代码语言:txt
复制
字符类型错误

9.2. 捕获多个异常

当然,一个 try 后面,可以接多个 except,来捕获多个不同的异常,并分别处理。

代码语言:python
代码运行次数:0
复制
try:
    num = '2' + 3
    print(num)
except TypeError:
    print('字符类型错误')
except SyntaxError:
    print('语法错误')

输出结果为:

代码语言:txt
复制
字符类型错误

9.3. 获取异常报错信息

可以在系统报错后,获取异常报错信息,然后把信息存入日志或者打印出来,有利于我们了解程序运行中的情况。

代码语言:python
代码运行次数:0
复制
try:
    num = '2' + 3
    print(num)
except TypeError as te:
    print(f'异常报错:', te)

输出结果为:

代码语言:txt
复制
异常报错: can only concatenate str (not "int") to str

9.4. 捕获所有异常

也许会有人觉得,如果程序可能出现的异常总类很多,每种都单独处理岂不是太麻烦?

也有可以捕获所有异常的办法。示例如下:

代码语言:python
代码运行次数:0
复制
try:
    num = '2' + 3
    print(num)
except:
    print('字符类型错误')

输出结果为:

代码语言:txt
复制
字符类型错误

但是并不建议这样做,因为会隐藏具体异常信息,不方便了解程序运行情况。比如上面这串代码,它无论出现什么异常,都会呆头呆脑的报”字符类型错误“,这显然不合适。

但是并非它就没有意义,我们可以在捕获所有异常后,把系统报出的异常信息打印出来,这样,在调试代码的时候,会非常方便。

代码语言:python
代码运行次数:0
复制
try:
    num = '2' + 3
    print(num)
except Exception as Error:
    print('报错内容:', Error)

输出结果为:

代码语言:txt
复制
报错内容: can only concatenate str (not "int") to str

当然,正式生产环境中仍不建议这样做,因为会使一些你没想到的异常信息被忽略,从而异常不能正确处理,导致后续代码都出现 bug。

9.5. try-except 和 else

try-except 和 else 组合使用,如果异常没有触发,循环结束后,就会运行 else 中的代码。

代码语言:python
代码运行次数:0
复制
try:
    num = '2' + 3
except TypeError as te:
    print(f'异常报错:', te)
else:
    print(num)

输出结果为:

代码语言:txt
复制
异常报错: can only concatenate str (not "int") to str

9.6. try-except 和 finally

try-except 和 finally 组合使用,无论异常是否发生,都会执行 finally 中代码。

代码语言:python
代码运行次数:0
复制
try:
    num = '2' + 3
except TypeError as te:
    print(f'异常报错:', te)
finally:
    print('run finally')

输出结果为:

代码语言:txt
复制
异常报错: can only concatenate str (not "int") to str
run finally

9.7. 自定义异常

可以自己创建一个类来继承 Exception,然后在需要的时候,让代码抛出自己创建的异常。

代码语言:python
代码运行次数:0
复制
class Error1(Exception):
    pass

try:
    num = 2 + 3
    raise Error1('自定义异常1报错详细内容。')
except Error1 as E1:
    print(f'异常报错:', E1)

输出结果为:

代码语言:txt
复制
异常报错: 自定义异常1报错详细内容。

9.8. 重新抛出异常

有时候遇到异常,处理后,还是希望把这个异常抛出。

代码语言:python
代码运行次数:0
复制
try:
    num = '2' + 3
except TypeError as te:
    print(f'异常报错:', te)
    raise

输出结果为:

代码语言:txt
复制
Traceback (most recent call last):
  File "E:\python_scripts\isli_tools\base\base.py", line 570, in <module>
    num = '2' + 3
TypeError: can only concatenate str (not "int") to str

9.9. 嵌套 try-except

当业务流程有多个步骤都可能触发同一种异常,而你又希望给它们分别定制报错文本,就可以考虑这个方式。

这里我为了把每种情况都展示一下,在外层加了 while 循环。

代码语言:python
代码运行次数:0
复制
while True:
    try:
        age = int(input('输入年龄:'))
        try:
            height = int(input('输入身高(厘米):'))
        except ValueError:
            print('请输入正确的身高。\n')
        else:
            print(f'你的年龄是:{age} 岁,身高是:{height} 厘米。')
            break
    except ValueError:
        print('请输入正确的年龄。')

输出结果为:

代码语言:txt
复制
输入年龄:aaa
请输入正确的年龄。
输入年龄:17
输入身高(厘米):bbb
请输入正确的身高。

输入年龄:17
输入身高(厘米):170
你的年龄是:17 岁,身高是:170 厘米。

9.10. try-except 和 with

try-except 和 with 组合,在处理资源文件时很实用。

代码语言:python
代码运行次数:0
复制
try:
    with open('file.txt', 'r') as f:
        content = f.read()
    print(content)
except FileNotFoundError as fe:
    print('文件不存在:', fe)

输出结果为:

代码语言:txt
复制
文件不存在: [Errno 2] No such file or directory: 'file.txt'

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 6. if 语句
    • 6.1. 基本的 if 语句
    • 6.2. if-else 语句
    • 6.3. if-elif-else 语句
    • 6.4. 嵌套 if 语句
    • 6.5. if 语句和与、或、非
    • 6.6. if 语句和 is、in
  • 7. for 循环
    • 7.1. for 循环的简单用法
    • 7.2. 遍历多个序列
    • 7.3. 嵌套for循环
    • 7.4. for 循环和 else 结合
    • 7.5. for 循环中的 break、continue 和 pass
  • 8. while 循环
    • 8.1. 基本的 while 循环
    • 8.2. while 循环和 else
    • 8.3. while 循环和 True
    • 8.4. 用 while 循环处理用户输入
    • 8.5. while 循环中的 break、continue 和 pass
    • 8.6. 嵌套 while 循环
  • 9. try-except 异常处理
    • 9.1. ty-except 基本用法
    • 9.2. 捕获多个异常
    • 9.3. 获取异常报错信息
    • 9.4. 捕获所有异常
    • 9.5. try-except 和 else
    • 9.6. try-except 和 finally
    • 9.7. 自定义异常
    • 9.8. 重新抛出异常
    • 9.9. 嵌套 try-except
    • 9.10. try-except 和 with
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档