需要从字符串中提取第一个和最后一个字母

问题描述 投票:0回答:3

我已经被这个问题困扰了一段时间了。基本上,下面的

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)
python string list python-3.x
3个回答
0
投票

首先:将值存储在字典中,这样可以减少工作量。

然后,只需迭代文本中的单词并添加值:

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(" ")
              )

0
投票

看起来您刚刚开始使用 Python。欢迎!一些可能值得更多熟悉的事情。

  1. 词典

字典适合存储键值对。就您而言,字典会非常有效,因为您有一个字母(您的密钥)和一个数值(值)。正如另一个答案中提到的,字典将显着清理你的代码。

  1. 字符串方法。

从获取整个句子的第一个和最后一个字母到每个单词的第一个和最后一个字母所需的函数是

split
。它将把一个字符串分割成一个字符串列表,并在其中找到一个空格。

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

您不必只按空格进行分割。

>>> "abracadabra".split("b")
['a', 'racada', 'ra']
  1. 列表理解

只需谷歌一下即可,因为有很多文章可以比我在这里更好地解释。

这 3 种方法是一些关键构建块,它们将使 Python 编写起来变得有趣,并使您的代码简洁易读。


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()
    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
© www.soinside.com 2019 - 2024. All rights reserved.