2019-12-27(88)

本文介绍了一种算法,用于在列表中找到平衡点和支配数。平衡点是指列表中某点前后的元素和相等的位置,而支配数是指出现次数超过列表长度一半的元素。文章还提供了一个程序,用于在用户输入的工资范围内购买商品,同时检查余额是否足够。

184、比如[1,3,5,7,8,25,4,20] 25前面的总和为24,25后面的总和也是24,25这个点就是平衡点;假如一个数组中的元素,其前面的部分等于后面的部分,那么这个点的位序就是平衡点?写程序实现,给定任何一个列表,找到它的所有平衡点和对应索引位置

lst=[1,3,5,7,8,25,4,20]

def find_balance_point(l):
    if not isinstance(l,list):
        return -1
    result={}
    for i in range(len(l)):
        if sum(l[:i])==sum(l[i+1:]):
            result[l[i]]=i
    return result

print(find_balance_point(lst))

185、列表中某个元素出现的次数大于数组总数的一半时就成为支配数,其所在位序称为支配点;比如[3,3,1,2,3] 3为支配数,0,1,4分别为支配点;?实现返回支配数和支配点

lst=[3,3,1,2,3] 

def find_point(l):
    if not isinstance(l,list):
        return -1
    result_point=[]
    for i in l:
        if l.count(i)>len(l)//2:
            result_num=i
    for i in range(len(l)):
        if l[i]==result_num:
            result_point.append(i)
    return result_num,result_point
    
print(find_point(lst))

186、需求:启动程序后让用户输入工资,然后打印商品列表.允许用户根据商品编号购买商品.用户选择商品后,检测余额是否足够,够就直接扣款,不够就提醒.用户可一直购买商品,也可以随时退出,退出时,打印已经购买的商品和余额.

c_dict={"C001":"book","C002":"phone","C003":"milk"};
pric_dict = {"C001":4,"C002":100,"C003":8}	

salary=int(input("请输入工资:"))
print("商品列表:")
for k,v in c_dict.items():
    for k1,v1 in pric_dict.items():
        if k==k1:
            print("商品编号%s 商品名称%s 商品单价%s" %(k,v,v1))
buy_dict={} #已购买的商品和数量
while True:
    if salary<4:
        print("对不起,您的工资余额小于商品最小单价,已不足以支付任何商品!")
        print("您已购买的商品和数量:",buy_dict)
        print("您的工资余额为%s元" %salary)
        break
    id=input("请输入商品编号,若想离开请输入'bye':")
    if id=="bye":
        print("您已购买的商品和数量:",buy_dict)
        print("您的工资余额为%s元" %salary)
        print("谢谢您的光临!")
        break
    if id not in c_dict.keys():
        print("对不起,您所输入的商品编号不存在,请重新输入:")
        continue
    print("您输入的商品编号为%s,名称为%s,单价为%s" %(id,c_dict[id],pric_dict[id]))
    if salary>=pric_dict[id]:
        salary=salary-pric_dict[id]
        print("%s商品已购买成功,工资余额为%s" %(c_dict[id],salary))
        if id not in buy_dict.keys():
            buy_dict[id]=1
        else:
            buy_dict[id]+=1
    else:
        print("对不起,您的工资余额已不足以支付您要购买的商品,请重新输入商品编号!")
        print("您已购买的商品和数量:",buy_dict)
        print("您的工资余额为%s元" %salary)
        continue

187、给定一个列表strs,其中的数据都是字符串,给定两个字符串str1,str2。如果这两个字符串都在 strs数组中,就返回它们之间的最小距离;如果其中任何一个不在里面,则返回 -1;如果两个字符串相等,则返回 0。

str_list=['*','3','*','5','10','9','7','1','*']
str1="*"
str2="9"
def find_min_distance(l,str1,str2):
    if not isinstance(l,list):
        return None
    if (str1 not in l) or (str2 not in l):
        return -1
    if str1==str2:
        return 0
    str1_str2_distance=[]
    str1_index=[]
    str2_index=[]
    for i in range(len(l)):
        if l[i]==str1:
            str1_index.append(i)
        if l[i]==str2:
            str2_index.append(i) 
    print("%s的坐标为%s" %(str1,str1_index))
    print("%s的坐标为%s" %(str2,str2_index))
    for i in str1_index:
        for j in str2_index:
            str1_str2_distance.append(abs(i-j))
    return min(str1_str2_distance)
print("%s与%s的最小距离是%s" %(str1,str2,find_min_distance(str_list,str1,str2)))
给我生成一个从2016年6月到2020年8月的以月为单位的电价数据时间序列,形如need_data = {‘2016-02’: 44964.03, ‘2016-03’: 56825.51, ‘2016-04’: 49161.98, ‘2016-05’: 45859.35, ‘2016-06’: 45098.56, ‘2016-07’: 45522.17, ‘2016-08’: 57133.18, ‘2016-09’: 49037.29, ‘2016-10’: 43157.36, ‘2016-11’: 48333.17, ‘2016-12’: 22900.94, ‘2017-01’: 67057.29, ‘2017-02’: 49985.29, ‘2017-03’: 49771.47, ‘2017-04’: 35757.0, ‘2017-05’: 42914.27, ‘2017-06’: 44507.03, ‘2017-07’: 40596.51, ‘2017-08’: 52111.75, ‘2017-09’: 49711.18, ‘2017-10’: 45766.09, ‘2017-11’: 45273.82, ‘2017-12’: 22469.57, ‘2018-01’: 71032.23, ‘2018-02’: 37874.38, ‘2018-03’: 44312.24, ‘2018-04’: 39742.02, ‘2018-05’: 43118.38, ‘2018-06’: 33859.69, ‘2018-07’: 38910.89, ‘2018-08’: 39138.42, ‘2018-09’: 37175.03, ‘2018-10’: 44159.96, ‘2018-11’: 46321.72, ‘2018-12’: 22410.88, ‘2019-01’: 61241.94, ‘2019-02’: 31698.6, ‘2019-03’: 44170.62, ‘2019-04’: 47627.13, ‘2019-05’: 54407.37, ‘2019-06’: 50231.68, ‘2019-07’: 61010.29, ‘2019-08’: 59782.19, ‘2019-09’: 57245.15, ‘2019-10’: 61162.55, ‘2019-11’: 52398.25, ‘2019-12’: 15482.64, ‘2020-01’: 38383.97, ‘2020-02’: 26943.55, ‘2020-03’: 57200.32, ‘2020-04’: 49449.95, ‘2020-05’: 47009.84, ‘2020-06’: 49946.25, ‘2020-07’: 56383.23, ‘2020-08’: 60651.07}但数据不要与上述一模一样
04-02
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值