我想在字典中添加我的两个列表项

2024-04-26 20:32:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一个时刻表生成器编写代码。此代码接受您想要学习的科目和学习偏好(上午、下午、晚上)。然后我每周学习的总小时数(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。但我希望为不同的科目分配不同的时段 请帮忙


Tags: oroftimerandomtotalsubjectenter时间段
3条回答
# 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)

您使用了一个嵌套的for循环,它为每个最终的总小时分配了每个主题的值,因此它以相同的随机值(最后一个)结束。 这只需要一个如上所述的for循环

您正在使用嵌套循环进行循环,因此将遍历每个主题的所有i值,并以所有主题的最后一个i值结束:

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

您想要的是使用enumerate循环在一起:

    for i, subject in enumerate(subjects_study):
        day[subject] = final_time_slots[i]

代码中的问题是字典创建。您不需要嵌套循环。您可以使用zip()

把这个换成

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

这个

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

一套解决方案:

day = dict(zip(subjects_study, final_time_slots))

相关问题 更多 >