2013-04-04 41 views
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 我意識到,9號線實際上只是改變了列表條目爲「採取」,而不是改變「戰士「變量的條目引入」採取「。有沒有辦法做到這一點?Python中如何更改在列表中引用的變量

原諒WoW引用。

+0

字符串是不可改變的。 – 2013-04-04 12:11:33

回答

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

你不能用你目前的技術來做到這一點。我建議在Martijn Pieters的回答中使用這項技術。

只是爲了擴大一點點,爲什麼你不能:

你的變量都是string對象,這是不可改變的(如彼得·伍德指出)。不可變的手段不能改變 - 當你改變變量時,你正在創建一個新的對象。如果你是做一個可變類型一樣的東西,那麼這將是可能的

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

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)

0

我會帶兩套,untakentaken,因爲這似乎是順序無關緊要的事情。

所以,你會選擇成員與集之間有什麼東西在動他們像

import random 
taken = set() 
untaken = set(['Mage','Warlock','Warrior','Paladin']) 
chosen = random.sample(untaken,1) 
taken.add(chosen) 
untaken.remove(chosen)