python-4--元组

元组

案例1:基金定投

基金定投是定期定额投资基金的简称,是指在固定的时间以固定的金额投资到指定的开放式基金中。采用基金定期定额投资方式,不论市场行情如何波动,每个月固定一天定额投资基金,由银行自动扣款,自动依基金净值计算可买到的基金份额数。再用基金份额数X当期净值,得到期末资产。

在这里插入图片描述

每个月投入 一个金额num , 决定定期投几个月,invest_month

基金单位净值,是指当前的基金总净资产除以基金总份额。其计算公式为:基金单位净值=总净资产/基金份额。

基金总净资产:比如兴业基金,发行价1元,发行5000亿股,他去买下100只股票,每天这100只股票股价就会变动,有可能今天变成5010亿,明天变成4900亿

第一天基金净值=5010亿/5000亿股=1.002元, 第二天基金净值=4900亿/5000亿股=0.98元,

学会当期份额fund_share_today 份额=(投入金额-手续费)/基金净值 比如投入1000元,手续费是0.6%,净值是1元,那么你持有的份额. =num_today / net_value_f (投资/净值)
总份额怎么计算
			 coef = int(earning_rate/0.05)     #投入资金时每次跌幅超过5%,定投金额追加额度的25%,
        num_today = num*(1-0.25*coef)     #份数
        fund_share_today = round(num_today/net_value_f,2)

在低价的时候购入,在高价的时候卖出。

每年必考题


"""
    作者:张三
    功能:实现基金定投(AIP)的收益计算
          基金定期定额投资的微笑曲线:指投资者在股市下跌时仍坚持基金“定投”(定期投入相同金额,如每月8日买入2000元),
          积累更多廉价筹码(更多份额),待股市上涨至“止盈点”(比如基金涨幅30%)时赎回。
          假设投资曲线为:f = 0.0008 * (x - 17)**2 + 0.8599   (此处为模拟,真正的基金净值可通过网络爬虫从网上获得)
                     公式说明:x为投资的第x个月份,f为当前月份指定日期的基金净值
    版本:2.0
    日期:3/15/2022
    2.0版本新增功能:实现智能定投,投入资金时每次跌幅超过5%,定投金额追加额度的25%,
                     每次投入时涨幅超过5%,则减少额度的25%(减少到0为止),计算投资收益。
                     每期信息存储到嵌套元组的列表:[(当前净值,当前总份额,本期份额,当前投资总额,本期投入,当前收益),...]

"""
"""
    tuple()  构造函数
    一旦定义不能修改。
    元组稳定,不会改变。列表可以改变,元组内的列表可以改变。
    元组转列表,再排序,再转元组
"""

def main():
    iaip_list = []          # 智能定投信息列表:[(当前净值,当前总份额,本期份额,当前投资总额,本期投入,当前收益),...]
    num = int(input("请输入您每月定投的金额(单位:元):"))
    invest_month = int(input("请输入定投投资的月数:"))
    # 首月投资信息放入列表
    net_value_f = 0.001 * pow(0 - 17, 2) + 0.8599   #计算当前净值    #即: (x-17)=-17   求 -17的平方,是289
    #print(pow(0 - 17, 2))
    num_sum = num_today = num
    fund_share_sum = fund_share_today = round(num / net_value_f, 2)
    iaip_list.append((net_value_f, fund_share_sum, fund_share_today, num_sum, num_today, 0))

    # 任务:完成后续智能定投信息列表,注意每一期投资额度的增减
    for  i in range(1,invest_month-1):
        net_value_f = round(0.001*pow(i-17,2)+0.8599,4)
        earning_rate=(iaip_list[i-1][1]*net_value_f/iaip_list[i-1][3])-1
        coef = int(earning_rate/0.05)
        num_today = num*(1-0.25*coef)
        fund_share_today = round(num_today/net_value_f,2)
        earnings= round(net_value_f*fund_share_sum-num_sum,2)
        information=(net_value_f, fund_share_sum, fund_share_today, num_sum, num_today, earnings)
        iaip_list.append(information)
    print("您定投月份为{:*^6}月,总投资{:^10,}元,投资的份额为:{:^10,.2f}".format(invest_month, iaip_list[-1][3], iaip_list[-1][1]))
    print("您投资基金的当前净值为每份{}元,期末资产为{:^10,.2f}元,".format(iaip_list[-1][0], iaip_list[-1][0] * iaip_list[-1][1]))
    print("期末收益为{:^10,.2f}元,收益率为:{:.2f}%".format(iaip_list[-1][-1], iaip_list[-1][-1] / iaip_list[-1][3] * 100))
    for month in range(1, invest_month+1):
        if iaip_list[month][-1] > 0:
            break
    print('当您定投投资到第{}个月开始有正收益,此时的基金净值为每分{}元'.format(month, iaip_list[month][0]))

if __name__ == '__main__':
    main()

在这里插入图片描述

案例二、

“”"
功能:推荐评分最高的三部电影
作者:张三
版本:1.0
日期:3/15/2022
“”"

def k(item):
return item[2] #==>按成绩排序,成绩是第二个字段

电影名称列表

films = [‘地道战’,‘英雄儿女’,‘上甘岭’,‘铁道游击队’,‘长津湖’,‘水门桥’,‘狙击手’]

电影对应评分列表

scores = [9.0, 9.2, 8.9, 8.6, 9.4, 9.2, 9.5]

任务1:生成电影信息列表film_info,格式为:[(电影编号,电影名称,评分),…],假设电影编号为1、2、3 …

法一、

films = ['地道战','英雄儿女','上甘岭','铁道游击队','长津湖','水门桥','狙击手']
scores = [9.0, 9.2, 8.9, 8.6, 9.4, 9.2, 9.5]
list=[]
for i in range(len(films)):                                   
    tu=(i,films[1],scores[i])    #tu=i,films[1],scores[i]
    list.append(tu)
    print(list)

法二、

film_list = list(zip(range(1,len(films)+1),films,scores)) 

任务2:按电影评分由高到低排序得到有序电影信息列表film_info_sorted

film_info_sorted.sort() 没有返回值,只能按序号排

法一、sort() 函数

film_list = list(zip(range(1,len(films)+1),films,scores))  #在内部加循环,形成列表
film_list.sort(key = lambda x:x[2],reverse=True)
print("使用key排序的列表",film_list)   #lambda的使用,改名。

lambda函数可以使用

法二、 sorted()函数(自己的方法)

film_info_sorted=[]
for i in range(7):
    tu2=(i,films[1],scores[i])
    film_info_sorted.append(tu2)
list2=sorted(film_info_sorted,key=k,reverse=True)

任务3:输出电影评分前三名的名次、电影名称、评分,第三名评分相同的均需要列出

print(film_list[:3],end=’ ') #切片操作,不需要for循环。


po=film_list[:3]
for file in film_list[3:]:    #注意不要再for循环了,注意用切片的操作
    if(file[2]!=film_list[2][2]):
        break
    else:
       po.append(file)
print(po)

案例三、水仙花数

“”"
功能:求所有水仙花数(三位数中个位十位百位的立方和等于它本身)
作者:张三
版本:1.0
日期:3/15/2022
“”"

方法1:

for num in range(100, 1000):
    ge=num%10
    shi=num//10%10
    bai=num//100
    sum = ge*ge*ge+shi*shi*shi+bai*bai*bai
    if sum==num:
        print(sum)
  #  print(ge,shi,bai)

方法2:利用map函数求所有水仙花数

for num in range(100, 1000):
   x,y,z= list(map(int , str(num)))  
    # int 是整数类的构造函数,对后面的数据需要做转换成整数操作。
    
   #print(x**3+y**3+z**3)
   if(x**3+y**3+z**3)==num:
       print(num)
   #print(sum)

(map(int , str(num))

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值