Не могу * скопировать * индекс из списка в другой с изюминкой в ​​Python - PullRequest
1 голос
/ 11 октября 2010

Я довольно новичок в python и пытаюсь ухватиться за веревки, и решил, что интересный способ научиться - сделать игру типа MUD.Моя цель для фрагмента кода, который я собираюсь показать, состоит в том, чтобы три случайно выбранных врага (из списка) были представлены для «героя», чтобы сражаться.Проблема, с которой я сталкиваюсь, заключается в том, что python копирует из списка в список по ссылке, а не по значению (я думаю), из-за кода, показанного ниже ...

import random

#ene = [HP,MAXHP,loDMG,hiDMG]   
enemies = [[8,8,1,5,"Ene1"],[9,9,3,6,"Ene2"],[15,15,2,8,"Ene3"]]
genENE = []  

#skews # of ene's to be gen, favoring 1,2, and 3 
eneAppears = 3

for i in range(0,eneAppears):
    num = random.randint(5,5)
    if num <= 5:
        genENE.insert(i,enemies[0])
    elif num >= 6 and num <=8:
        genENE.insert(i,enemies[1])
    else:
        genENE.insert(i,enemies[2])

#genENE = [[8,8,1,5,"Ene1"],[9,9,3,6,"Ene2"],[15,15,2,8,"Ene3"]]          
for i in range(0,eneAppears):
    if eneAppears == 1:
        print "A " + genENE[0][4] + " appears!"
    else:
        while i < eneAppears:
            print "A " + genENE[i][4] + " appears!"
            i = eneAppears

genENE[1][0] = genENE[1][0] - 1
print genENE

В основном у меня есть "мастер"список врагов, которые я использую, чтобы скопировать того, кого я хочу, в индекс другого списка во время моего первого цикла «for».Обычно случайно сгенерированные числа от 1 до 10, но проблема, с которой я сталкиваюсь, легче показать, заставив одного и того же врага быть вставленным в мой список «копирования» несколько раз.В основном, когда я пытаюсь вычесть значение врага с тем же именем из моего списка «копирования», они все вычитают это значение (см. Последние две строки кода).Я провел большой поиск и не могу найти способ скопировать только один индекс из одного списка в другой.Какие-либо предложения?Спасибо!

Ответы [ 2 ]

1 голос
/ 11 октября 2010

Изменение

genENE.insert(i,enemies[0])

до

genENE.insert(i,enemies[0][:])

Это заставит копировать список, а не ссылаться на него. Кроме того, я бы использовал добавление, а не вставку в этом случае.

0 голосов
/ 11 октября 2010

they all subtract that value Что вы имеете в виду, они все?Если вы имеете в виду оба списка, проблема в том, что вы ссылаетесь только на список, а НЕ создаете второй.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...