Я не знаю, что не так с моим кодом (только что начал python) - PullRequest
0 голосов
/ 17 апреля 2020

Я составил список, используя список while, а затем использовал операторы if. В первых двух условиях код работает без ошибок. Но в третьем условии это показывает, что список пуст. Понятия не имею, что здесь не так.

КОД:

# time table generator with python

import random
no_of_classes = int(input("Please enter the number of classes in a day: "))
name_of_classes = input("Please enter the subject name/name of classes (please separate then by commas): ")
class_name_list = name_of_classes.split(",")
days_in_week = int(input("Enter the number of days in a week for which the school is working:"))
list_1 = [] `list with the problem`
x = 1
while x <= no_of_classes:
    list_1.append(x)
    x += 1

final_list = []
for j in range(days_in_week):
    subject_list = []
    if no_of_classes > len(class_name_list):
        for i in class_name_list:
            a = random.choice(list_1)
            subject_list.insert((a - 1), i)
        for m in range(no_of_classes - len(class_name_list)):
            b = random.choice(class_name_list)
            subject_list.append(b)
        final_list.append(subject_list)

    elif no_of_classes == len(class_name_list):
        for i in class_name_list:
            a = random.choice(list_1)
            subject_list.insert((a-1), i)
        final_list.append(subject_list)

    else:   `having problem with this condition`
        temp_class_list = []
        list_2 = class_name_list
        for m in range(no_of_classes):
            n = random.choice(list_2)
            a = random.choice(list_1)
            list_1.remove(a)
            list_2.remove(n)
            subject_list.insert((a-1), n)

for k in range(days_in_week):
    print(final_list[k])

ВЫХОД:

Traceback (most recent call last):
  File "/Users/arungupta/Documents/trial (delete).py", line 24, in <module>
    a = random.choice(list_1)
  File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/random.py", line 301, in choice
    raise IndexError('Cannot choose from an empty sequence') from None
IndexError: Cannot choose from an empty sequence

СПАСИБО ЗА ПОМОЩЬ. МНОГО ЦЕНЫ !!!

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

На самом деле есть две проблемы:

  • Вы забыли final_list.append(subject_list), как заметил Кастиэль
  • Вы очистили list_1, что делает вашу программу cra sh в следующем итерация (и фактически, сообщение об ошибке, которое вы показали, происходит из-за этого)

Вот мое предлагаемое исправление: сделайте копию list_1, прежде чем ее очистить:

    else:
        temp_class_list = []
        list_2_copy = class_name_list.copy()
        list_1_copy = list_1.copy()
        for m in range(no_of_classes):
            n = random.choice(list_2_copy)
            a = random.choice(list_1_copy)
            list_1_copy.remove(a)
            list_2_copy.remove(n)
            subject_list.insert((a-1), n)
        final_list.append(subject_list)

(Я также сделал копию class_name_list, потому что я подозреваю, что это источник еще одной неизвестной ошибки)

0 голосов
/ 17 апреля 2020

Вы просто забыли заполнить final_list: final_list.append (subject_list)

else:   
    temp_class_list = []
    list_2 = class_name_list
    for m in range(no_of_classes):
        n = random.choice(list_2)
        a = random.choice(list_1)
        list_1.remove(a)
        list_2.remove(n)
        subject_list.insert((a-1), n)
        final_list.append(subject_list)
...