如何将python中的字符串等同于数字

时间:2013-04-27 02:41:19

标签: 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

1 个答案:

答案 0 :(得分:4)

您真正的问题是“如何将字符串映射到Python中的数字”(反之亦然)。由于当前的标题可能会产生误导,让我们首先解决它为“如何比较字符串和数字”的人们:与流行的脚本语言不同,Python不会进行自动类型转换。例如,在Javascript中你可以这样做:

>>> 5 == '5'
true

但在Python中它是错误的:

>>> 5 == '5'
False

如果您希望它们具有不同的类型,则必须明确地将这两个值强制转换为相同的类型(例如stringint):

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

使用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提示符)是您最好的朋友。只需使用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

>>>