1
import random
warrior = 'Warrior'
mage = 'Mage'
warlock = 'Warlock'
paladin = 'Paladin'
firstList = [warrior, mage, warlock, paladin]
print(firstList[0], firstList[1], firstList[2], firstList[3])
firstNumber = random.randint(0, 3)
firstList[firstNumber] = '*taken*'
print(firstList[0], firstList[1], firstList[2], firstList[3])
secondList = [paladin, warlock, mage, warrior]
print(secondList[0], secondList[1], secondList[2], secondList[3])

乱数が 0 を選ぶとしましょう。エントリが参照する 'warrior' 変数を "taked" に変更するのではなく、9 行目で実際にはリスト エントリを "taked" に変更するだけであることに気付きました。それを行う方法はありますか?

すごい参照を許してください。

4

4 に答える 4

1

現在の技術を使用してこれを行うことはできません。Martijn Pieters の回答のテクニックを使用することをお勧めします。

できない理由を少し拡大するだけです:

あなたの変数はすべてstring不変のオブジェクトです(Peter Woodが指摘したように)。不変の手段は変更できません。変数を変更すると、新しいオブジェクトが作成されます。可変型で同じことをしている場合、これは可能です

>>> list_1 = []
>>> list_2 = []
>>> main_list = [list_1, list_2]
>>> main_list[1].append(5)
>>> print(list_2)
[5]

可変性の詳細については、以下を参照してください:
不変型と可変型
Python で不変なのはどれですか?
http://stsdas.stsci.edu/pyraf/python_quick_tour.html#PyMutability

于 2013-04-04T12:30:15.007 に答える
0

これは順序が関係ないように見えるので、2 つのセットと を使用しuntakenます。taken

したがって、メンバーを選択し、次のような方法でセット間で移動します

import random
taken = set()
untaken = set(['Mage','Warlock','Warrior','Paladin'])
chosen = random.sample(untaken,1)
taken.add(chosen)
untaken.remove(chosen)
于 2013-04-04T13:13:26.907 に答える
0

オブジェクト指向のアプローチを使用しないのはなぜですか?

from random import choice

class Character(object):
    def __init__(self, name, taken=False):
        self.name = name
        self.taken = taken
    def get_taken(self):
        self.taken = True
    def __repr__(self):
        return self.taken and '{} (taken)'.format(self.name) or self.name


class Team(list):
    def take_someone(self, number=None):
        if number is None:
            choice(self).get_taken()
        else:
            self[number].get_taken()


myTeam = Team([Character("Warrior"),
               Character("Mage"),
               Character("Warlock")])
print myTeam

【ウォリアー、メイジ、ウォーロック】

myTeam.take_someone()

print myTeam

[ウォリアー、メイジ、ウォーロック(テイク)]

文字を " taken"として初期化することもできます。また、 を使用してmyTeamオブジェクトにランダムな文字を選択させることもmyTeam.take_someone()、インデックスで文字を取得することもできます。例えばmyTeam.take_someone(0)

于 2013-04-04T12:33:38.897 に答える