Python菜鸟在成长——列表和元组

任务1:解决“千年虫”问题“
千年虫”问题,也称计算机2000年问题或“千年危机”。是指某些计算机程序在设计时只采用两位十进制数记录年份的最后两位,如1998年被表示为“98”、2000年被表示为“00”,因此当时间跨入2000年时,计算机计时系统会将2000年解释为1900年,造成各种各样的系统功能紊乱,甚至发生灾难性的后果。下面的序列保存了8名1900年后出生人员的出生年份,为避免出现千年虫问题,请编写一个小程序,把目前的序列中存在千年虫问题的数据进行修改,然后升序输出修改后的序列。当前序列:[89,98,00,75,68,37,58,90]
参考输出序列:[1937,1958,1968,1975,1989,1990,1998,2000]

num1 = [89,98,00,75,68,37,58,90] #当前序列
num2 = [int(x+2000) for x in num1 if x<=0]
num3 = [int(x+1900) for x in num1 if x>0]
num4 = num2+num3
num = sorted(num4)
print("输出的序列是:",num)

在这里插入图片描述
参考代码:

year = [89, 98, 00, 75, 68, 37, 58, 90]              # 原有的年份列表
for index,value in enumerate(year):                 # 遍历列表元素索引与年份
    if str(value) != '0':                           # 判断非0年份
        year[index] = int('19'+str(value))
    else:
        year[index] = int('200'+str(value))         # 判断2000年
year.sort()                                         # 升序排列年份列表
print(year)                                         # 打印修改后的年份列表

任务2: 运动周报
已知为本周的QQ运动周报,编写一个程序实现如下功能:
(1)创建本周运动步数列表,如:[4235,10111,8447,9566,9788,8951,9808]。(2)创建上周运动步数列表,如:[4235,5612,8447,11250,9211,9985,3783]。(3)将上周和本周的运动步数进行同步汇总,如上周一和本周一的数据相加,上周二和本周二的数据相加,以此类推。先输出汇总结果,然后升序,降序输出汇总结果。
(4)建立一个星期列表,如:[“周日”,“周一”,“周二”,“周三”,“周四”,“周五”,“周六”]。(5)查找本周运动步数最高值和最低值,添加到对应周列表,如:[“周日”,4235,“周一”,“周二”,“周三”,“周四”,“周五”,“周六”,9808]。
(6)步数超过8000步即为达标,分别输出本周、上周高于8000步的步数值和日期,最后输出上周和本周总步数。

# 第1题答案
thisweek = [4235, 10111, 8447, 9566, 9788, 8951, 9808]
print("(1)本周运动步数列表:", thisweek)
# 第2题答案
lastweek = [4235, 5612, 8447, 11250, 9211, 9985, 3783]
print("(2)上周运动步数列表:", lastweek)
# 第3题答案
sumweek = []
for a,b in zip(thisweek, lastweek):
    sum = a + b
    sumweek.append(sum)
print("(3)汇总结果", sumweek)
sumweek.sort()
print("     升序", sumweek)
sumweek.sort(reverse=True)
print("     降序", sumweek)
# 第4题答案
day = ['周日','周一','周二','周三','周四','周五','周六']
print("(4)星期列表:", day)
# 第5题答案
x = thisweek.index(max(thisweek))
y = thisweek.index(min(thisweek))
day.insert(x + 1, max(thisweek))
day.insert(y + 1, min(thisweek))
print("(5)", day)
# 第6题答案
weekday = ['周日','周一','周二','周三','周四','周五','周六']
thislist1 = []
thislist2 = []
for item in thisweek:
    if item > 8000:
        thislist1.append(item)
        i = thisweek.index(item)
        thislist2.append(weekday[i])
print("(6)本周高于8000步的步数值:", thislist1)
print("     本周高于8000步的日期:", thislist2)
lastlist1 = []
lastlist2 = []
for item in lastweek:
    if item > 8000:
        lastlist1.append(item)
        i = lastweek.index(item)
        lastlist2.append(weekday[i])
print("     上周高于8000步的步数值:", lastlist1)
print("     上周高于8000步的日期:", lastlist2)

任务3:模拟购物车购物过程
编写一个程序,首先模拟商家入库商品,分5次输入商品序号和名称(商品编号与名称可参考);然后询问用户购买什么商品,用户输入商品编号;接下来把对应的商品添加到购物车里;最后用户输入q退出,输出购物车里的商品列表。

list = []                       # 存放输入的商品信息
for i in range(5):
    a = input("请输入商品编号和商品名称进行商品入库,每次只能输入一件商品:\n")
    list.append(a)              # 将输入的商品信息存放到list中

for item in list:               # 输出所有商品信息
    print(item)

list1 = []                      # 存放购物车中的商品信息
num2 = list[0]
print("请输入要购买的商品的编号:")
for item in list:
    num1 = input("")
    if item.find(num1) == 0:
        num2 = item
        list1.append(num2)          # 将购物车中的商品信息存放到list1中
        print("商品已添加到购物车,请继续添加要购买商品的商品编号:")
    elif num1 == "q":
        break
print("您购物车里已经选择的商品为:")
for m in range(len(list1)):     # 输出购物车中的商品信息
    print(list1[m])

心得体会:
1.任务一取巧了,因为按照题目给出的当前序列,00只有一个,那我就直接提取出来对应元素加上2000,其余非0就全部加上1900.参考代码用上了遍历和索引,遍历非0,加19,属于0的成分就加上20,最后再来升序和打印输出。
2.这一题的升序排序以及综合之类的,我不会,直接复制的参考答案。。。
3.参考了书中对于这一类题型的相关命名以及解答,严格来说自己对于这一类的数据处理不敏感,要重点关注,之后我会重温之前的内容,梳理一下相关的知识点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

想去见见你

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

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

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

打赏作者

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

抵扣说明:

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

余额充值