面向天梯赛编程(L1):python语法基础

本文介绍了Python中的字符串分割、格式化技巧,如split函数、格式化字符串和f-string,以及数学运算如连续因子的计算、整数段和求和、四舍五入等。同时涵盖了列表推导式、排序、数学库math的使用和数据结构操作如集合、字典的处理。
摘要由CSDN通过智能技术生成

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 e math.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数据容器有:字符串,列表,元组,集合,字典等。这些都应该掌握。
  • 字符串和元组是不可变类型,可以作为字典的键,索引、查找、切片等性质类似于列表。
  • innot in 可以判断一个元素是否在容器中,clear() 可以清空容器。
  • 还有许多内置函数和方法便不在此赘述,网络上也不乏归纳完备的资料,本文仅作为笔者天梯赛L1的刷题总结。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jord8061

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

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

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

打赏作者

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

抵扣说明:

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

余额充值