【python】随笔 - 知识点小课堂 -4.程序控制结构

前言

本文是关于程序控制结构的习题整理和讲解

4.2

下面代码的运行结果为
for index,(f,s)in enumerate(zip((1,2,3),[4,5])):print(f, end=‘,’)

zip((1,2,3), [4,5]):zip函数将两个序列(元组(1,2,3)和列表[4,5])“压缩”成一个由元组组成的迭代器。在这个例子中,zip会生成一个迭代器,它的元素是来自两个序列的元素配对:(1, 4)和(2, 5)。注意,由于列表[4,5]比元组(1,2,3)短一个元素,所以结果只包含两个配对。

enumerate(zip((1,2,3), [4,5])):enumerate函数为zip函数生成的每个元素提供一个计数(从0开始),结果是一个包含(index, (f, s))元组的迭代器,其中index是元素的索引,(f, s)是zip函数生成的配对。

for index, (f, s) in enumerate(…):这是一个for循环,它遍历enumerate的结果。对于每次迭代,index是当前元素的索引,(f, s)是zip函数生成的配对。

print(f, end=‘,’):print函数打印出变量f的值,并使用end=','参数指定在末尾添加一个逗号而不是默认的换行符。

代码的输出是:

1,2,

补充:

zip()

zip()是一个内置函数,它将多个可迭代对象(如列表、元组或字符串)中的元素配对,形成一个新的可迭代对象,这个对象是元组的序列。

例如,如果我们有两个列表:

list1 = [1, 2, 3]
list2 = [4, 5, 6]

使用zip(list1, list2)会生成一个迭代器,它的元素是来自两个列表的元素配对:

<zip object at 0x7f94f2d116e0>

这个迭代器可以展开为:

[(1, 4), (2, 5), (3, 6)]

zip()函数在遇到最短的输入序列后结束,这意味着如果输入序列的长度不同,长的序列中剩余的部分将被忽略。

enumerate()

enumerate()是一个内置函数,它为每个元素从一个可迭代对象中生成一个包含元素索引(从0开始)和元素值的元组。

例如,如果我们有一个列表:

my_list = ['a', 'b', 'c']

使用enumerate(my_list)会生成一个迭代器,它的元素是包含索引和值的元组:

<enumerate object at 0x7f94f2d11758>

这个迭代器可以展开为:

[(0, 'a'), (1, 'b'), (2, 'c')]

for循环中使用enumerate()可以方便地获取每个元素的索引和值:

for index, value in enumerate(my_list):
    print(index, value)

这将输出:

0 a
1 b
2 c

组合使用 zip() 和 enumerate()

在某些情况下,可以组合使用zip()enumerate()来实现更复杂的迭代逻辑。例如,可以同时迭代多个序列,并为每个元素对获取索引。

for index, (value1, value2) in enumerate(zip(list1, list2)):
    print(index, value1, value2)

这段代码将为list1list2中的每个配对元素打印索引和对应的值。

4.4

下面代码的运行结果为-。
for n in range(100, 1, -1):
for i in range(2, n):
if n % i == 0:
break
else:
print(n)
break

答案97
这里由于是找一个素数,所以就九七。

4.6

多选题:下面表达式中作为条件表达式时等价于 True 的有(

3+5
[]
{3}
-3

在Python中,这些表达式在布尔上下文中的等价性如下:

  1. 3+5 - 这是一个数学运算,计算两个整数的和。结果为8,是一个非零整数,在布尔上下文中被视为True

  2. [] - 这是一个空列表。在布尔上下文中,空列表被视为False

  3. {3} - 这是一个只包含一个元素3的集合。由于它不是空的,它在布尔上下文中被视为True

  4. -3 - 这是一个负整数。在布尔上下文中,任何非零数字(包括负数)都被视为True

所以,作为条件表达式时等价于True的表达式有:

  • 3+5(结果为8
  • {3}(非空集合)
  • -3(非零负数)

正确答案是:3+5{3}-3

4.10

分析逻辑运算符or 的短路求值特性。

在Python中,逻辑运算符or通常用于连接两个或多个条件表达式。当使用or运算符评估多个表达式时,Python会采用短路求值(short-circuit evaluation)的特性。这意味着:

  1. 从左到右求值or运算符会从左到右依次评估表达式。

  2. 短路行为:如果在评估过程中遇到第一个为True的表达式,那么表达式的求值将立即停止,不再评估后续的表达式。这是因为在逻辑or运算中,只要有一个操作数为True,整个表达式的结果就确定了为True

  3. 全部求值:如果所有的表达式都为False,则or运算符会继续求值直到最后一个表达式,最终整个表达式的结果为False

短路求值的特性在编程中非常有用,尤其是在以下场景:

  • 避免错误:当某些表达式可能会引发异常时,可以在它们之前放置一个总是为True的表达式,以避免执行可能导致错误的表达式。
  • 提高效率:当某个表达式的结果足以确定整个逻辑表达式的结果时,不需要继续评估后续表达式,从而节省计算资源。

下面是一个例子,演示or运算符的短路求值特性:

def test():
    print("Function test() is called")
    return True

result = (test() or "This will not be evaluated")
print(result)  # 输出: Function test() is called, True

在这个例子中,由于test()函数返回True,表达式(test() or "This will not be evaluated")的值为True。由于发生了短路,第二个表达式"This will not be evaluated"不会被评估,因此字符串"This will not be evaluated"不会出现在输出中。

相反,如果test()函数返回False,那么第二个表达式将被评估,以确定整个逻辑表达式的结果。

4.11~4.16

4.11 判断闰年

  • 思路
    • 从用户那里获取一个年份输入。
    • 检查年份能否被400整除,如果能,则输出该年份是闰年。
    • 如果不能,检查年份能否被4整除且不能被100整除,如果满足条件,则输出该年份是闰年。
    • 如果都不满足,则输出该年份不是闰年。

4.12 删除列表中的所有奇数

  • 思路
    • 生成一个包含58个随机整数的列表。
    • 从列表末尾开始向前遍历,检查每个数字是否为奇数。
    • 如果是奇数,则从列表中移除。

4.13 对列表中偶数下标元素降序排列

  • 思路
    • 生成一个包含28个随机整数的列表。
    • 将偶数下标位置上的元素提取到一个新列表中,并进行降序排序。
    • 将排序后的元素放回原列表的相应位置。

4.14 因式分解

  • 思路
    • 获取用户输入的一个小于1880的整数。
    • 从2开始,尝试每个数字,检查它是否是输入整数的因数。
    • 如果是因数,将该数字添加到因数列表中,并除以该数字,继续这个过程直到该数字不再是因数。
    • 输出所有因数的乘积形式。

4.15 计算180以内所有奇数的和(三种方法)

  • 方法一:直接求和

    • 迭代从1到180的每个奇数,并将它们相加。
  • 方法二:数学公式

    • 使用公式求和:n/2 * (first_odd + last_odd),其中n是奇数的个数,first_odd是第一个奇数(在这个范围内),last_odd是最后一个奇数。
  • 方法三:使用列表推导式

    • 使用列表推导式生成1到180内所有奇数的列表,然后使用sum()函数求和。

4.16 输出由1、2、3、4组成的所有素数

  • 思路
    • 使用排列(permutations)生成1、2、3、4所有可能的排列组合。
    • 对于每个排列,检查它是否形成素数。
    • 如果是素数,则将其添加到输出列表中。

END

  • 19
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_千思_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值