0

私が望むこと: リスト q が 3 回だけ表示されるようにします。表示されると、リスト項目の 1 つを選択するよう求められます。例を選択するたびに、それを非表示にして再度選択できないようにしたいのですが、それを選択するためのオプションも表示したくありません。そのため、例 1 を選択すると、使用可能な例 2 と 3 のリストが表示されます。次に、例 3 が次に選択されたとします。その後、例 2 のみが使用可能なリストが表示されます。代わりに、1 が以前に削除されていても、1 と 2 の両方が使用可能で表示されます。

したがって、問題は、アイテムが削除時にリストから完全に削除されず、次の印刷中に戻ってくることです。これは望ましくありません。

for x in range(0,3):
    q = ['example 1', 'example 2', 'example 3']
    select = raw_input("> ")
    if select == "1":
        del q[0]
        print q
    if select == "2":
        del q[1]
        print q
    if select == "3":
        del q[2]
        print q

Python でリストから物を削除することについて多くの質問があるようですが、私は何日も答えを探していましたが、私の特定の状況でうまくいくものはまだ見つかりませんでした. ばかげたことを事前に申し訳ありませんが、私はプログラミングを学んでまだ 1 か月しか経っていません。

4

3 に答える 3

7

現在のコードがそのように動作する理由は、リスト 'q' が毎回初期化されるためです。次に、リストを削除する方法も間違っています。

コピー/削除のセマンティクスは、Python のディープ コピーの概念を参照していますが、ここでは適用されません。

Python で辞書型を使用したい。

def Foo():
    q = {1:'example 1', 2:'example 2', 3:'example 3'};
    for x in range(0,3):
        select = raw_input("> ")
        if select == "1":
            del q[1]
            print q
        if select == "2":
            del q[2]
            print q
        if select == "3":
            del q[3]
            print q

もっと簡潔に

def foo():
    q = {1:'example 1', 2:'example 2', 3:'example 3'};
    for x in range(0,3):
        select = raw_input("> ")
        del q[int(select)]
        print q
于 2013-02-22T03:05:43.093 に答える
0

ここで del を使用している理由はありますか? これは、オブジェクトを明示的に削除することを心配するには小さすぎるケースのようです。リストからそれらを削除するだけです。

q = ['example 1', 'example 2', 'example 3']
while len(q)>0:
    try:
        select = int(raw_input("> "))
        print q.pop(select-1)
    except (ValueError, IndexError):
        print 'please enter an integer between 1 and 3'
于 2013-02-22T06:19:24.493 に答える
0

これを試して:

def menu():
    q = {1: 'example 1', 2: 'example 2', 3: 'example 3'}
    for _ in range(3):
        print '\n'.join('{} - {}'.format(*item) for item in sorted(q.items()))
        try:
            print q.pop(int(raw_input('> ')), "That's not a valid option")
        except ValueError:
            print "That's not a valid option"
    print "No more menu options left!"
于 2013-02-22T04:23:15.063 に答える