伙计我是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
答案 0 :(得分:4)
您真正的问题是“如何将字符串映射到Python中的数字”(反之亦然)。由于当前的标题可能会产生误导,让我们首先解决它为“如何比较字符串和数字”的人们:与流行的脚本语言不同,Python不会进行自动类型转换。例如,在Javascript中你可以这样做:
>>> 5 == '5'
true
但在Python中它是错误的:
>>> 5 == '5'
False
如果您希望它们具有不同的类型,则必须明确地将这两个值强制转换为相同的类型(例如string
或int
):
>>> 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'
使用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
>>>