L1-002 打印沙漏
一行输入多个数据用空格隔开,我们可以使用split函数来分割它们。例如本题我们可以用:
>>> a, b = input().split() #split()默认按照空格分割,返回一个列表。列表里有两个元素,可以赋值给两个变量。
来对输入的内容进行分割。
>>> '2-3-4-5-6'.split('-') #指定字符分割
['2', '3', '4', '5', '6']
>>> '2-3-4-5-6'.split('-', 2) #指定分割的次数,得到一个只切割两次的列表。
['2', '3', '4-5-6']
拓展知识(去年有个朋友这样写但是一开始用center写错了):
*rjust()
向指定字符串左侧填充指定字符,默认填充空格(本题系数要按行算)。
*center()
向指定字符串两侧侧填充指定字符(本题不适用,右侧不应有空格)。
*ljust()
类似rjust,向右侧填充。
L1-003 个位数统计
对于数字的字符混合输出,我们可以采用统一转换成字符串类型拼接成新字符串,或者采用字符串格式化的方式:
>>> print(str(a)+':'+str(b)) #不能简单地使用逗号","连接,print会在输出时添加空格" "
>>> print('%d:%d'%(a, b)) #最早的格式化方式,print('%%')才能打印出真正的%
>>> print('{}:{}'.format(a, b)) #python 2.5 之后提供了更加优雅的format()方法
>>> print(f'{a}:{b}') #python 3.6 根据PEP 498新添加的f-string方法
f-string还能实现各种自定义格式:对齐、宽度、符号、补零、精度、进制等,功能强大,完全可以替代前面的ljust(), rjust(), center(),感兴趣可以自行了解。
L1-006 连续因子
你可能会用到 Python 3.8 math模块新增的 isqrt()
方法,返回平方根并向下取整。
>>> import math #isqrt()是不能直接访问的,需要导入math模块。
>>> math.isqrt(10)
3
>>> from math import isqrt #从math模块导入isqrt到当前命名空间。
>>> isqrt(10)
3
输出格式要求按 因子1*因子2*……*因子k
的格式输出最小的连续因子序列。
假设你已经得到了这个连续因子的列表,为了方便这里采用 join()
向构成可迭代对象的因子之间加入 ’*‘ 字符。
>>> '*'.join(['2', '3', '4', '5', '6'])
2*3*4*5*6
对于非字符串元素构成的列表,我们需要把每一个元素都转化为字符串类型,例如可以使用列表推导式:
>>> lst = ['2', '3', '4', '5', '6']
>>> [int(x) for x in lst]
[2, 3, 4, 5, 6]
类似的,元组和字典也有推导式。
L1-008 求整数段和
对于输入一行两个整数,我们想一次性直接得到整数类型,也可以使用列表推导式,
或者使用 map()
来批量使用 int()
处理可迭代对象:
>>> a, b = [int(x) for x in input().split()]
>>> a, b = map(int, input().split())
要注意的是,在 python 3 中 map 返回的是迭代器而不是列表。
如果你需要列表,也可以在map()
外面再套一层list()
来转换数据类型。
L1-010 比较大小
我们可以使用 sort()
来进行排序,然后再使用 join()
就结束了。
即便你没有把列表里的元素转成数字,sort依然可以完成排序(按字典序)。
你需要辨析的是:
>>> lst.sort() #修改了原列表
>>> lst_1 = sorted(lst) #没有修改原列表,需要将返回的列表赋值给变量
sorted 函数适用于所有序列,但它永远返回一个列表。
>>> sorted(iterable, key=None, reverse=False)
- iterable – 可迭代对象。
- key – 元素比较的依据,例如
key = lambda x:len(x)
是按元素长度比较。 - reverse – 升降序,
reverse = True
降序,reverse = False
升序(默认)。
L1-011 A-B
字符串是不可变类型,我们可以使用切片,replace()
,sub()
,translate()
等多种方式实现对字符串中指定字符的删除。替换时目标字符串为空字符串即可。
L1-015 跟奥巴马一起画方块
a
÷
b
a\div b
a÷b 向上取整可以直接 import math
使用 math.ceil(a/b)
,也可以手动计算 (a+b-1)//b
。
math库常用的函数还有:最大公约数
math.gcd()
, 幂运算math.pow()
, 平方根math.sqrt()
, 三角函数等等。
math库自带四个常数: π π πmath.pi
, e e emath.e
, ∞ ∞ ∞math.inf
, 非数math.nan
。
- 突击检查!你能把圆周率背到多少位?
L1-016 查验身份证
- 我使用了
try...expect...
语句,你也来试试吧!
L1-020 帅到没朋友
- 使用
update()
居然可以把列表元素一键添加到集合,太神奇了吧!
你也可以使用
set()
把列表转换成集合,集合的运算方式有:交&
并|
差(补)-
对称差集^
类似地,update()
除了更新集合,还能更新字典。
L1-043 阅览室
这里要求输出的平均阅读时间为精确到个位的整数时间,笔者简单地使用了 round()
进行四舍五入操作。
实际上 round()
函数的精度非常低。你也可以使用 int(a+0.5)
的方法来实现四舍五入取整。
如果后续你需要精确的四舍五入,可以使用 decimal
模块。
L1-064 估值一亿的AI核心代码
有一个要求是:把行首尾的空格全部删掉。
strip()
方法可以移除字符串头尾指定的字符(默认为空格或换行符)或字符序列,不会删除中间的字符。
类似地,lstrip()
移除开头的指定字符,rstrip()
移除末尾的指定字符。
L1-080 乘法口诀数列
仅在此强调一下,append()
是把括号内的对象作为一整个元素添加到列表末尾,extend()
会把可迭代对象的每一项依次添加到列表末尾。
列表
添加 | 删除 | 查找 | |||
---|---|---|---|---|---|
append() | 在末尾添加一个元素 | del | 删除一个或一段连续的元素 | index() | 返回第一个匹配的位置,没找到报错 |
extend() | 在末尾添加至少一个元素 | pop() | 删除并返回指定位置的元素 (默认最后一个) | find() | 返回第一个匹配的位置,没找到返回-1 |
insert() | 在指定位置添加一个元素 | remove() | 删除第一个和指定值相同的元素 | count() | 返回元素个数 |
集合
添加 | 删除 | ||
---|---|---|---|
add() | 添加一个元素 | remove() | 删除一个指定元素,不存在会报错 |
update() | 可以更新多个元素 | discard() | 删除一个指定元素,不存在不会报错 |
pop() | 随机删除一个元素,集合为空会报错 |
字典
添加 | 删除 | 查找 | |||
---|---|---|---|---|---|
dict[key]=value | 直接赋值添加元素 | del | 删除指定键值对 | get() | 查找的key不存在 则返回第二个参数 (默认值None) |
update() | 可以更新多个键值对 | pop() | 删除指定键值对并返回值 |
数据容器
- python数据容器有:字符串,列表,元组,集合,字典等。这些都应该掌握。
- 字符串和元组是不可变类型,可以作为字典的键,索引、查找、切片等性质类似于列表。
in
或not in
可以判断一个元素是否在容器中,clear()
可以清空容器。- 还有许多内置函数和方法便不在此赘述,网络上也不乏归纳完备的资料,本文仅作为笔者天梯赛L1的刷题总结。