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"]))
  • 18
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

deng_hongbin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值