2016-10-03 157 views
2

我一直堅持這一段時間。基本上get_text_value(text)下面的代碼被傳遞一串單詞,它提取每個單詞的第一個和最後一個字母,將其與letter_values匹配,並根據匹配的第一個和最後一個單詞的總和給出最終值。到目前爲止,我只能「提取」整個字符串的第一個和最後一個字母,而不是每個單詞。 我知道我打算將字符串轉換爲列表,但我不完全確定如何去做。任何幫助將不勝感激。謝謝!Python - 需要從字符串中提取第一個和最後一個字母

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) 
+0

分割字符串的空間來獲得個人的話。然後獲取每個單詞的首字母和最後一個字母。 – Li357

回答

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

謝謝你。只有一個問題,通過'[「a b」]'會返回值'10'而不是'5'。 – Brian

+0

爲什麼要返回5? – L3viathan

0

看起來你是剛剛開始使用Python。歡迎!夫婦可能值得更熟悉的事情。

  1. 字典

詞典是好用於存儲鍵值對。在你的情況下,字典會很好地工作,因爲你有一個字母(你的關鍵字)和一個數值(值)。正如在另一個答案中提到的,字典將顯着清理您的代碼。

  1. 字符串方法。

您需要得到整個句子的第一個和最後一個字母的第一個和最後每個字的去功能是split。它會將一個字符串拆分爲一個字符串列表,在其中找到一個空格。

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

您不必在空間上分割。

>>> "abracadabra".split("b") 
['a', 'racada', 'ra'] 
  • 列表理解
  • 它只是谷歌,因爲有很多的文章,會做得更好則說明我會在這裏。

    這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 
    
    相關問題