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

时间:2016-10-03 21:23:01

标签: python string list python-3.x

我已经坚持了一段时间。基本上下面的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)

3 个答案:

答案 0 :(得分: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(" ")
              )

答案 1 :(得分:0)

看起来你刚刚开始使用Python。欢迎!结合可能值得更熟悉的事情。

  1. 字典
  2. 字典适用于存储键值对。在您的情况下,字典可以很好地工作,因为您有一个字母(您的密钥)和一个数值(值)。正如另一个答案中所提到的,字典会显着地清理你的代码。

    1. 字符串方法。
    2. 从获得整个句子的第一个和最后一个字母到每个单词的第一个和最后一个字母所需的功能是split。它会将一个字符串拆分为一个字符串列表,在那里找到一个空格。

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

      您不必只是拆分空格。

      >>> "abracadabra".split("b")
      ['a', 'racada', 'ra']
      
      1. 列表理解
      2. 只是google它,因为有很多文章可以更好地解释,然后我会在这里。

        这3个方法是一些关键构建块,它们使Python可以编写,代码简洁易读。

答案 2 :(得分: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