Я пытаюсь закончить цикл while, если условие не выполняется.Завершение цикла while, если условие не встречается
Цель этого кода, чтобы получить максимальную отдачу от нескольких предметов, не превышая максимальные часы работы студента готов поставить в.
Я создал словарь под названием «субъекты», переводящий (значение, работа) со значением, насколько ценным является этот объект, и работать, как много работы необходимо для того, чтобы вставить этот предмет. Я добавляю значения предметов без перерыва в максимальных часах, которые студент готов вставить. Субъекты, которые имеют наибольший смысл, затем помещаются в другой словарь.
Вот код:
def greedyAdvisor(subjects, maxWork, comparator):
"""
Returns a dictionary mapping subject name to (value, work) which includes
subjects selected by the algorithm, such that the total work of subjects in
the dictionary is not greater than maxWork. The subjects are chosen using
a greedy algorithm. The subjects dictionary should not be mutated.
subjects: dictionary mapping subject name to (value, work)
maxWork: int >= 0
comparator: function taking two tuples and returning a bool
returns: dictionary mapping subject name to (value, work)
"""
bestVal = {}
tempVal = 0
high = 0
count = 0
tempDict = {}
tempWork = 0
currentBest = None
done = False
while done == False:
for k in range(len(subjects)+1):
for i in subjects:
for j in subjects:
if i not in bestVal:
sub1 = subjects[i][0]
sub2 = subjects[j][0]
work1 = subjects[i][1]
work2 = subjects[j][1]
if tempWork >= maxWork:
print('tempWork is', tempWork)
print('bestVal is', bestVal)
print('high is', high)
print('tempVal is', tempVal)
print()
return
print('sub1 is', sub1)
print('sub2 is', sub2)
print('work1 is', work1)
print('work2 is', work2)
maxVal = comparator(sub1, sub2)
print('count is', count)
count += 1
if maxVal == True:
print('sub1+tempVal is', sub1+tempVal)
print('tempVal is', tempVal)
print()
if work1 + tempWork > tempWork and tempWork + work1 <= maxWork:
high += tempVal+sub1
tempWork += work1
tempVal = sub1 +tempVal
print('sub1', sub1)
print('work1 is', work1)
print('tempWork is', tempWork)
print('tempVal is', tempVal)
print('tempWork is', tempWork)
bestVal[i] = subjects[i]
print('bestVal is', bestVal)
print()
else:
break
Цикла завершается, если maxWork соблюдено, которые у меня есть в коде уже. Проблема в том, что если maxWork не будет удовлетворен после прохождения всех предметов, он будет продолжать цикл навсегда. Мне нужно закончить цикл после того, как все элементы в словаре зациклились и условие не выполнено. Я предполагаю, что мне нужно выражение «if» здесь, но я просто не знаю, как его написать. «Если все испытуемые были протестированы и maxWork> tempWork: done = True»
Любая помощь очень ценится.
Благодаря
Вау, это именно то, что я искал. Благодарю. – CastorTroy
Я знаю, что это беспорядок, я просто застрял на этом, и я должен был просто знать, как это сделать, даже если мне это не нужно. Я собираюсь вернуться и убрать его. Я ценю помощь. – CastorTroy
извините, но это плохой патч. Цикл while абсолютно не нужен – joaquin