あなたの本当の質問は、「Python で文字列を数値にマップする方法」(またはその逆) です。現在のタイトルは誤解を招く可能性があるため、最初に「文字列と数値を比較する方法」について調べている人のために説明しましょう。一般的なスクリプト言語とは異なり、Python は自動型キャストを行いません。たとえば、Javascript では次のようにできます。
>>> 5 == '5'
true
しかし、Python では False です。
>>> 5 == '5'
False
異なる型であることが予想される場合は、両方の値を明示的に同じ型 ( string
or など) にキャストする必要があります。int
>>> str(5) == str('5')
True
では、本当の質問に戻りましょう。@GarethLattyがコメントしたように:
name1
、name2
非常に一般的なアンチパターンです。代わりにデータ構造 (リスト、辞書など) を使用してください。この種の問題も些細なことになります。
Python の基本的なコンテナ データ型の 2 つはlist
とdict
です。
リストを使用する:
>>> name_list = ['rock', 'paper', 'scissors', 'lizard', 'spock']
>>> name_list.index('spock')
4
リストのインデックスは 0 から始まります。
>>> name_list[0]
'rock'
dict を使用すると、任意の数値を文字列に関連付けることができます。
>>> name_dict = {'rock': 1, 'paper': 2, 'scissors': 3, 'lizard': 4, 'spock': 5}
>>> name_dict['spock']
5
値がリストに存在しない場合、index
メソッドはValueError
例外を発生させます。Python では、この種の式をブロックで囲むのが一般的ですtry
(icktoofay のコメントのように):
>>> name = 'kirk'
>>> try:
... name_list.index(name)
... except ValueError:
... print('{} is not a valid name.'.format(name))
...
kirk is not a valid name.
このプログラミング スタイルは非常に人気があります。を使用するdict
と、監視する必要がある例外は次のKeyError
とおりです。
>>> name_dict['kirk']
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
KeyError: 'kirk'
Python から始める場合は、REPL (read-eval-print ループ、Python プロンプト) が最適です。help
およびdir
組み込み関数を使用して、何でも調べるだけです。
>>> dir(name_dict)
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__',
'__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
'__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__',
'__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__',
'__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key',
'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop',
'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys',
'viewvalues']
>>> help(name_dict.keys)
Help on built-in function keys:
keys(...)
D.keys() -> list of D's keys
>>>