2016-12-07 45 views
1

我試圖創建一個Python函數,它接收一個字母(一個字符串只有一個字母字符)並返回基於0的數字位置字母表中的那個字母。它不應該區分大小寫,我不能使用導入。Python函數接收字母,返回(基於0)字母表中的數字位置

所以在進入 「一」 應該返回

0 

輸入 「A」,也應該返回

0 

輸入 「O」 應該返回

14 

等。

我已經注意到this question,但最好的答案使用導入,第二個答案對我來說沒有任何意義/不起作用。我嘗試應用第二個答案是這樣的:

letter = input("enter a letter") 

def alphabet_position(letter): 

    return ord(letter) - 97 

print((alphabet_position)(letter)) 

但我得到一個類型錯誤:

TypeError: ord() expected a character, but string of length 2 found 

就像在說我掛問題的提問者,我也想送個字符「x」的字母數量返回,但爲了做到這一點,我需要先創建這個幫助函數。

我在想,必須有一種方法來將信件存儲在兩個單獨的列表中,一個是小寫字母和一個大寫字母,然後查看用戶輸入的字符串是否與該列表中的某個項目匹配?那麼一旦我們找到了匹配,我們就返回它的(基於0的)數字位置?

letter = input("enter a letter") 

def alphabet_position(letter): 

    position = 0 
    #letter_position = index value that matches input 
    lower_case_list ['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'] 

    upper_case_list ['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']    

#if letter is in lower_case_list, return it's 0-based numerical position. 
#else, if letter is in upper_case_list, return it's 0-based numerical position. 
#else, print("Enter a valid letter") 

return letter_position 

如果您有任何建議,請幫忙。謝謝。

回答

1

我建議使用字典。這可能是一個很大的代碼來做一些相對簡單的事情,但我發現這樣更容易理解它(如果你是python的新手,它會幫助你學習)。如果谷歌Python字典,你可以學到很多的更多,但這裏的基本概念:

代碼Python版本3.X:

def alphabet_position(letter): 
    alphabet_pos = {'A':0, 'a':0, 'B':1, 'b':1} 
    pos = alphabet_pos[letter] 
    return pos 
letter = input('Enter a letter: ') 
print(alphabet_position(letter)) 

代碼Python版本2.7:

def alphabet_position(letter): 
    alphabet_pos = {'A':0, 'a':0, 'B':1, 'b':1} 
    pos = alphabet_pos[letter] 
    return pos 
letter = raw_input('Enter a letter: ') 
print alphabet_position(letter) 

如果您運行它,它將打印1,因爲它搜索alpahbet_pos字典並找到與標題爲'B'的條目相對應的值。注意你可以有多個具有相同值的條目,所以你可以在同一個字典中使用大寫和小寫。爲了時間的原因,我只寫了字母A和B,所以你可以自己填寫剩下的;)

我曾經不得不輸入元素週期表上的每個元素及其相應的原子量,比實際情況長得多)。

+0

編輯添加用戶輸入 – wes1099

+0

是的這就是我要去的。不知道你可以在這樣的變量中創建一個字典 - 酷!謝謝! – HappyHands31

3

使用.lower()方法將大寫或小寫轉換爲小寫可能更簡單,並使用內置的字母列表(string.ascii_lowercase)。您可以使用.index()方法找到列表元素的索引。

import string 

letter = input('enter a letter: ') 

def alphabet_position(letter): 
    letter = letter.lower() 
    return list(string.ascii_lowercase).index(letter) 


print(alphabet_position(letter)) 

當你調用alphabet_position時,它期待一個參數,所以你需要做func_name(arg)格式。

2

你可以做到這一點的另一種方法是使用字典解析來創建字母位置對的dict,像這樣:

from string import lowercase as l 

alphabet_lookup = {letter:pos for letter,pos in zip(l, range(len(l)))} 

然後

f = lambda letter: alphabet_lookup[letter.lower()] 

是所需的功能。

相關問題