2016-12-07 71 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()] 

是所需的功能。