【问题标题】:Python - Need to extract the first and last letter from a word stringPython - 需要从单词字符串中提取第一个和最后一个字母
【发布时间】:2016-10-03 21:23:00
【问题描述】:

我已经被这个问题困扰了一段时间。基本上,下面的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


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢。只有一个问题,传递["a b"] 将返回值10 而不是5
  • 为什么要返回 5?
【解决方案2】:

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

  1. 字典

字典非常适​​合存储键值对。在您的情况下,字典会非常好用,因为您有一个字母(您的键)和一个数值(值)。正如另一个答案中提到的,字典将大大清理您的代码。

  1. 字符串方法。

从获取整个句子的第一个和最后一个字母到每个单词的第一个和最后一个字母的函数是split。它会将一个字符串拆分为一个字符串列表,并在其中找到一个空格。

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

您不必只按空格分割。

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

只要谷歌它,因为有很多文章会更好地解释,然后我会在这里。

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

【讨论】:

    【解决方案3】:

    这样做:

    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
    

    【讨论】:

      猜你喜欢
      • 2017-05-04
      • 2022-01-17
      • 1970-01-01
      • 2021-03-07
      • 2021-12-27
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      相关资源
      最近更新 更多