pyCheckio -- Element

该文章总结了PyCheckio网站上Element部分的全部习题。整理如下:

1. Say Hi

编写一个根据给出的属性参数来介绍一个人的函数
def say_hi(name, age):
    # your code here
    return ("Hi. My name is {} and I'm {} years old".format(name,age))

2. Correct Sentences

对于你的功能的输入将被赋予一个句子。 您必须以某种方式返回其固定副本,以便始终以大写字母开头并以点结束。
请注意并非所有修复都是必需的。 如果一个句子已经以一个点结尾,那么添加另一个句子将是一个错误。
def correct_sentence(text):
    text = text[0].upper() + text[1:]   #首字母大写其余部分不变
    if text[-1] != ".":
        text = text + "."
    return text

注意:该题不能使用text.capitalize()函数将句子的首字母改为大写形式,因为这样会改变其他所有字母为小写。在实例“Welcome to New York.”中将会报错。

3. First Word

给你一个字符串,你必须找到它的第一个单词。
解决任务时要注意以下几点:
字符串中可以有点和逗号。
字符串可以以字母或例如点或空格开头。
一个词可以包含一个撇号,它是一个词的一部分。
整个文本可以用一个词来表示,就是这样。

def first_word(text):
    text= text.replace('.',' ').replace(',','').lstrip()
    text=text.split()
    return text[0]

大神代码如下:

import re
def first_word(text):
    word = re.compile(r"[\w']+")
    result = word.search(text).group()
    print(result)
    return result
或者re.search("[A-Za-z']+", text).group()
注意: 所用到的lstrip函数参考教程

4. Second index

给你两个字符串,你必须找到第一个字符串第二个字符串的索引。让我们来看看第一个例子,你需要在单词“sims”中找到第二个“s”。 用函数索引很容易找到它的第一次出现,或者找到哪个指出“s”是单词“sims”中的第一个符号,因此第一次出现的索引是0.但是我们必须找到第二个“ s“,这是连续第4次,这意味着第二次发生的指数(以及对问题的回答)是3。

def second_index(text, symbol):  
    if text.count(symbol) < 2:           # 如果该字母在字符串中仅出现一次,则返回None  
        return None  
    first = text.find(symbol)            # 使用find方法找到该字母在字符串中第一次出现位置  
    return text.find(symbol, first + 1)  # 将find方法起始位置设为字母第一次出现后一位,返回得到字母出现第二次位置 

5. Between Markers

给你一个字符串和两个标记(初始和最终)。 你必须在这两个标记之间找到一个子串。 但是有一些重要的条件:
最初和最后的标记总是不同的。
如果没有初始标记,则应将开始视为字符串的开始。
如果没有最终标记,则应该将结尾视为字符串的结尾。
如果缺少初始标记和最终标记,则只需返回整个字符串即可。
如果最后的标记站在最初的标记之前,则返回一个空字符串。

def between_markers(text, begin, end):   
    if begin in text:   #如果初始标记在字符串中,则将字符串开始下标设为初始标记后一位;如果没有初始标记则将开始下标设为0  
        b = text.find(begin) + len(begin)  
    else:          
        b = 0  
    if end in text:     #如果结束标记在字符串中,将结束下标设为结束标记位置;若不在,则设置结束下标为字符串结尾  
        e = text.find(end)  
    else:  
        e = len(text)  
    return text[b:e]  

6. Best Stock

给你当前的股票价格。你得弄清楚哪些股票的价格更高。输入:市场标识码为键值为股票价格的字典。输出:一个字符串和市场标识符代码。

def best_stock(data):
    max = 0
    name = ''
    for i in data:
        if data[i] > max:
            max = data[i]
            name = i
    return name

7. Popular Words

在这个任务中,你的任务是确定文本中某些单词的受欢迎程度。在函数的输入处给出2个参数:文本和您需要确定其流行度的单词数组。解决这个任务时要注意以下几点: 应在所有在所有登记册中查找这些词。 这意味着如果你需要找到一个单词“one”,那么诸如“one”,“One”,“oNe”,“ONE”等词将会起作用。搜索词总是用小写表示。如果这个单词没有被发现,那么它必须在字典中返回0(零)值。
def popular_words(text: str, words: list) -> dict:  
    # your code here  
    Dict = {} 
    text = text.lower()
    str = text.split()
    for s in words:  
        Dict[s] = str.count(s)#使用count函数统计s在字符串中出现的次数,并将其赋给字典键s所对应的值  
    return Dict 

8. Bigger Price 

你有一张桌子,里面有所有商品。 数据表示为一系列的字典。您的任务是找到最昂贵的商品。 我们正在寻找的数量将作为第一个参数给出,整个数据将作为第二个参数。

def bigger_price(limit, data):
    """
        TOP most expensive goods
    """
    # your code here
    list1 = sorted(data, key=lambda i: i["price"], reverse=True)
    result = list1[0:limit]
    print(result)
    return result

关于sorted函数的介绍参考教程

9. Fizz Buzz

“Fizz buzz”是一款文字游戏,我们将用它来教授机器人关于师的事情。 你应该写一个函数来接收一个正整数并返回:
如果数字可以被3和5整除,那么“Fizz Buzz”;如果数字可以被3整除,则为“Fizz”;如果数字可以被5整除,则发出“Buzz”;该数字作为其他情况下的字符串。
def checkio(number):
    if number % 5 ==0 and number %3 ==0:
        result = "Fizz Buzz"
    elif number % 5 == 0:
        result = "Buzz"
    elif number % 3 == 0:
        result = "Fizz"
    else:
        result = str(number)
    print(result)
    return result

10. The Most Numbers

给你一个数组(浮点数)。 您应该找到最大和最小元素之间的差异。 你的函数应该能够处理未定义数量的参数。 对于一个空的参数列表,该函数应该返回0。

def checkio(*args):
    if not args:
        return 0
    else:
        return max(args) - min(args)

11. Even the last

给你一个整数数组,需要你把具有偶数索引的元素相加(0,2,4 ...),然后把相加后得到的数与最后一个元素相乘。 不要忘记,第一个元素的索引是0。如果传入的是一个空数组,则应该返回0。
def checkio(array):
    sum = 0
    if len(array) == 0:
        return 0
    else:
        for i in range(len(array)):
            if i % 2 == 0:
                sum += array[i]
        return sum * array[-1]

12.  Secret Message

曾经试图在没有使用邮政服务的情况下向他人发送秘密消息? 你可以用报纸来告诉你的秘密。 即使有人发现你的信息,也很容易将它们剔除,以及它的偏执狂和伪造的阴谋论。 隐藏秘密信息的最简单方法之一是使用大写字母。 让我们找到一些这些秘密消息。给你一段文字。 按照它们出现在文本中的顺序,将所有大写字母收集在一个单词中。例如:text = "How are you? Eh, ok. Low or Lower? Ohhh."如果我们收集所有的大写字母,就会得到“HELLO”的信息。
def find_message(text):
    """Find a secret message"""
    result = ""
    for c in text:
        if c.isupper():
            result += c
    return result

13.  Three Words

让我们教机器人区分单词和数字。给你一个字符串,用空白(一个空格)分隔单词和数字。 单词只包含字母。 您应该检查字符串是否包含三个字连续。 例如,字符串“start 5 one two three 7 end”连续包含三个单词。
def checkio(words):
    list1 = words.split()
    num = 0
    for i in list1:
        if i.isalpha():
            num += 1
        else:
            num = 0
        if num >=3:
            return True
    else:
        return False

看到下面这个答案也很好:

def checkio(words):
    cout = 3
    flag = 0
    word = words.split()
    for w in word:
        if w.isalpha() and cout:
            cout -= 1
            flag = 1
            if cout == 0:
                return True
        else:
            cout = 3
    if not flag :
        return False

14. Index Power

给出一个正数和数N的数组。您应该在索引为N的数组中找到元素的N次方。如果N在数组外,则返回-1。 不要忘记,第一个元素的索引为0。我们来看几个例子:
- array = [1,2,3,4],N = 2,则结果为3^2 == 9;
- array = [1,2,3]和N = 3,但是N在数组外,所以结果是-1。
def index_power(array , n):
    if n >= len(array):
        return -1
    else:
        return pow(array[n],n)

15. Right to Left

其中一个机器人负责一项简单的任务:将一系列字符串合并成一个句子,以产生如何绕过船只的指示。 但是这个机器人是左撇子,倾向于开玩笑和迷惑其惯用右手的朋友。给你一串字符串。 您应该将这些字符串连接到初始字符串用逗号分隔的文本块中。 作为对右手机器人的一个笑话,你应该把所有的“right”这个词全部替换为“left”,即使它是另一个词的一部分。 所有字符串都以小写字母给出。
def left_join(phrases):
    result1 = (',').join(phrases)
    result = result1.replace('right', 'left')
    return result

16. Digits Multiplication

给你一个正整数,请你写一个函数来实现:传入正整数的每一位(不包括00)的乘积。例如:给你 123405, 你应该这样处理 1*2*3*4*5=120(别忘了把0丢掉)
def checkio(number):
    result = 1
    for i in str(number):
        if i != '0':
            result *= int(i) 
    return result

17. Number Base

给你一个字符串格式的正数和一个小于37大于1的整数型底数,用你写出来的方法来把他们转换为底数为10(十进制)的形式。 任务使用数字和‘A-Z’来作为字符串格式的正数。注意数字无法转换的情况。 例如:“1A”不能用基数9进行转换。对于这些情况,你的函数应该返回-1。

def checkio(str_number, radix):
    try:                                     # 这里使用try是因为int容易引发一个ValueError使程序终止  
        return int(str_number, radix)        #  python的int函数可以转换进制,第一位输入要转换的数字,第二位输入要转换的进制  
    except ValueError:    
        return -1 

18. Absolute sorting

让我们尝试一些排序。这是一个具有特定规则的数组。数组(元组)有不同的数字。你应该对它进行排序,但要按绝对值按升序排序。例如,序列(-20,-5,10,15)排序如下:(-5,10,15,-20)函数应该返回已排序的列表或元组。先决条件:数组中的数字因其绝对值而唯一。输入:一个数字数组,一个元组。输出:按绝对值按升序排序的列表或元组(但不是生成器)。另外:您的函数的结果将显示为测试说明面板中的列表。

def checkio(numbers_array):
    return sorted(numbers_array, key=abs)  # 以abs方法进行排序

19. The Most Frequent

你有一系列字符串,你要从中找出出现频率最高的字符串。

def most_frequent(data):
    return max(data, key=data.count)

20. Easy Unpack

在这里你的任务是创建得到一个元组,并返回一个包含三个元素(第一,第三和倒数第二的给定元组)的元组与的功能。

def easy_unpack(elements):
    return (elements[0], elements[2], elements[-2])

猜你喜欢

转载自blog.csdn.net/muumian123/article/details/80576251