昨天在OJ上做了19级理科大计基的12道题,有两个始终过不去,今天写了最后一道,过了。

把这三道题分享一下。

超市收银系统

时间限制: 1000 ms 内存限制: 65536 kb

题目

题目描述

本题描述有更改,清注意

一般超市或商店的收银台在对商品扫码之后会得到一串数字,这串数字代表一种商品。假设已知所有商品的名称、代码和单价,现在需要你写一个程序,输入扫码得到的商品代码(假设固定为6位数字),计算所购买的每种商品的数量(件数)、总价,并按照字典序打印商品的小票(如果某种商品购买了多件,应在同一行内输出该商品的名称数量单价总价)。计算所购买所有商品的总金额,并打印。 给出商品目录如下:

格式:名称 代码 单价
chips 932071 3.50
chocolate 114049 8.00
soap 304985 2.90
cupcake 955962 4.90
cookie 313903 6.50
milk 243813 3.20
toothbrush 961995 4.80
toothpaste 933328 9.30
teapot 914500 29.80

输入

每行为一个6位数字,代表所购买的商品代码。当所有购买商品输入完毕时,以输入0为结束输入标志。(毕竟你不可能跟收银员说我买了n件商品嘛)。

输出

一张小票,要求: 第一行包含“NAME”、“QUANTITY”、“PRICE”、“SUM”(代表商品的名称、数量、单价和总价),各单词之间用若干空格分隔。

接下来若干行,每行对应所购买的某种商品的明细。要求每列按照该项目内容字符数量最多的那一项填充空格补齐(第一行也要补齐),要求每列左对齐,对齐之后项目之间还要空一格。

总价输出保留两位小数,其余数字按照Python默认输出。

按照商品名称的字典序输出。提示:可使用list.sort()

最后一行是所购买所有商品的总金额,格式为:total:xxx.xx(注意:这里是西文的冒号,保留小数点后2位)

输入样例

932071
114049
932071
932071
114049
114049
932071
0

输出样例

NAME      QUANTITY PRICE SUM
chips     4        3.5   14.00
chocolate 3        8.0   24.00
total:38.00

解答

由于商品信息已经给出,所以就直接手动排好序存在list里。

扫描商品时录入的是代码,为了方便查询,这里使用了dict,以商品代码作为key,在list中的索引为value,便于直接查找。每扫描一个就增加对应商品的数量。

最后输出时需要对齐,而商品不确定,所以需要先找到最长的商品名,然后对齐输出。

代码如下:

# 商品信息:商品名,单价,数量
list = [["chips", 3.50, 0], ["chocolate", 8.00, 0], ["cookie", 6.50, 0], ["cupcake", 4.90, 0], ["milk", 3.20, 0], ["soap", 2.90, 0], ["teapot", 29.80, 0], ["toothbrush", 4.80, 0], ["toothpaste", 9.30, 0]]
# 商品代码及对应序号
dic = {"932071": 0, "114049": 1, "313903": 2, "955962": 3,"243813": 4, "304985": 5, "914500": 6, "961995": 7, "933328": 8}
# 第一列长度的最大值
maxlen = 4
while True:x = input()if x == "0":break# 商品数量加1list[dic[x]][2] += 1if(len(list[dic[x]][0]) > maxlen):maxlen = len(list[dic[x]][0])
# 第一列与第二列间有空格
maxlen += 1
total = 0
# 第一列
print("NAME"+" "*(maxlen-4)+"QUANTITY PRICE SUM")
for i in list:# 输出数量不为0的商品if i[2] != 0:sum = i[2]*i[1]total += sumprint(i[0]+" "*(maxlen-len(i[0]))+"%-9d%-6.1f%.2f" % (i[2], i[1], sum))
print("total:%.2f" % total)

输出和样例一样,却一直报WA,也看不到题解,不知道为啥。

代码对齐

时间限制: 1000 ms 内存限制: 65536 kb

题目

题目描述

Python代码要求严格对齐才能执行。但是对齐问题往往很难发现,有时候只是某一行少了或者多了一个空格,就会报错。现在请你编写一个Python程序来帮你整理一下代码,解决少空格或多空格的问题。

要求:

(1)把所有的tab('\t')换成4个空格。

(2)使每一行前的空格数必须是4的倍数。把空格补充成不小于自身的最小的4的倍数。如,3个空格补成4个,5个空格补成8个。

注意:这样的要求并不能保证输出代码一定是语法正确的。

(3)确保“#”与注释文字间至少有一个空格。只需要处理每行的第一个“#”即可,将后面的“#”看做注释中的文字。

输入

第一行是一个正整数n,代表代码的行数。

接下来n行,是需要整理的代码。

输出

整理后的代码。

输入样例

8
#terrible code
for i in range(100):if i % 2 == 0:print('%d is an even number\n'%i)if i % 3 == 0:print('%d can be divided by 3\n'%i)
#tell people it's over
print('It\'s over')

输出样例

# terrible code
for i in range(100):if i % 2 == 0:print('%d is an even number\n'%i)if i % 3 == 0:print('%d can be divided by 3\n'%i)
# tell people it's over
print('It\'s over')

解答

先处理tab,利用str.expandtabs()函数将所有tab替换为4个空格。

然后补全空格,先算出行首空格数,然后用str.lstrip()去掉空格再添加空格。

最后补全#后的空格,遍历搜索。

代码如下:

import math
n = int(input())
for j in range(n):line = input()length = len(line)# 替换tab后去掉开头空格line = line.expandtabs(4).lstrip()# 补全空格line = " "*math.ceil((length-len(line))/4)*4+linelis = list(line)# 补上第一个#后的空格for i in range(len(lis)):if(lis[i] == '#' and i+1 < len(lis) and lis[i+1] != ' '):lis.insert(i+1, ' ')print("".join(lis))

输出和样例一样,一直报PE。

转圈圈

时间限制: 1000 ms 内存限制: 65536 kb

题目

题目描述

情人节到了(其实是过去了),偷偷送大家一道题。

本题要求你输出一个尺寸为d×d的数阵,数字的排列方式是从1到n循环且顺时针转圈,看样例输出。

输入

两行,第一行是正整数n(n<10),第二行是正整数d(d<20)

输出

转圈圈的数阵

输入样例1

6
4

输出样例1

1 2 3 4
6 1 2 5
5 4 3 6
4 3 2 1

输入样例2

5
5

输出样例2

1 2 3 4 5
1 2 3 4 1
5 4 5 5 2
4 3 2 1 3
3 2 1 5 4

解答

想法比较简单,设置一个变量用于控制填充方向,到达拐点后改变方向。

代码如下:

n = int(input())
d = int(input())
# d*d列表
a = [[0]*d for i in range(d)]
# 填充方向
direct = 0
# 当前填充坐标
x = 0
y = 0
for i in range(d*d):a[x][y] = i % n+1if direct == 0:if y+1 < d and a[x][y+1] == 0:y += 1else:x += 1direct = 1elif direct == 1:if x+1 < d and a[x+1][y] == 0:x += 1else:y -= 1direct = 2elif direct == 2:if a[x][y-1] == 0:y -= 1else:x -= 1direct = 3else:if a[x-1][y] == 0:x -= 1else:y += 1direct = 0
for i in a:s = [str(j) for j in i]print(" ".join(s))

这题总算过了。

OJ上的三道Python题相关推荐

  1. 第十三届蓝桥杯省赛 python B组复盘(三道代码题全AC居然省一了)

    第十三届蓝桥杯省赛 python B组复盘(三道代码题全AC居然省一了)

  2. windows平台上编写的python无法在unix_【判断题】在Windows平台上编写的Python程序无法在Unix平台运行...

    [判断题]在Windows平台上编写的Python程序无法在Unix平台运行 更多相关问题 分别将下列物质滴入苯酚溶液中,产生白色沉淀的是A.浓溴水B.氢氧化钠溶液C.稀盐酸D.氯化铁溶液 有机物分子 ...

  3. 手机上开发python有哪些软件-哪个手机软件有python题库

    哪个手机软件有python题库? 推荐用leetcode,这款app十分适合大家来练习编程,它有着丰富的题库,而且对题目进行了分类,适合所有学习程度的用户. 下面给大家介绍一下这个软件的功能: 一.选 ...

  4. 手机上有没有学python的软件-哪个手机软件有python题库

    哪个手机软件有python题库? 推荐用leetcode,这款app十分适合大家来练习编程,它有着丰富的题库,而且对题目进行了分类,适合所有学习程度的用户. 下面给大家介绍一下这个软件的功能: 一.选 ...

  5. 1000道Python题库系列分享15(1道代码改写题)

    考虑到前面分享题库的时候,要等下一期才给出答案,不方便大家及时核对和学习.以后改为每期在文末直接给出答案,不明白的地方可以文末留言交流,提高学习效率. ================= 问题描述: ...

  6. 洛谷OJ上的A+B花(zhuang)式(bi)解法

    转眼间快到了8月,一想自己都毕业好久了,很怀念曾经在各大OJ上刷题的时光,今天无意在一个算法群里看到最近有个叫洛谷的oj网站貌似蛮火的,于是注册了一个下进去看一看,顺手打开了A+B problem,然 ...

  7. ipad能安装python么_ipad上能安装python吗

    ipad上怎么安装python? 手机和ipad都是6.0.1系统,没有升级到7.0以上openssh 提供远程登录操作 pyobjc 提供python2.5.1版本德 移动终端 安装好以后打开终端输 ...

  8. 1000道Python题库系列分享24(41个客观题,numpy专题)

    封面图片:<Python程序设计基础(第2版)>,董付国,清华大学出版社 ============== 好消息:智慧树网APP"知到"中搜索"董付国" ...

  9. 1000道Python题库系列分享23(61个填空题)

    封面图片:<玩转Python轻松过二级>,董付国,清华大学出版社 ================= 本期题目,参考答案在文末: 温馨提示 关注本公众号"Python小屋&quo ...

最新文章

  1. 【Java小工匠聊密码学】--base58编码
  2. 网状结构的解藕-中介者模式
  3. python语言中的单行注释语句_Python 1基础语法一(注释、行与缩进、多行语句、空行和代码组)...
  4. 阿里P8高级架构师教你如何通过BAT面试顺利拿到offer
  5. 基于Kubernetes的持续部署方案
  6. 经典面试题 | 讲一下垃圾回收器都有哪些?
  7. 这些基因的名字太有才了,研究一下都可以发10分文章
  8. 手机运行内存越大就越好吗?4GB与8GB的差距真的很明显吗?
  9. 7.大数据架构详解:从数据获取到深度学习 --- 批处理技术
  10. 如何添加Cydia源?如何通过Cydia下载软件?如何卸载软件?
  11. 2017年自动修复概述——Automatic Software Repair: A Survey [来自软件工程顶刊 TSE 2017]
  12. 计算机管理员工作目标任务书,毕业论文任务书中主要任务及目标怎么写
  13. odoo学习必看-提问的智慧《How To Ask Questions The Smart Way》
  14. 软件发明专利实例_软件发明专利思路
  15. Java:如何选择一个好的Java外包合作伙伴?
  16. python中文件路径怎么写?
  17. Latest - 2021 - 08 Giuhub Access
  18. 如何在 Mac 和虚拟机上安装 macOS Big Sur、Monterey 和 Ventura
  19. ChatGPT发明「史莱姆语」,词汇语法规则全都有,还配了「史翻英」Python代码
  20. Latex入门教程用法笔记(结尾附完整示例)

热门文章

  1. 前缀和 专题一(入门篇)
  2. 温度过高时蜂鸣器报警,自认为的简简单单的实验能有啥困难?(附DS18B20温度传感器的详细笔记和时序图)
  3. 正在搜索需要的文件_信息搜索课——前五次课心得
  4. Nand flash 三种类型SLC,MLC,TLC【转】
  5. mfc中字体设置详解
  6. android.mk 编译 aidl,c++层使用和编译aidl文件例子
  7. Android WiFi无法连接隐藏AP
  8. php离线bt下载,基于TP3.1的多用户离线下载
  9. excel表格打不开是什么原因_记录和管理零散信息,什么软件比 Excel 表格更方便...
  10. python可以处理数据么_Python数据处理实战