Я хочу добавить два элемента списка в словарь - PullRequest
0 голосов
/ 07 августа 2020

Я пишу код для составителя расписания. Этот код учитывает предметы, которые вы хотите изучать, и предпочтения в обучении (утро, день, вечер). Затем я беру на изучение общее количество часов (20 часов) в неделю. Затем я делю это на 7, чтобы рассчитать учебу в день. Затем я хочу назначить случайную тему моему случайному временному интервалу.

# Time Table Creator
import random
def TimeTableCreator(subjects,day,time_slots,total_hours):
    day = {}
    studyperday = total_hours/7
    studyperday = round(studyperday)

    subjects_study = random.sample(subjects,k=studyperday) # subjects that are selected randomly
    final_time_slots = random.sample(time_slots,k=studyperday) # list of my time slots
#trying to add both these items using for loop in a dictionary
    for subject in subjects_study:
        for i in range(studyperday):
         day[subject] = final_time_slots[i]

    print(day)
subjects = []
while True:
    subject = input("Enter a subject:\n")
    if subject=="":
        break
    subjects.append(subject)
    total_hours = 20


print("What is your preference of studying: Morning or afternoon or evening:")
time_preference = input()
if time_preference.lower()=="morning":
    time_slots = ["7:00-8:00","8:00-9:00","9:00-10:00","10:00-11:00","2:00-3:00"]
elif time_preference.lower()=="afternoon":
    time_slots = ["12:00-13:00","13:00-14:00","15:00-16:00","16:00-17:00","18:00-19:00"]
elif time_preference.lower()=="evening":
    time_slots = ["16:00-17:00","18:00-19:00","19:00-20:00","20:00-21:00","21:00-22:00"]
else:
    print("Invalid preference")
TimeTableCreator(subjects,"Monday",time_slots,total_hours)

Программный вывод

Enter a subject:
phy
Enter a subject:
chem
Enter a subject:
bio
Enter a subject:

What is your preference of studying: Morning or afternoon or evening:
morning
**{'chem': '2:00-3:00', 'phy': '2:00-3:00', 'bio': '2:00-3:00'}**

Process finished with exit code 0

Как вы можете видеть, временной интервал совпадает с назначенным на разные темы. Но я хочу, чтобы временные интервалы были разными для каждого предмета. Я хочу, чтобы временные интервалы были разными для каждого предмета. Он показывает от 2:00 до 3:00 по каждому предмету. Но я хочу, чтобы разным предметам были выделены разные слоты Помогите, пожалуйста.

Ответы [ 3 ]

1 голос
/ 07 августа 2020

Проблема в вашем коде - создание словаря. Вам не нужен вложенный l oop. Вы можете использовать zip ()

Просто измените это на

for subject in subjects_study:
        for i in range(studyperday):
         day[subject] = final_time_slots[i]

this

for x, y in zip(subjects_study, final_time_slots):
    day[x] = y

Однострочное решение:

day = dict(zip(subjects_study, final_time_slots))
0 голосов
/ 07 августа 2020
# Time Table Creator
import random
def TimeTableCreator(subjects,day,time_slots,total_hours):
    day = {}
    studyperday = round(total_hours/7)

    subjects_study = random.sample(subjects,k=studyperday) # subjects that are selected randomly
    final_time_slots = random.sample(time_slots,k=studyperday) # list of my time slots
#trying to add both these items using for loop in a dictionary
    i = 0
    for subject in subjects_study:
         day[subject] = final_time_slots[i]
         i += 1

    print(day)

Вы использовали вложенный для l oop, который присваивал каждому значению subject из каждого final_total_hours и, следовательно, получал такое же случайное значение (последнее). Это требовало только сингла для l oop, как указано выше.

0 голосов
/ 07 августа 2020

Вы выполняете цикл с использованием вложенных циклов, поэтому просматриваете все значения i для каждого предмета и в итоге получаете значение для последнего значения i для всех предметов:

    for subject in subjects_study:
        for i in range(studyperday):
         day[subject] = final_time_slots[i]

вы хотите l oop вместе, используя enumerate:

    for i, subject in enumerate(subjects_study):
        day[subject] = final_time_slots[i]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...