Loading...
IrenaRy avatar IrenaRy 5 Точки

Train the Trainers (Nested Loops excercise) - помощ за кода

Здравейте, опитах да реша задачата, и на конзолата тръгва добре в началото... подавам брой членове на жури, подавам презентация, после подавам оценки и смята дотук добре. Когато обаче опитам да подам следващото име на презентация, подам следващите оценки очаква с едно подаване повече. На конзолата например нещата изглеждат така:

2
while
6.00
5.50
while -  5.75
for
5.84
5.66
5.00
5.84 -  5.33
nested
4.00
3.00
2.00
4.00 -  2.50

Престава да приема имената на презентациите след първия път, а приема първото число за име и после намира средното от следващите числа.

Ето го кода. Не се тревожете за форматирането и смятането сега надолу, но ще съм много благодарна, ако някой обясни горния проблем. Благодаря

jury_numbers = int( input() )
sum_grades = 0
total_grades = 0
presentation_counter = 0

while True:
    name_presentation = input()
    presentation_counter += 1
    for i in range(jury_numbers):
        grade = float(input())
        sum_grades += grade
        average_grade_per_presentation = sum_grades / jury_numbers
        total_grades += average_grade_per_presentation
    print( f'{name_presentation} - {average_grade_per_presentation: .2f}' )
    sum_grades = 0

    name_presentation = input()
    if name_presentation == 'Finish':
        print(f"Student's final assessment is {total_grades/presentation_counter: .2f}")

 

Тагове:
0
Chyna avatar Chyna 6 Точки

Здравей :) Първото нещо, което виждам в кода е дублиране на name_presentation в While цикъла , затова очаква да подадеш още нещо. Единият вариант е да махнеш name_presentation input , който се намира след sum_grades = 0. В този случай обаче ще трябва да преместиш проверката за Finish да стои веднага след name_presentation, за да не влезе във For цикъла и там да ти иска да въведеш оценки.

while True:
    name_presentation = input()
    if name_presentation == 'Finish':
        print(f"Student's final assessment is {total_grades/presentation_counter: .2f}")

               break

Липсва ти и брейк от безкрайния цикъл. Другият вариант е да прочетеш name_presentation преди While цикъла и да оставиш този в края на цикъла:

name_presentation = input()
while True:
    presentation_counter += 1
    for i in range(jury_numbers):
        grade = float(input())
        sum_grades += grade
        average_grade_per_presentation = sum_grades / jury_numbers
        total_grades += average_grade_per_presentation
    print( f'{name_presentation} - {average_grade_per_presentation: .2f}' )
    sum_grades = 0

    name_presentation = input()
    if name_presentation == 'Finish':
        print(f"Student's final assessment is {total_grades/presentation_counter: .2f}")

                break

Total_grades не ти ги смята правилно. Ако искаш , мога да ти пусна моето решение за идеи :) Моят е подобен , но while-ът ми е до получаване на Finish,  и така избягвам проверка дали е подадена команда Finish, а директно си притня след цикъла.

0
27/10/2019 11:26:26
IrenaRy avatar IrenaRy 5 Точки

Мерси много :) надолу мисля, че ще го оправя, това ме объркваше с подаването...

Може да пуснеш решението иначе, да. То по условие е "цикъл while, докато е различен от Finish", но понеже пак имах същия проблем, започнах да експериментирам... все пак по-добре да попитам преди да се оплета съвсем. Мерси пак

0
Chyna avatar Chyna 6 Точки

Радвам, че успях да помогна. :) Успех на изпита.

0
IrenaRy avatar IrenaRy 5 Точки

Оправена и даваща 100 точки в Джъдж: https://pastebin.com/ET04P7FE

0
NKKalev avatar NKKalev 10 Точки

Ето и малко по-различно решение.

 

jury_count = int(input())
command = input()
total_average = 0
presentations_count = 0

while command != 'Finish':

    presentations_count += 1
    current_assessment_sum = 0

    for person in range(jury_count):
        current_assessment = float(input())
        current_assessment_sum += current_assessment

    current_average = current_assessment_sum / jury_count

    print(f'{command} - {current_average:.2f}.')

    total_average += current_average

    command = input()

average_assessment = total_average / presentations_count

print(f"Student's final assessment is {average_assessment:.2f}.")

 

Поздрави :)

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.