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 我意识到第9行实际上只是将列表条目更改为“ take ”,而不是将条目引用的“warrior”变量更改为“ take ”。有没有办法做到这一点?
原谅魔兽世界的参考资料。
答案 0 :(得分:3)
您想要使用词典:
taken = {'warrior': False, 'mage': False, 'warlock': False, 'paladin': False}
names = {'warrior': 'Warrior', 'mage': 'Mage', 'warlock': 'Warlock', 'paladin': 'Paladin'}
或:
taken = dict.fromkeys(('warrior', 'mage', 'warlock', 'paladin'), False)
names = {character: character.capitalize() for character in taken}
然后选择一个随机字符:
from random import choice
picked = choice(list(names.keys()))
taken[picked] = True
print('Picked:', names[picked])
你真的不想使用单独的本地标识符来表示一组字符,这只会使问题复杂化。
答案 1 :(得分: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]
有关可变性的更多信息,请参阅:
Immutable vs Mutable types
Which of these are immutable in Python?
http://stsdas.stsci.edu/pyraf/python_quick_tour.html#PyMutability
答案 2 :(得分: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)
。
答案 3 :(得分:0)
我选择了两套untaken
和taken
,因为这似乎是订单无关紧要的事情。
所以你要选择成员并在集合之间移动它们,比如
import random
taken = set()
untaken = set(['Mage','Warlock','Warrior','Paladin'])
chosen = random.sample(untaken,1)
taken.add(chosen)
untaken.remove(chosen)