Python -需要从单词串中提取首字母和末字母

ewm0tg9j  于 2023-03-13  发布在  Python
关注(0)|答案(3)|浏览(171)

我已经坚持了一段时间了。基本上下面的get_text_value(text)代码传递了一串单词,它提取每个单词的首字母和末字母,将其与letter_values匹配,并根据第一个和最后一个单词匹配的数字之和给出最终值。整个字符串的第一个和最后一个字母,而不是每个单词。我知道我想把字符串转换成一个列表,但我不完全确定如何去做。任何帮助都将非常感谢。谢谢!

def get_text_value(text):
     letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
     letter_values = [1, 4, 2, 3, 1, 4, 3, 4, 1, 7, 7, 4, 6, 6, 1, 3, 9, 2, 2, 2, 1, 8, 5, 9, 9, 9]
     text_value = 0
     text = text.lower()
     for i in text:
          if text[0] and text[-1] in letters:
               letters_index_1 = letters.index(text[0])
               letters_index_2 = letters.index(text[-1])
               text_value = letter_values[letters_index_1] + letter_values[letters_index_2]

     return text_value

def test_get_text_value():
     print("1. Text value:", get_text_value("abracadabra")) 
     print("2. Text value:", get_text_value("a b"))
     print("3. Text value:", get_text_value("enjoy Today"))
     print("4. Text value:", get_text_value(""))

     text = "Be yourself everyone else is already taken"
     text_value = get_text_value(text)
     print("6. Text:", text)
     print("6. Text value:", text_value)
0yg35tkg

0yg35tkg1#

首先:把这些值存储在字典里,这样工作量就小多了。
然后,只需遍历文本中的单词并添加值:

def get_text_value(text):
    lv = {'a': 1, 'b': 4, 'c': 2, 'd': 3, 'e': 1, 'f': 4, 'g': 3, 'h': 4, 'i': 1, 'j': 7, 'k': 7, 'l': 4, 'm': 6, 'n': 6, 'o': 1, 'p': 3, 'q': 9, 'r': 2, 's': 2, 't': 2, 'u': 1, 'v': 8, 'w': 5, 'x': 9, 'y': 9, 'z': 9}
    return sum(
              lv.get(word[:1], 0) + lv.get(word[-1:], 0)
              for word in text.lower().split(" ")
              )
piok6c0g

piok6c0g2#

看起来你才刚刚开始使用Python。欢迎!有几件事情可能值得你去熟悉一下。
1.字典
字典是存储键值对的好工具。在你的例子中,当你有一个字母(你的键)和一个数字值(值)时,字典会非常好地工作。正如在另一个答案中提到的,字典会显著地清理你的代码。
1.字符串方法。
从获得整个句子的首字母和末字母到每个单词的首字母和末字母的函数是split,它会将一个字符串拆分成一个字符串列表,并在其中找到一个空格。

>>> "enjoy Today".split(" ")
['enjoy', 'Today']
>>> "abracadabra".split(" ")
['abracadabra']

你不必只按空格来拆分。

>>> "abracadabra".split("b")
['a', 'racada', 'ra']

1.列表理解
只要谷歌它,因为有很多文章,将做一个更好的工作解释,然后我会在这里。
这3个方法是一些关键的构建块,它们将使Python编写起来很愉快,并且使您的代码简洁易读。

neekobn8

neekobn83#

这样做:

def get_text_value2(text):
    letters = [chr(i) for i in range(ord('a'), ord('z')+1)]
    letter_values = [1, 4, 2, 3, 1, 4, 3, 4, 1, 7, 7, 4, 6, 6, 1, 3, 9, 2, 2, 2, 1, 8, 5, 9, 9, 9]
    alpha_value_dict = dict(zip(letters, letter_values))
    formatted_text = text.lower()
    return alpha_value_dict.get(text[0], 0) + alpha_value_dict.get(text[-1], 0)

或者,如果您希望返回值的逻辑与原始函数保持一致,则可以执行以下操作:

def get_text_value2(text):
    letters = [chr(i) for i in range(ord('a'), ord('z')+1)]
    letter_values = [1, 4, 2, 3, 1, 4, 3, 4, 1, 7, 7, 4, 6, 6, 1, 3, 9, 2, 2, 2, 1, 8, 5, 9, 9, 9]
    alpha_value_dict = dict(zip(letters, letter_values))
    formatted_text = text.lower()
    try:
        return alpha_value_dict[text[0]] + alpha_value_dict[text[-1]]
    except:
        return 0

相关问题