【Python训练营】Python每日一练----第1天:购物单

是Dream呀 发表于 2022/01/20 15:46:21 2022/01/20
【摘要】 【Python训练营】Python每日一练----第1天:购物单

在这里插入图片描述

📢📢📢📣📣📣
🌻🌻🌻Hello大家好,我叫是Dream呀,一个有趣的Python博主,请多多关照😜😜😜
🏅🏅🏅 Python领域优质创作者,大二在读,欢迎大家找我合作学习(文末有VX 想进学习交流群or学习资料 欢迎+++)
💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉一万次悲伤,依然会有Dream,我一直在最温暖的地方等你~🌈🌈🌈
🌟🌟🌟✨✨✨

前言:【Python训练营】是针对Python语言学习所打造的一场刷题狂欢party! 对基础知识把握不牢固的话,欢迎参考此套课程:Python公开课 搭配使用最佳嗷~喜欢的话就抓紧订阅起来吧!🍋🍋🍋如果对学习没有自制力或者没有一起学习交流的动力,欢迎私信或者在文末添加我的VX,我会拉你进学习交流群,我们一起交流学习,报团打卡

@TOC

真题描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。

这不,大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。

小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。

现在小明很心烦,请你帮他计算一下,需要从取款机上取多少现金,才能搞定这次购物。

取款机只能提供 100 元面额的纸币。小明想尽可能少取些现金,够用就行了。 你的任务是计算出,小明最少需要取多少现金。

以下是让人头疼的购物单,为了保护隐私,物品名称被隐藏了。

****     180.90       88****      10.25       65****      56.14        9****     104.65        9****     100.30       88****     297.15        半价
****      26.75       65****     130.62        半价
****     240.28       58****     270.62        8****     115.87       88****     247.34       95****      73.21        9****     101.00        半价
****      79.54        半价
****     278.44        7****     199.26        半价
****      12.97        9****     166.30       78****     125.50       58****      84.98        9****     113.35       68****     166.57        半价
****      42.56        9****      81.90       95****     131.78        8****     255.89       78****     109.17        9****     146.69       68****     139.33       65****     141.16       78****     154.74        8****      59.42        8****      85.44       68****     293.70       88****     261.79       65****      11.30       88****     268.27       58****     128.29       88****     251.03        8****     208.39       75****     128.88       75****      62.06        9****     225.87       75****      12.89       75****      34.28       75****      62.16       58****     129.12        半价
****     218.37        半价
****     289.69        8

需要说明的是,8888 折指的是按标价的 88%88 计算,而 88 折是按 80%80 计算,余者类推。 特别地,半价是按 50%50 计算。

请输出小明要从取款机上提取的金额,单位是元。

运行限制
最大运行时间:1s
最大运行内存: 128M

解题思路

  • data = data.split()将data按空格进行拆分,把给出来的data放入列表中,进行循环遍历取值
  • 价格price转化为浮点数用于计算,折扣discount先保持字符串类型不变,让其去匹配对应的值
  • 当discount为两位长度时,当其为‘半价’,discount等于0.5,反之取其数字部分,将对应数字部分字符串进行强制转化浮点数乘以对应的小数点,float(discount[0])*0.1
  • 不是两位长度时,就是三位长度,此时数字部分对应的字符串部分为两位。也就是说强制转化为浮点数后的数字部分是一个两位数,也就是对应的小数点应该向前移动两位。float(discount[0:2])*0.01
  • 最后要算其需要的纸币100元是多少,也就是求出来的总和sum整除100之后再加一个1就是一共需要带的100元的数量,然后通过浮点数进行输出就可以啦!

源码分享

# 一万次悲伤,依然会有Dream,我一直在最温暖的地方等你!
# @Time    : 2022/1/18 20:58
# @Author  : 是Dream呀!
# @File    : 购物单.py
import math
data = '''
****     180.90       88折
****      10.25       65折
****      56.14        9折
****     104.65        9折
****     100.30       88折
****     297.15        半价
****      26.75       65折
****     130.62        半价
****     240.28       58折
****     270.62        8折
****     115.87       88折
****     247.34       95折
****      73.21        9折
****     101.00        半价
****      79.54        半价
****     278.44        7折
****     199.26        半价
****      12.97        9折
****     166.30       78折
****     125.50       58折
****      84.98        9折
****     113.35       68折
****     166.57        半价
****      42.56        9折
****      81.90       95折
****     131.78        8折
****     255.89       78折
****     109.17        9折
****     146.69       68折
****     139.33       65折
****     141.16       78折
****     154.74        8折
****      59.42        8折
****      85.44       68折
****     293.70       88折
****     261.79       65折
****      11.30       88折
****     268.27       58折
****     128.29       88折
****     251.03        8折
****     208.39       75折
****     128.88       75折
****      62.06        9折
****     225.87       75折
****      12.89       75折
****      34.28       75折
****      62.16       58折
****     129.12        半价
****     218.37        半价
****     289.69        8折
'''
data = data.split()
sum = 0
for i in range(0,len(data),3):
    price = float(data[i+1])
    discount = data[i+2]
    if len(discount) == 2:
        if discount == '半价':
            discount = 0.5
        else:
            discount = float(discount[0])*0.1
    else:
        discount = float(discount[0:2])*0.01
    sum += price*discount
print('%.0f'%(((sum//100)+1)*100))

学习总结

  1. data = data.split() 语法将字符串按照空格进行分割:
a = '1 213 31'
print(a.split())
# ['1', '213', '31']
  1. 列表切片:[1:3]左闭右开,[:-1]表示除了最后一个其余的全都取:
a = [2,3,4,5,6]
print(a[0:1])
print(a[:-1])
# [2]
# [2, 3, 4, 5]

🏅今天是我在Python训练营的第 1 天,希望每天都能见到最棒的你🏅

🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~
在这里插入图片描述
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。