#python #list #indexing
Вопрос:
Моя текущая проблема заключается в том, что я хочу искать элементы в списке, но только по количеству элементов в указанном списке
drumsound = ["0"] def AddSnare(): drumsound.append("1") print(drumsound) def AddTom(): drumsound.append("2") print(drumsound) def beat(): a = 1 for x in drumsound: if drumsound[a] == "1": mixer.music.load("soundfiles/snare.mp3") mixer.music.set_volume(1) mixer.music.play() a = 1 elif drumsound[a] == "2": mixer.music.load("soundfiles/tom.mp3") mixer.music.set_volume(1) mixer.music.play() a = 1
Моя проблема в том, могу ли я использовать в этой строке if drumsound[a] == "1":
[a]
переменную или способ, которым я могу сделать что-то более простое
Комментарии:
1. Во-первых,
drumsound[a]
здесь это излишне.x
ужеdrumsound[a]
этогоx == "1"
было бы достаточно.2. Если я правильно понял ваш вопрос, просто проверьте
x
вместоdrumsound[a]
.
Ответ №1:
Вы можете упростить это, имея несколько list
функциональных объектов, а не какое-то магическое число ( "1"
, "2"
), связанное со звуком.
В python функции являются объектами первого класса, поэтому вы можете передавать их, назначать переменным, добавлять в list
s и т. Д., И на самом деле они ничего не будут делать, пока вы не используете круглые скобки ()
для их вызова.
Это позволяет вам делать что-то подобное:
def play_snare(mixer): mixer.music.load("soundfiles/snare.mp3") mixer.music.set_volume(1) mixer.music.play() def play_tom(mixer): mixer.music.load("soundfiles/tom.mp3") mixer.music.set_volume(1) mixer.music.play() def beat(drumsounds, mixer): # here func will be play_snare, play_tom, and play_snare # because of the list defined below for func in drumsounds: func(mixer) drumsounds = [] drumsounds.append(play_snare) drumsounds.append(play_tom) drumsounds.append(play_snare) beat(drumsounds, mixer)
Когда вы повторяете a list
, python делает вам одолжение и распаковывает то list
, что вы повторяете.
Так:
a = 0 for x in drumsound: print(drumsound[a]) a = 1
делает то же самое, что и это:
for x in drumsound: print(x)