0

伙计们,我是 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

1 回答 1

4

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

>>> 5 == '5'
true

但在 Python 中它是 False:

>>> 5 == '5'
False

如果您希望它们具有不同的类型,则必须将这两个值显式转换为相同的类型(例如stringor ):int

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

现在让我们回到你真正的问题。正如@GarethLatty 评论的那样:

name1,name2是一个非常常见的反模式。请改用数据结构(列表、字典等)。这种问题也变得微不足道。

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.

这种编程风格非常流行。使用 a 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

>>>
于 2013-04-27T02:45:52.543 回答