Python基础-引用参数、斐波那契数列、无极分类

1.引用参数的问题

(1)列表(list)

  • 引用参数,传地址的参数,即list1会因list2修改而改变。
list1 = [1,2,3,4]
list2 = list1
print(list1)
list2[2] = 1
print(list2)
print(list1)
  • 非引用参数,不传地址的参数,即list1不会因list2修改而改变。
list1 = [1,2,3,4]
list2 = list1[:] #原理:复制了(遍历list1)一份list1再赋值给list2
print(list1)
list2[2] = 1
print(list2)
print(list1)

(2)字典(Dictionary)

  • 引用参数,传地址的参数,即dict1会因dict2修改而改变。
dict1 ={'name':'deng','age':18,'sex':1}
dict2 = dict1
print(dict1)
dict2['name'] = 'xiaodeng'
print(dict2)
print(dict1)
  • 非引用参数,不传地址的参数,即dict1不会因dict2修改而改变。
dict1 ={'name':'deng','age':18,'sex':1}
dict2 = {k:dict1[k] for k in dict1}  #原理:复制一份(遍历dict1)再拷贝给dict2
print(dict1)
dict2['name'] = 'xiaodeng'
print(dict2)
print(dict1)

(3)列表集合(set)

  • 引用参数,传地址的参数,即set1会因set2修改而改变。
set1 = set([1,2,3,4])  
set2= set1
print(set1)
set2.add(5)
print(set2)
print(set1)
  • 非引用参数,不传地址的参数,即set1不会因set2修改而改变。
set1 = set([1,2,3,4])  #列表集合的引用参数()
s = list(set1)    # s=[1,2,3,4]  强制将集合set类型转化为列表list(因为列表才能进行遍历复制)
set2 = set(s[:])  # set2=([1,2,3,4])  再将列表list强制转化回集合set类型
print(set1)
set2.add(5)
print(set2)
print(set1)

2.斐波那契数列

这里我使用一个实例问题进行分享:

兔子种群数量问题:
假设一对兔子一个月能生出一对兔子,出生的一对兔子到能够生育新的兔子需要1个月的时间。那如果一
个年之后这最开始这对兔子可以产生的种群兔子数量是多少呢?
在这里插入图片描述
从上面可以得到一个规律除了1月跟2月以外其它月的兔子对数是前两个月之和:
比如:3月的兔子数量就是1月跟2月数量之和,其它也是一样的。

解决方案:
(1)使用迭代来完成上面的运算:

def getNumber(n = 12):
    n1 = 1  # n1代表n-2这个月兔子的数量
    n2 = 1  # n2代表n-1这个月兔子的数量
    n3 = 1  # n3代表n这个月兔子的数量
    
    # 使用循环完成计算
    while n > 2:
        # print(n)
        n3 = n1 + n2    # n月的兔子等于n-1月加上n-2月的兔子数量
        
        # 为了计算下个月兔子数量,我们需要重新设置n-1与n-2月份的兔子数量
        n1 = n2
        n2 = n3
        n -= 1
    
    print("兔子的数量为:%d"% n3) 
    return n3

(2)使用递归来完成上面的运算:

def getNumber2(n = 1):
    if n==1 or n==2:
        return 1
    else:
        return getNumber2(n-1) + getNumber2(n-2)

3.无极分类

分类为父子级分类。并且子级分类是没有极限的。以数据格式来显示分类。这样的分类称为无极分类

categorys = [
    {"id":2, "name":"国际新闻", "p_id":0},
    {"id":1, "name":"国内新闻", "p_id":0},
    {"id":3, "name":"娱乐新闻", "p_id":0},
    {"id":4, "name":"体育新闻", "p_id":0},
    {"id":5, "name":"广东新闻", "p_id":1},
    {"id":6, "name":"广西新闻", "p_id":1},
    {"id":7, "name":"北海新闻", "p_id":6},
    {"id":8, "name":"南宁新闻", "p_id":6},
    {"id":9, "name":"深圳新闻", "p_id":5},
    {"id":10, "name":"南山新闻", "p_id":9},
    {"id":11, "name":"龙岗新闻", "p_id":9},
    {"id":12, "name":"上水径新闻", "p_id":11},
    {"id":13, "name":"篮球新闻", "p_id":4},
    {"id":14, "name":"NBA新闻", "p_id":13},
    {"id":15, "name":"CBA新闻", "p_id":13},
]

# for itme in categorys:
#     print(itme)
    
"""
由于无极分类数据本身的输出就是混乱的。
我们需要对该数据进行排序输出。
以以下的例子为准:
|- 国内新闻
|- |- 广东新闻
|- |- |- 深圳新闻
|- |- |- |- 南山新闻
|- |- |- |- 龙岗新闻
|- |- |- |- |- 上水径新闻
|- |- 广西新闻
|- |- |- 北海新闻
|- |- |- 南宁新闻

"""

# 定义通过PID获取同级所有分类的方法
def getTree( pid = 0, tree = [], level=1):
    
    level_str = '|- ' * level             
    # 通过for循环进行遍历
    for cat in categorys:
        if cat["p_id"] == pid:            # 判断获取的pid与cat中的p_id是否相同
            cat["level_str"] = level_str  # 往cat添加新字段level_str并且赋值level_str
            cat["level"] = level          # 往cat添加新字段level并且赋值level
            tree.append(cat)              # 将cat添加到tree中
            tree = getTree(cat["id"], tree, level+1)    # 通过自调找当前分类的子级分类

    return tree

tree = getTree()
for cat in tree:
    print("%s %s"%(cat["level_str"], cat["name"]))

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML静态网页成品作业(HTML+CSS+JS)——我的家乡福州介绍网页(3个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,使用Javacsript代码实现图片轮播,共有3个页面。 二、作品…

Acrel-2000ES储能能量管理系统方案

应用场合 电池厂商、储能集成商等厂家所生产的储能一体柜能集成箱

AI融资热潮:Genspark、Finaloop等初创吸金不断!中国气象局发布三大AI模型

文章推荐 AI日报|跃问App上架加入AI助理竞争!GPTZero获千万美元A轮融资,创始人不到30岁! AI日报|Luma推出AI视频模型,又一Sora级选手登场?SD3 Medium发布,图中文效果改善明显 ⭐️…

CentOS配置本地yum源

版本说明 操作系统版本:CentOS7.9 虚拟机版本 虚拟机打快照 首先给虚拟机打个快照,点击图下所示位置 命名快照之后,点击拍摄快照 可以参考图下所示进行管理和恢复快照 迁移原有yum源 先进入到/etc/yum.repos.d/ ,可以看到有很多…

Linux 6.10也引进了蓝屏机制

众所周知,win死机后会有个蓝屏死机的故障提示页面,Linux 6.10 开始也将引入这个机制。 Linux 6.10 引入了一个新的 DRM Panic 处理程序基础设施,以便于在致命错误(Panic)发生时显示相关信息。 Linux 6.10 还在开发之…

SPI协议——读取外部SPI Flash ID

简介: 单片机型号:stm32l431rct6 SPI Flash型号:W25Q32JVSSIQ 使用软件:CubeIDE 1. W25Q32JVSSIQ简介 我们通过SPI协议来读取 SPI Flash的厂商ID和芯片独一无二的ID,查数据的芯片手册可以看到如下重要点: …

pytorch库 02 Anaconda、Jupyter常用命令及操作

文章目录 一、Anaconda Prompt1、conda常用命令2、pip常用命令 二、Jupyter1、Jupyter常用命令及基本操作2、Jupyter代码补全插件安装 一、Anaconda Prompt 1、conda常用命令 下列命令可以在Anaconda Prompt中输入。 清屏: cls 查看帮助: conda -h 查…

HTML静态网页成品作业(HTML+CSS)——手机电子商城网页(4个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有4个页面。 二、作品演示 三、代…

视频与音频的交响:探索达摩院VideoLLaMA 2的技术创新

一、简介 文章:https://arxiv.org/abs/2406.07476 代码:https://github.com/DAMO-NLP-SG/VideoLLaMA2 VideoLLaMA 2是由阿里巴巴集团的DAMO Academy团队开发的视频大型语言模型(Video-LLM),旨在通过增强空间-时间建模…

分享:一个可爱的运行猫动画在你的窗口任务栏上

RunCat_for_windows:在 Windows 任务栏飞奔的“小猫”。这是一个用 C# 写的小工具,它会在 Windows 任务栏显示一只奔跑的小猫动画,CPU 使用率越高它跑得越快。 安装很简单 访问“发布”页面并下载 RunCat.exe。 或通过 Scoop(x…

Android SurfaceFlinger——服务启动流程(二)

SurfaceFlinger 是 Android 系统中的一个核心服务,负责管理图形缓冲区的合成和屏幕显示,是 Android 图形系统的关键组件。 一、启动流程 SurfaceFlinger 作为一个系统服务,在 Android 启动早期由 init 进程通过 servicemanager 启动。它是作…

【漏洞复现】用友 NC NCFindWeb 任意文件读取漏洞

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

数学建模基础:统计模型

目录 前言 一、概率与统计基础 二、统计模型 三、Matlab统计工具箱 四、实例示范:市场调查分析 步骤 1:数据导入 步骤 2:数据可视化 步骤 3:建立多元线性回归模型 步骤 4:模型验证 步骤 5:模型应…

开发人员不要嗨,B端系统颜值不过关,可能进不去客户选择范围。

市面上形形色色的B端管理系统非常多,大家近身搏杀,这个市场已经成为了红海。也就是随便某一个功能领域,都有N的系统可以选择,这个时候你坚持B端系统功能使用就行,那就是自嗨了。现在是个过剩的时代,不是供不…

MaxWell实时监控Mysql并把数据写入到Kafka主题中

配置mysql 启用MySQL Binlog MySQL服务器的Binlog默认是未开启的,如需进行同步,需要先进行开启 修改MySQL配置文件/etc/my.cnf sudo vim/etc/my.cof 增加如下配置 注:MySQL Binlog模式 Statement-based:基于语句,…

数据分析第十二讲 数据可视化入门(一)

数据可视化入门(一) 在完成了对数据的透视之后,我们可以将数据透视的结果通过可视化的方式呈现出来,简单的说,就是将数据变成漂亮的统计图表,因为人类对颜色和形状会更加敏感,然后再进一步解读…

三步问题00

题目链接 三步问题 题目描述 注意点 n范围在[1, 1000000]之间结果可能很大,需要对结果模1000000007 解答思路 动态规划的思想根据dp[i - 1]、dp[i - 2]、dp[i - 3]推出dp[i]需要注意的是结果可能很大,在计算的过程中需要模1000000007防止越界 代码…

宋仕强论道之华强北假货之四

宋仕强论道之华强北假货之四,华强北虚标货。在华强北顾名思义就是“以少充多、以小充大,把低级当高级卖”。同样品牌和型号的产品,用民用级冒充工业级,工业级当军用级,军用级再当航天级,品牌型号都不变&…

全面升级,票据识别新纪元:合合信息TextIn多票识别2.0

票据识别 - 自动化业务的守门员 发票、票据识别,是OCR技术和RPA、CMS系统结合的一个典型场景,从覆盖率、覆盖面的角度来说,应该也是结合得最成功的场景之一。 产品简介 国内通用票据识别V2.0(简称“多票识别2.0”)是…

深入探讨:UART与USART在单片机中串口的实际应用与实现技巧

单片机(Microcontroller Unit, MCU)是一种集成了处理器、存储器和输入输出接口的微型计算机。它广泛应用于嵌入式系统中,用于控制各类电子设备。UART和USART是单片机中常见的通信接口,负责串行数据传输。下面我们详细介绍它们在单…