python语言基础+课后练习day08

  1. 已知一个数字列表,统计偶数的个数

    [10, 34, 5, 65, 66, 89, 82]

    结果: 4

    nums = [10, 34, 5, 65, 66, 89, 82]
    count = 0
    for num in nums:
        if num % 2 == 0:
            count += 1
    print('偶数的个数是:', count)
    
  2. 已知一个数字列表,计算所有元素的平均值

    [23, 34, 56, 9, 80]

    nums = [23, 34, 56, 9, 80]
    print('平均值为:', sum(nums)/len(nums))
    
  3. 已知一个列表,统计列表中整数的个数

    [‘abc’, True, 12.5, 20, ‘hello’, 10]

    结果:2

    list1 = ['abc', True, 12.5, 20, 'hello', 10]
    count = 0
    for i in list1:
        if type(i) == int:
            count += 1
    print('整数的个数是:', count)
    
  4. 已知一个列表,统计列表中非整数的个数

    [‘abc’, True, 12.5, 20, ‘hello’, 10]

    结果:4

    list1 = ['abc', True, 12.5, 20, 'hello', 10]
    count = 0
    for i in list1:
        if type(i) != int:
            count += 1
    print('非整数的个数是:', count)
    
  5. 已知一个列表,计算列表中所有数字的和

    [‘abc’, True, 12.5, 20, ‘hello’, 10]

    结果:

    list1 = ['abc', True, 12.5, 20, 'hello', 10]
    sum1 = 0
    for i in list1:
        if type(i) in (int, float):
            sum1 += i
    print('数字和是:', sum1)
    
  6. 已知一个列表,计算所有大于100的数的和

    [‘abc’, 23, 101, 12,5, ‘hello’, 120.8]

    结果:221.8

    list1 = ['abc', 23, 101, 12, 5, 'hello', 120.8]
    sum1 = 0
    for i in list1:
        if type(i) in (int, float) and i > 100:
            sum1 += i
    print('大于100的数字之和是:', sum1)
    
  7. 已知一个列表,提取列表中所有字符串元素的最后一个字符。

    [‘hello’, ‘how’, 10, ‘are’, 12.5, True]

    结果: [‘0’, ‘w’, ‘e’]

    list1 = ['hello', 'how', 10, 'are', 12.5, True]
    list2 = [str1[-1] for str1 in list1 if type(str1) == str]
    print(list2)
    
  8. 根据要求完成以下功能:

    已知变量orders中保存一个店家的所有订单数据,每个订单包含:订单ID、用户ID、订单金额、支付金额、订单来源渠道、是否退货

    orders = [
        {'orderID': '254118088', 'userID': '157213', 'goodsID': 'PR000064', 'orderAmount': '272.51', 'payment': '272.51 ', 'chanelID': None, 'chargeback': False},
        {'orderID': '263312190', 'userID': '191121', 'goodsID': 'PR000583', 'orderAmount': '337.93', 'payment': '337.93 ', 'chanelID': '渠道-0765', 'chargeback': True},
        {'orderID': '188208169', 'userID': '211918', 'goodsID': 'PR000082', 'orderAmount': '905.68', 'payment': '891.23 ', 'chanelID': '渠道-0530', 'chargeback': False},
        {'orderID': '203314910', 'userID': '201322', 'goodsID': 'PR000302', 'orderAmount': '786.27', 'payment': '688.88 ', 'chanelID': None, 'chargeback': False},
        {'orderID': '283989279', 'userID': '120872', 'goodsID': 'PR000290', 'orderAmount': '550.77', 'payment': '542.51 ', 'chanelID': '渠道-9527', 'chargeback': False},
        {'orderID': '279103297', 'userID': '146548', 'goodsID': 'PR000564', 'orderAmount': '425.2', 'payment': '425.20 ', 'chanelID': '渠道-0765', 'chargeback': False},
        {'orderID': '316686066', 'userID': '148994', 'goodsID': 'PR000709', 'orderAmount': '1764.37', 'payment': '1707.04 ', 'chanelID': '渠道-0396', 'chargeback': False},
        {'orderID': '306447069', 'userID': '104863', 'goodsID': 'PR000499', 'orderAmount': '499.41', 'payment': '480.42 ', 'chanelID': '渠道-0007', 'chargeback': False},
        {'orderID': '290267674', 'userID': '206155', 'goodsID': 'PR000253', 'orderAmount': '1103', 'payment': '1050.95 ', 'chanelID': '渠道-0330', 'chargeback': False},
        {'orderID': '337079027', 'userID': '211918', 'goodsID': 'PR000768', 'orderAmount': '465.41', 'payment': '465.41 ', 'chanelID': '渠道-9527', 'chargeback': False},
        {'orderID': '417411381', 'userID': '148994', 'goodsID': 'PR000483', 'orderAmount': '279.53', 'payment': '279.53 ', 'chanelID': '渠道-0007', 'chargeback': False},
        {'orderID': '254286596', 'userID': '174586', 'goodsID': 'PR000322', 'orderAmount': '622.7', 'payment': '622.70 ', 'chanelID': '渠道-0283', 'chargeback': False},
        {'orderID': '303647260', 'userID': '178023', 'goodsID': 'PR000685', 'orderAmount': '969.61', 'payment': '913.58 ', 'chanelID': '渠道-0765', 'chargeback': False},
        {'orderID': '347419495', 'userID': '209896', 'goodsID': 'PR000483', 'orderAmount': '279.18', 'payment': '225.15 ', 'chanelID': '渠道-0396', 'chargeback': False},
        {'orderID': '384544993', 'userID': '148994', 'goodsID': 'PR000004', 'orderAmount': '3424.78', 'payment': '3424.78 ', 'chanelID': '渠道-0530', 'chargeback': False},
        {'orderID': '322802617', 'userID': '125220', 'goodsID': 'PR000812', 'orderAmount': '430.69', 'payment': '4223.48 ', 'chanelID': '渠道-0530', 'chargeback': False},
        {'orderID': '399101394', 'userID': '183645', 'goodsID': 'PR000025', 'orderAmount': '703.39', 'payment': '553.37 ', 'chanelID': '渠道-9527', 'chargeback': False},
        {'orderID': '274413321', 'userID': '162256', 'goodsID': 'PR000813', 'orderAmount': '227.42', 'payment': '200.37 ', 'chanelID': '渠道-0530', 'chargeback': False},
        {'orderID': '362677803', 'userID': '217238', 'goodsID': 'PR000400', 'orderAmount': '169.04', 'payment': '106.99 ', 'chanelID': '渠道-0789', 'chargeback': True}
    ]
    
    1. (数据清洗)删除orders中支付金额大于订单金额的订单

      i = 0
      while i < len(orders):
          if float(orders[i]['payment']) > float(orders[i]['orderAmount']):
              orders.remove(orders[i])
              continue
          i += 1
      print(orders)
      
    2. 计算这个店家的总订单金额和总支付金额以及实际销售额(店家真正拿到手中钱)

        sum1 = sum2 = sum3 = 0
        for order in orders:
            sum1 += float(order['orderAmount'])
            sum2 += float(order['payment'])
            if  not order['chargeback']:
                sum3 += float(order['payment'])
        print('总订单金额:', sum1)
        print('总销售金额:', sum2)
        print('实际销售额:', sum3)
      
    3. 统计这个店家的订单的订单来源渠道的数量

      set1 = set()
      for order in orders:
       	  if  order['chanelID'] != None:
          		set1.add(order['chanelID'])
      print('订单来源的渠道数量总共有:', len(set1))
      
    4. 计算订单退货率

      count = 0
      for order in orders:
          if order['chargeback'] == True:
              count += 1
      print('订单退货率是:%.2f' % (count/len(orders)))
      
    5. 获取最优广告渠道

      chanels = list(set([order['chanelID'] for order in orders if order['chanelID']]))
      max_count = []
      best = []
      for chanel in chanels:
          count = 0
          for order in orders:
             if order['chanelID'] == chanel:
                 count += 1
          max_count.append(count)
      max1 = max(max_count)
      for index in range(len(max_count)):
        if max_count[index] == max1:  
            best.append(chanels[index])
      print('最优渠道是:', best)
      
    6. 将订单渠道为None的订单的渠道值修改成最优广告渠道

      chanels = list(set([order['chanelID'] for order in orders if order['chanelID']]))
      max_count = []
      best = []
      for chanel in chanels:
          count = 0
          for order in orders:
             if order['chanelID'] == chanel:
                 count += 1
          max_count.append(count)
      max1 = max(max_count)
      for index in range(len(max_count)):
        if max_count[index] == max1:  
            best.append(chanels[index])
      print('最优渠道是:', best)
      for order in orders:
         for y_chanelID in  best:
              if order['chanelID'] == None:
                  order['chanelID'] = y_chanelID
      print(orders)
      
    7. 在每个订单数据中添加一个键值对保存订单的折扣值

      for order in orders:
          order1 = float(order['orderAmount'])
          order2 = float(order['payment'])
          count_1 = str(order2 / order1)
          order.setdefault('discount', count_1)
      print(orders)
      

      请添加图片描述

python语言基础之字典补充和集合

1、字典相关操作和方法

1)字典不支持+、* 和比较大小
2)字典支持: ==、!=
print({'a':20,'b':10} == {'b':10, 'a':20}) -  True(字典无序)
3)in 和 not in
键 in 字典     -     判断字典是否存在指定的键
d1 = {'a': 10, 'b': 20, 'c': 30}
print(30 in d1)      -      False
4)dict
dict(数据)     -      将数据转换成字典
数据的要求:
1)数据本身是一个序列
2)序列中的元素必须是长度为2的小序列(一个用来提供键,一个用来提供值)
3)小序列的第一个元素必须是不可变的

注意:将字典转换成列表或者元组的时候,将字典的键作为列表、元组中的元素

5)相关方法

1》字典.clear() ------ 清空字典

2》字典.copy() ------ 可以理解为克隆了一个和原字典一模一样的字典

3》字典.items() ------ 将字典中的元素转换成一个由键值对组成的元组,返回一个新的序列

之后可以对获取的新的序列进行遍历等后续操作
{键1:值1,键2:值2....} ----->[(键1,值1),(键2,值2)....]

4》字典.keys() ------- 获取字典当中所有的键,返回一个新的键的序列

5》字典.values() ------ 获取字典当中所有的值,返回一个新的序列

6》字典.setdefault(键,值) ------ 在字典中添加一个键值对,不存在则添加,已经存在则不添加

7》字典.update(序列) ---- 将序列中的元素全部添加到字典中,其中序列是字典或者是能够转换成字典的序列

字典推导式:1){键值对 for 变量 in 序列} 2){键值对 for 变量 in 序列 if 条件语句}
请添加图片描述

2、集合

1)什么是集合
集合是容器型数据类型(序列);将{}作为容器的标志,里边有多个元素,它们之间用逗号隔开:{元素1,元素2,元素3........}
集合是可变的并且集合是无序的
元素    -    必须是不可变的数据;并且是唯一的

1》空集合 - s1 = set()

2》集合元素必须是不可变的数据

3》集合无序

4》集合元素唯一

2)集合的增删改查
1)查    --   利用遍历查看
2)增    --   集合.add(元素)  -- 一个一个添加
              集合.update(序列)  -  批量添加
3)删    --   集合.remove(元素)  - 但是如果元素不存在则会报错
              集合.discard(元素)  - 如果元素不存在不会报错
3)集合运算

1》并集 - |

集合1 | 集合2 -  将两个集合合并成一个集合

2》交集 - &

集合1 & 集合2 -  获取两个集合的公共部分,产生一个新的集合

3》差集 - -

集合1 - 集合2   -   获取集合1中去掉包含在集合2中的元素之后剩下的元素

4》对称差集 - ^

集合1 ^ 集合2   -   将两个集合合并,去掉公共部分获取剩下的部分

5》判断子集关系

子集: >=,  <=
真子集: >, <
集合1 > 集合2  -   判断集合2是否是集合1的真子集
集合1 < 集合2  -   判断集合1是否是集合2的真子集
print({100, 200, 300} > {100, 300})   -  True

练习

用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)

math = {‘小敏’, ‘小张’, ‘小李’}

Chinese = {‘小张’, ‘张筱’, ‘小王’, ‘小包’}

English = {‘小张’, ‘张筱’, ‘小栗子’}

1、求选课学生总共有多少人

set1 = math|Chinese|English
print(len(set1))

2、求只选了第一个学科的人的数量和对应的名字

set2 = math - Chinese - English
print(len(set2), set2)

3、求只选了一门学科的学生的数量和对应的名字

s3 = (Chinese - math - English)|(English - Chinese - math)|set2
print(len(s3), s3)

4、求选了三门学生的学生的数量和对应的名字

s4 = math&Chinese&English
print(len(s4), s4)

5、求只选了两门学科的学生的数量和对应的名字

s5 = set1 -s3 - s4
print(len(s5),s5)

请添加图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值