练习:求偶数和、阈值分割和求差( list 对象的两个基础小题)


Python 官网 https://www.python.org/


  这里,才 python 前沿。可惜是英文原版。所以,我要练习英文阅读。🧐🧐


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。

            —— 华罗庚


练习:求偶数和、阈值分割和求差( list 对象的两个基础小题)


  1. 求偶数和
  2. 阈值分割和求差
  3. 完整代码

一、求偶数和

在这里插入图片描述

代码

def sum_of_evens(*evens):
    '''求输入向量中偶数和'''
    tem_lis = []
    for i in evens:
        if str(i).isdigit() is False:
            tem_lis.extend(list(i)) # 集群收集。
        else:
            tem_lis.append(i) # 单参收集。
    tem = []
    for i in tem_lis:
        if i % 2 == 0: # 摘除奇数。
            tem.append(i)
    return sum(tem) # 返回和值。

print(cut_line(), color(1, 'f_green')) # 打印分割线。
print(f"{'':>8}直接传参,输出:{sum_of_evens(1, 3, 6, 9)}") # 直接传参。

s = sum_of_evens # 函数取别名。
print(f"\n\n{'':>8}list 集群传参,输出:{s([1, 9, 8, 10, 13])}") # 集群传参。
print(f"\n\n{'':>8}tuple 传参,输出:{s((1, 9, 8, 5, 12, 10, 13))}") # 集群传参。
print(f"\n\n{'':>8}list 混传,输出:{s(1, 2, [1, 8, 10, 13], 3, 8)}") # 单个、集群混传。
print(f"\n\n{'':>8}tuple 混传,输出:{s(1, 2, (1, 8, 13), 3, 8)}") # 单个、集群混传。
print(f"{color(0)}{cut_line()}") # 打印分割线。

wait()

运行效果

在这里插入图片描述


回首页

二、阈值分割和求差

在这里插入图片描述

代码

def difference_between_L(n, L=0):
    '''返回按阈值分割后新集合和之差绝对值,
    如果输入集合中有两个阈值元素,以先出来的分割。'''
    tem, tem2 = [], [] # 初始化新集合。
    flag = False # 分割标识初值为假。
    for i in n:
        if i == L:
            flag = True # 遇到分割阈值,分割标识置真。
            print(f"\n分割阈值:{L}")
            L = '' # 置空字符,避免不收集第二个出现的分割阈值。
            continue # 结束本次循环,就是为了不收集分割阈值。
        if flag is True:
            tem2.append(i)
        else:
            tem.append(i)
    print(f"\n分割集合:\n\n{tem}{tem2}")
    return abs(sum(tem) - sum(tem2))
            

db_L = difference_between_L # 函数取别名。
n = 2, 5, 2, 6, 0, 2, 7, 6, 0, 17, 3
print(cut_line())
print(f"{cut_line()}{'':>4}输入:{n}\
\n\n{'':>16}输出:{color(db_L(n, 7), 'f_green')}{cut_line()}")

wait() 

运行效果

在这里插入图片描述

在这里插入图片描述


回首页

完整 Python 代码


  我的解题思路,已融入代码注释,博文中就不再赘述。

(如果从语句注释不能清楚作用,请评论区留言指教和探讨。🤝)

#!/sur/bin/env python
# coding: utf-8

'''
filename: /sdcard/qpython/tem.py
梦幻精灵_cq的炼码场

'''

from mypythontools import color, wait, cut_line # 从自码工具模块加载需用代码模块中要使用的函数。


def sum_of_evens(*evens):
    '''求输入向量中偶数和'''
    tem_lis = []
    for i in evens:
        if str(i).isdigit() is False:
            tem_lis.extend(list(i)) # 集群收集。
        else:
            tem_lis.append(i) # 单参收集。
    tem = []
    for i in tem_lis:
        if i % 2 == 0: # 摘除奇数。
            tem.append(i)
    return sum(tem) # 返回和值。


print(cut_line(), color(1, 'f_green')) # 打印分割线。
print(f"{'':>8}直接传参,输出:{sum_of_evens(1, 3, 6, 9)}") # 直接传参。

s = sum_of_evens # 函数取别名。
print(f"\n\n{'':>8}list 集群传参,输出:{s([1, 9, 8, 10, 13])}") # 集群传参。
print(f"\n\n{'':>8}tuple 传参,输出:{s((1, 9, 8, 5, 12, 10, 13))}") # 集群传参。
print(f"\n\n{'':>8}list 混传,输出:{s(1, 2, [1, 8, 10, 13], 3, 8)}") # 单个、集群混传。
print(f"\n\n{'':>8}tuple 混传,输出:{s(1, 2, (1, 8, 13), 3, 8)}") # 单个、集群混传。
print(f"{color(0)}{cut_line()}") # 打印分割线。

wait()


def difference_between_L(n, L=0):
    '''返回按阈值分割后新集合和之差绝对值,
    如果输入集合中有两个阈值元素,以先出来的分割。'''
    tem, tem2 = [], [] # 初始化新集合。
    flag = False # 分割标识初值为假。
    for i in n:
        if i == L:
            flag = True # 遇到分割阈值,分割标识置真。
            print(f"\n分割阈值:{L}")
            L = '' # 置空字符,避免不收集第二个出现的分割阈值。
            continue # 结束本次循环,就是为了不收集分割阈值。
        if flag is True:
            tem2.append(i)
        else:
            tem.append(i)
    print(f"\n分割集合:\n\n{tem}{tem2}")
    return abs(sum(tem) - sum(tem2))
            

db_L = difference_between_L # 函数取别名。
n = 2, 5, 2, 6, 0, 2, 7, 6, 0, 17, 3
print(cut_line())
print(f"{cut_line()}{'':>4}输入:{n}\
\n\n{'':>16}输出:{color(db_L(n, 7), 'f_green')}{cut_line()}")

wait() 

回首页

上一篇:骚包的中文字符提取操作(字符串,不用 re ,用 in )

下一篇:


我的HOT博:
推荐条件 点阅破千

回首页


老齐漫画头像

精品文章:

来源:老齐教室


回首页

Python 入门指南【Python 3.6.3】

好文力荐:

CSDN实用技巧博文:


  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梦幻精灵_cq

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

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

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

打赏作者

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

抵扣说明:

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

余额充值