CheckiO Elementary 关卡1完结篇

目录

题1:Between Markers (simplified)

题2:Split Pairs

题3:Correct Sentence

题4:Is Even

题5:Nearest Value


题1:Between Markers (simplified)

题干:给你一个字符串和两个标记(初始的和最终的)。您必须找到包含在这两个标记之间的子字符串。
输入:三个参数。它们都是字符串。第二个和第三个参数是初始和最终标记。
输出:一个字符串。

注意:python中切片非常万能,此题使用切片,一行解决

def between_markers(text: str, start: str, end: str):
    return text[text.index(start)+1:text.index(end)]


print(between_markers('What is >apple<', '>', '<'))

题2:Split Pairs

题干:将字符串分成两个字符对。如果字符串包含奇数个字符,那么最后一对中缺少的第二个字符应该用下划线('_')替换。
输入:一个字符串。
输出:由字符串组成的可迭代对象。

我的思路:

  • 第一步:统计字符串a的长度
  • 如果长度为偶数
    • 第二步:先使用切片,然后将切片得到的数据存入列表中
  • 如果长度为奇数
    • 第二步:与奇数一样,但是最后一个元素需要拼接下划线('_')
def split_pairs(a):
    list1 = []
    cnt = len(a)
    if cnt % 2 == 0:  # 字符串a中有偶数个元素
        for i in range(0, cnt, 2):
            list1.append(a[i:i+2])
    else:
        for i in range(0, cnt, 2):
            list1.append(a[i:i+2])
        list1[-1] += '_'
    return list1


print(list(split_pairs('abcd')))
print(list(split_pairs('abc')))

题3:Correct Sentence

题干:对于你的函数的输入,你会得到一个句子。你必须返回一个正确的版本,它以大写字母开始,以句号(点)结束。请注意,并不是所有的修复都是必要的。如果一个句子已经以句号(点)结尾,那么再加一个点就是错误的。
输入:一个字符串。
输出:一个字符串。

def correct_sentence(text: str):
    result = text[0].upper() + text[1:] + "." if text[-1] != "." else text[0].upper() + text[1:]
    return result


print(correct_sentence('greetings, friends'))
print(correct_sentence('Greetings, friends'))

题4:Is Even

题干:检查给定的数字是否是偶数。如果数字是偶数,函数应该返回True,如果数字是奇数,则返回False。
输入:int。
输出:一个布尔值。

def is_even(num: int):
    return num % 2 == 0


print(is_even(2))
print(is_even(5))

题5:Nearest Value

题干:找出与给定值最近的值。你会得到一个集合形式的值列表和一个你需要找到最接近的值。
        例如,我们有以下一组数字:4、7、10、11、12、17,我们需要找到与数字9最近的值。如果我们按升序对这个集合排序,那么9的左边是7,右边是10。但是10比7更接近,这意味着正确答案是10。

输入:两个参数。集合形式的值列表。所查找的值是一个整数。

输出:整数int

我的思路:

  • 第一步:将集合转化为列表
  • 第二步:将给定元素one加入列表中,排序后,找到给定元素one的下标
  • 第三步:通过多分支语句考虑给定元素one可能在列表中出现的位置
    • 如果one在最开始或者最后位置,最接近它的值就在它旁边
    • 如果one在中间的任意位置,需要和两边的数做差,比较
def nearest_value(values: set, one: int):
    result = 0
    list_val = list(values)
    list_val.append(one)
    list_val.sort()  # 注意:sorted()函数排序,不会改变原来的对象
    p = list_val.index(one)  # 给定元素one的下标

    if list_val[p] == list_val[-1]:
        result = list_val[-2]
    elif list_val[p] == list_val[0]:
        result = list_val[1]
    else:
        # abs()函数:绝对值
        if abs(list_val[p-1]-one) <= abs(list_val[p+1]-one):
            result = list_val[p-1]
        else:
            result = list_val[p+1]

    return result


print(nearest_value({4, 7, 10, 11, 12, 17}, 9))
print(nearest_value({4, 7, 10, 11, 12, 17}, 8))
print(nearest_value({4, 8, 10, 11, 12, 17}, 9))
print(nearest_value({0, -2}, -1))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

勇敢小牛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值