【问题标题】:Python Function That Receives Letter, Returns (0-Based) Numerical Position Within Alphabet接收字母的 Python 函数,返回(基于 0 的)字母中的数字位置
【发布时间】:2017-04-21 19:36:42
【问题描述】:

我正在尝试创建一个 Python 函数,它接收一个字母(一个只有一个字母字符的字符串)并返回该字母在字母表中的从 0 开始的数字位置。它不应该区分大小写,我不能使用 import。

所以输入“a”应该返回

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

如果您有任何建议,请提供帮助。谢谢你。

【问题讨论】:

    标签: python function python-3.x numerical alphabet


    【解决方案1】:

    我建议使用字典。做一些相对简单的事情可能需要大量的代码,但我发现这样更容易理解(如果你是 python 新手,它会帮助你学习)。如果你 google 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,所以你可以自己填写;)

    我曾经必须输入元素周期表上的每个元素及其对应的原子质量,这需要很长时间(感觉比实际时间长得多)。

    【讨论】:

    • 是的,这就是我想要的。不知道您可以在这样的变量中创建字典 - 太棒了!谢谢!
    【解决方案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()]
    

    是所需的功能。

    【讨论】:

      【解决方案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)格式。

      【讨论】:

        猜你喜欢
        • 2019-06-20
        • 2019-02-05
        • 1970-01-01
        • 1970-01-01
        • 2014-05-26
        • 2011-07-09
        • 2019-05-08
        • 1970-01-01
        相关资源
        最近更新 更多