2013-04-27 88 views
0

夥計們我是python的新手,我無法弄清楚這一點。我有一個字符串,我想等同於一個數字,但我很茫然。這是我迄今爲止的代碼,但它不起作用。如果有問題的答案,請在那裏指出。如何將python中的字符串等同於數字

功能帶有參數的名稱,它應該產生相應數量

def name_to_number(name): 
    name1 = "rock" 
    name2 = "paper" 
    name3 = "scissors" 
    name4 = "lizard" 
    name5 = "spock" 

    name_rock = int(0, name1) 
    name_paper = int(1, name2) 
    name_scissors = int(2, name3) 
    name_lizard = int(3, name4) 
    name_spock = int(4, name5) 

    if (name1 == "rock"): 
     print name_rock 
    elif (name2 == "paper"): 
     print name_paper 
    elif (name3 == "scissors"): 
     print name_scissors 
    elif (name4 == "lizard"): 
      print name_lizard 
    elif (name5 == "spock"): 
     print name_spock 
    else : 
     print "None of the numbers match" 

    return name 

test = name_to_number("paper") 

print test 
+4

'name1','name2'是一個非常常見的反模式。使用數據結構('list','dict'等等)。這種問題也變得微不足道。 – 2013-04-27 02:44:09

+0

也許你需要枚舉:http://stackoverflow.com/questions/36932/how-can-i-represent-an-enum-in-python?rq=1 – 2013-04-27 02:44:59

回答

4

你真正的問題是「如何映射在Python字符串到數字」(反之亦然)。由於目前的標題可能會引起誤解,我們先來解釋一下「如何比較字符串和數字」的人們:與流行的腳本語言不同,Python不會製作自動類型的鑄件。如果你

>>> 5 == '5' 
False 

必須轉換這兩個值相同的類型(例如stringint)明確:例如,在Javascript中你可以這樣做:

>>> 5 == '5' 
true 

但是在Python它是假期望他們是不同的類型:

>>> str(5) == str('5') 
True 

現在讓我們回到你真正的問題。作爲@GarethLatty評論:

name1name2是一個非常常見的反模式。改爲使用數據結構(列表,字典等)。這種問題也變得微不足道。

Python中的兩個基本容器數據類型是listdict

使用列表:

>>> 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提示符)是你最好的朋友。只是用helpdir內置函數探索東西:

>>> 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 

>>> 
+0

例如,'name_to_number = lambda name:name_dict.get (name,-1)',如果名稱不在name_dict中,它將返回-1。但是,真的,使用REPL探索你的選擇,並在再次詢問之前用結果更新你的問題。這個網站叫做stackoverflow,而不是domyhomeworkforme。 – 2013-04-27 03:17:44