Я пишу более широкий алгоритм, чем это, но я думаю, что эта проблема является причиной того, что она не работает.Проблемы с списком python
Здесь хлопотно фрагмент кода ..
difcheck = []
count = 1
questionsneeded = 4
required_dif = ["Easy", "Hard", "Medium", "Easy"]
required_topics = ["Graphs", "Math", "Geometry", "Fun"]
availablelist = [("Graphs", "Easy"), ("Fun", "aasd"), ("Geometry", "Medium"), ("Math", "Easy")]
z = 0
answerlist = []
while z < questionsneeded:
difs = required_dif
topics = required_topics
for x in range(len(availablelist)):
if availablelist[x][0] in required_topics and availablelist[x][1] in required_dif :
difcheck.append(availablelist[x])
try:
required_dif.remove(availablelist[x][0])
required_topics.remove(availablelist[x][1])
except ValueError as exception:
continue
availablelist.append(availablelist[0])
answerlist.append(len(difcheck))
del availablelist[0]
print("availablelist ")
print(availablelist)
print("difcheck ")
print(difcheck)
z = z + 1
del availablelist[0]
del difcheck[:]
код просматривает кортежей в availablelist и сравнивает кортеж элемент 0 с каждым элементом в required_dif и кортеж элемента 1 с каждым элементом в required_topics.
Если оба они найдены в обоих списках, то кортеж будет добавлен в diffcheck.
Он повторяет это до тех пор, пока z = questionsneeded, кортежи в доступном списке ДОЛЖНЫ перетасоваться каждый раз.
Выход я получаю
availablelist
[('Fun', 'aasd'), ('Geometry', 'Medium'), ('Math', 'Easy'), ('Graphs', 'Easy')]
difcheck
[('Graphs', 'Easy'), ('Geometry', 'Medium'), ('Math', 'Easy')]
availablelist
[('Math', 'Easy'), ('Graphs', 'Easy'), ('Geometry', 'Medium')]
difcheck
[('Geometry', 'Medium'), ('Math', 'Easy'), ('Graphs', 'Easy')]
availablelist
[('Geometry', 'Medium'), ('Graphs', 'Easy')]
difcheck
[('Graphs', 'Easy'), ('Geometry', 'Medium')]
availablelist
[('Graphs', 'Easy')]
difcheck
[('Graphs', 'Easy')]
Выход я хочу
availablelist
[("Graphs", "Easy"), ("Fun", "aasd"), ("Geometry", "Medium"), ("Math", "Easy")]
difcheck
[("Graphs", "Easy"), ("Fun", "aasd"), ("Geometry", "Medium"), ("Math", "Easy")]
availablelist
[("Fun", "aasd"), ("Geometry", "Medium"), ("Math", "Easy"), ("Graphs", "Easy")]
difcheck
[("Fun", "aasd"), ("Geometry", "Medium"), ("Math", "Easy"), ("Graphs", "Easy")]
availablelist
[("Geometry", "Medium"), ("Math", "Easy"), ("Graphs", "Easy"), ("Fun", "aasd")]
difcheck
[("Geometry", "Medium"), ("Math", "Easy"), ("Graphs", "Easy"), ("Fun", "aasd")]
availablelist
[("Math", "Easy"), ("Graphs", "Easy"), ("Fun", "aasd"), ("Geometry", "Medium")]
difcheck
[("Math", "Easy"), ("Graphs", "Easy"), ("Fun", "aasd"), ("Geometry", "Medium")]
В случае, когда элемент в required_topics или required_dif не в кортеже в availablelist, это не было бы добавлен в diffcheck. В этом случае у нас есть идеальное соответствие, поэтому все добавлено.
Проблема, вероятно, очень очевидна, но я все туман и не могу ее видеть.
использовать 'print()' для отображения переменных и посмотреть, что происходит в программе (шаг за шагом) или узнать, как использовать debuger. – furas
также, отступ недействителен для цикла while, показанного здесь – Sundeep
У вас неправильные индексы при удалении элементов - вы пытаетесь удалить 'topic' из списка' required_dif' и 'dif' из' required_topics'. Используйте 'print()' с исключением - вы можете иметь ошибку, и вы не знаете, почему программа не делает то, что вы ожидаете. – furas