0

私はPythonにはかなり慣れていませんが、プログラミングには問題ありません(ただし、約5年間何もしていません)。

私は検索しましたが、私の問題に答えるものが見つかりません:

リストを検索する 2 つの値を取る一般的な関数を作成しようとしています。2 つの値は明らかにリスト名であり、そのリストで検索する文字列です。

list0 = ["name","date","cat","dog"]
list1 = ["house","chair","table"]
list2 = ["tv","dvd","computer","mouse"]

usersearchlist = raw_input("Enter list name: ")
usersearchitem = raw_input("Enter item to search for: ")

def searchmemory(usersearchlist,usersearchitem):
  return usersearchlist.index(usersearchitem)

次に、関数を呼び出します。

print "I found", searchmemory(usersearchlist,usersearchitem)

関数呼び出しが関数に渡されたリテラル文字列を取得し、その中に含まれる値を参照していないため、「ValueError: substring not found」が表示されます。

それが理にかなっていることを願っています、私は何か完全に間違っていますか?

4

2 に答える 2

0

試す

lists = {"list0" : ["name","date","cat","dog"],
    "list1" : ["house","chair","table"],
    "list2" : ["tv","dvd","computer","mouse"]}

usersearchlist = raw_input("Enter list name: ")
usersearchitem = raw_input("Enter item to search for: ")

def searchmemory(usersearchlist, usersearchitem):
    if (usersearchlist in lists and usersearchitem in lists[usersearchlist]):
        return lists[usersearchlist].index(usersearchitem)
    else:
        return -1

これにより、すべてのリストが辞書に保存され、最初に値が存在するかどうかがチェックされるため、ValueError が発生することはありません。

于 2013-02-23T21:49:38.567 に答える
0

@SimplyKiwi の回答に似た辞書にリストを入れたいと思います。


または、次の方法でも実現できますglobals()

print "I found", searchmemory(globals().get(usersearchlist, []), usersearchitem)

ただし、この場合、ユーザーにすべてのグローバル変数へのアクセスを暗黙的に許可していることに注意してください。ほとんどのシナリオでは、これはユーザーに実行してほしくないことです。

于 2013-02-23T21:58:06.183 に答える