你真正的問題是「如何映射在Python字符串到數字」(反之亦然)。由於目前的標題可能會引起誤解,我們先來解釋一下「如何比較字符串和數字」的人們:與流行的腳本語言不同,Python不會製作自動類型的鑄件。如果你
>>> 5 == '5'
False
必須轉換這兩個值相同的類型(例如string
或int
)明確:例如,在Javascript中你可以這樣做:
>>> 5 == '5'
true
但是在Python它是假期望他們是不同的類型:
>>> str(5) == str('5')
True
現在讓我們回到你真正的問題。作爲@GarethLatty評論:
name1
,name2
是一個非常常見的反模式。改爲使用數據結構(列表,字典等)。這種問題也變得微不足道。
Python中的兩個基本容器數據類型是list
和dict
。
使用列表:
>>> name_list = ['rock', 'paper', 'scissors', 'lizard', 'spock']
>>> name_list.index('spock')
4
列表索引是從零開始:
>>> name_list[0]
'rock'
使用字典,你可以爲字符串任意號碼進行關聯:
>>> 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(讀取 - 求值 - 輸出循環,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
>>>
'name1','name2'是一個非常常見的反模式。使用數據結構('list','dict'等等)。這種問題也變得微不足道。 – 2013-04-27 02:44:09
也許你需要枚舉:http://stackoverflow.com/questions/36932/how-can-i-represent-an-enum-in-python?rq=1 – 2013-04-27 02:44:59