该文章总结了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])