Python: использование кода для написания кода - для начинающих

Проблема, с которой я сталкиваюсь сейчас, заключается в загрузке нескольких звуковых файлов в виде собственных объектов в Pygame. Вы загружаете звук с этим синтаксисом:

sound1 = pygame.mixer.Sound('file.wav')

Скажем, у меня есть семь файлов, и я хочу, чтобы они были загружены и названы sound1 - sound7. И я не хотел загружать их по отдельности. Если бы я не знал, что это ошибка, я бы попробовал что-то вроде этого:

for i in range(1, 8):
    new = 'sound' + str(i)
    new = pygame.mixer.Sound(str(new) + 'wav')

Как бы я сделал так, чтобы 'new' представлял собой собственную переменную, а не строку? Я читал о getattr, но это сбивает с толку. Мне бы очень хотелось узнать, как использовать функции и циклы для динамического создания кода, но пока я не могу найти ничего полезного для начинающего, такого как я. Используя это в качестве примера, кто-нибудь хотел бы объяснить простым способом способы создания кода внутри кода и превращения строк в используемые переменные / объекты?

Спасибо!

3 ответа

sounds = [] # list
for i in range(1, 8):
    sounds.append(pygame.mixer.Sound('sound' + str(i) + 'wav'))

Или же

sounds = {} # dictionary
for i in range(1, 8):
    sounds[i] = pygame.mixer.Sound('sound' + str(i) + 'wav')

Сначала кажется, что вы используете подход словаря так же, как подход списка, например, [звуки [1], звуки [2] и так далее, но вы также можете сделать это:

sounds = {} # dictionary
for i in range(1, 8):
    sounds['sound' + str(i)] = pygame.mixer.Sound('sound' + str(i) + 'wav')

А теперь звучит, например, "sound1" и так далее.

Вы можете использовать массивы для этого:

sound = []
for i in range(1,8):
    sound.append (pygame.mixer.Sound("sound%d.wav" % i))
# Now use sound[0..6] to reference sound[1..7].wav

Это загрузит файлы sound1.wav через sound8.wav - если ваши файлы имеют разные имена, вы просто меняете диапазон и / или форматирование строки.

В питоне есть два вида циклов: цикл for и цикл while. Цикл for используется для повторения чего-либо n раз. Цикл while используется для повторения, пока что-то не произойдет. Циклы for полезны для программирования игр, поскольку они часто обрабатывают кадры, которые отображает игра. Каждый кадр проходит один раз через цикл. Вы сохраняете цикл for с помощью списка. Вот пример базового цикла, с которым вы можете ознакомиться:

he_count = [1, 2, 3, 4, 5]
fruits = ['apples', 'oranges', 'pears', 'apricots']
change = [1, 'pennies', 2, 'dimes', 3, 'quarters']

# this first kind of for-loop goes through a list
for number in the_count:
    print "This is count %d" % number

# same as above
for fruit in fruits:
    print "A fruit of type: %s" % fruit

# also we can go through mixed lists too
# notice we have to use %r since we don't know what's in it
for i in change:
    print "I got %r" % i

# we can also build lists, first start with an empty one
elements = []

# then use the range function to do 0 to 5 counts
for i in range(0, 6):
    print "Adding %d to the list." % i
    # append is a function that lists understand
    elements.append(i)

# now we can print them out too
for i in elements:
    print "Element was: %d" % i

Вы можете узнать больше о циклах и программировании игр на python здесь: http://programarcadegames.com/index.php?lang=en&chapter=loops

Другие вопросы по тегам