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がコメントしたように:

name1name2非常に一般的なアンチパターンです。代わりにデータ構造 (リスト、辞書など) を使用してください。この種の問題も些細なことになります。

Python の基本的なコンテナ データ型の 2 つはlistdictです。

リストを使用する:

>>> name_list = ['rock', 'paper', 'scissors', 'lizard', 'spock']
>>> name_list.index('spock')
4

リストのインデックスは 0 から始まります。

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

>>>
于 2013-04-27T02:45:52.543 に答える