2016-12-07 8 views
1

文字を受け取るPython関数を作成しようとしています(アルファベット文字が1文字のみの文字列)。アルファベットのその手紙。大文字と小文字を区別しないでください。インポートは使用できません。 アルファベット内の数字を返す(0ベースの)文字を受け取るPython関数

だから "" 入力

0 

を返すべきで入る "" も

0 

入力 "O" を返す必要がありますように

14 

とを返す必要があります。

私はthis questionに気づきましたが、トップの回答はインポートを使用し、2番目の回答は私には意味をなさない/うまくいきません。私はこのような二答え適用することを試みた:

letter = input("enter a letter") 

def alphabet_position(letter): 

    return ord(letter) - 97 

print((alphabet_position)(letter)) 

を私はTypeError例外だ:ちょうど私がリンクされ、問題のアスカーよう

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

を、私はまた、文字を送信しようとしています"x"はアルファベットのステップバックですが、このヘルパ関数を最初に作成する必要があります。

文字を2つの別々のリスト(小文字と大文字)で保存し、ユーザーが入力した文字列がそのリストの項目の1つに一致するかどうかを確認する方法が必要だと思います?その後、一致が見つかると、それは(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 = raw_input('Enter a letter: ') 
print alphabet_position(letter) 

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について

これを実行すると、alpahbet_posディクショナリを検索し、「B」というエントリに対応する値が見つかるため、1が印刷されます。同じ値を持つ複数のエントリを持つことができるので、同じ辞書で大文字と小文字を区別できます。

私はかつて周期表のすべての要素とそれに対応する原子量を入力しなければならず、それは永遠に(感じられた実際にはるかに長い)。

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()] 

所望の機能である:あなたがこれを行うことが

+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を作成するために、辞書内包表記を使用することです。

関連する問題