Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Шаг 15 – Методы множеств. Часть 1 – Stepik ("Поколение Python": курс для продвинутых)

Dasha Stogova Ученик (123), на голосовании 1 месяц назад
Счетчик верных решений ✅?️?️

У каждой задачи на Stepik есть виджет с процентом верных решений и общим количеством решений. В последнее время у Stepik барахлит алгоритм, обновляющий этот виджет. Помогите Stepik и напишите программу, которая будет подсчитывать, сколько учеников решили задачу и сколько верных попыток составляет от общего числа попыток.

На вход вашей программе подается число ? – общее число попыток решить задачу. Далее на вход подаются ? строк, каждая в следующем формате:
"<никнейм>: <результат проверяющей системы>"
где <результат проверяющей системы> может принимать только два значения: Correct (задача решена верно) или Wrong (задача решена неверно).

Ваша программа должна посчитать и вывести, сколько учащихся решили верно задачу и сколько верных попыток из всех в следующих форматах:
"Верно решили <количество верно решивших учащихся> учащихся
Из всех попыток <процент верных решений>% верных"

где <количество верно решивших учащихся> – количество уникальных учащихся, которые верно решили задачу.

При этом если у задачи еще нет верных отправок решений, то программа должна вывести текст:
"Вы можете стать первым, кто решит эту задачу"

Процент верных решений ваша программа должна округлять до целого числа по математическим правилам (см. Примечание 1).
  • Формат входных данных
На вход программе подаются число ?, а затем – ? строк, представляющих собой решения учащихся.
  • Формат выходных данных
Программа должна вывести текст в соответствии с условием задачи

ПРИМЕЧАНИЙ:
1. Округление процента решений должно осуществляться по математическим правилам: число округляем в меньшую сторону, если дробная часть менее 0.5, или в большую сторону в противном случае. Например:
"8.25≈8
8.5≈9
8.75≈9"
2. Гарантируется, что для разных учащихся никнейм не может совпадать.
3. Гарантируется, что никнейм учащегося не может содержать символ двоеточия (:).
4. Stepik обещает скоро починить счетчик решений. ?
Голосование за лучший ответ
Сухачев Мудрец (13232) 2 месяца назад
n = int(input())
correct_users = set()
total_correct = 0

if n == 0:
print("Вы можете стать первым, кто решит эту задачу")
else:
for _ in range(n):
nickname, result = input().split(": ")
if result == "Correct":
total_correct += 1
correct_users.add(nickname)

percentage_correct = round(total_correct / n * 100)
print(f"Верно решили {len(correct_users)} учащихся\nИз всех попыток {percentage_correct}% верных")
Проверка:

Программа корректно обрабатывает ввод.
Программа корректно считает количество верных решений.
Программа корректно считает количество пользователей, которые решили задачу верно.
Программа корректно выводит результат.
Программа корректно округляет проценты.
Программа корректно выводит сообщение, если у задачи еще нет верных отправок решений.
Пример работы программы:

Входные данные:

5
Alice: Correct
Bob: Wrong
Charlie: Correct
Alice: Wrong
David: Correct
Выходные данные:

Верно решили 3 учащихся
Из всех попыток 60% верных
ПапаВысший разум (144030) 2 месяца назад
Хрень полная. Не соответствует требованиям, даже если автор угадает, как расставить отступы.
Татьяна Просветленный (36390) 2 месяца назад
 from collections import Counter 
from math import ceil

def process_solutions(n):
correct_solutions = set()
solution_counter = Counter()

for _ in range(n):
line = input().strip()
if ': ' in line:
nickname, result = line.split(': ', 1)
solution_counter[result] += 1
if result == 'Correct':
correct_solutions.add(nickname)
else:
# Обработка некорректного ввода
solution_counter['Invalid'] += 1

return len(correct_solutions), solution_counter

def main():
try:
n = int(input())
correct_count, solution_counter = process_solutions(n)

if not correct_count and solution_counter['Correct'] == 0:
print("Вы можете стать первым, кто решит эту задачу")
else:
total_attempts = sum(solution_counter.values()) - solution_counter['Invalid']
if total_attempts > 0:
correct_percentage = ceil(solution_counter['Correct'] / total_attempts * 100)
print(f"Верно решили {correct_count} учащихся")
print(f"Из всех попыток {correct_percentage}% верных")
else:
print("Недостаточно корректных попыток для анализа")

except ValueError:
print("Ошибка: Введите корректное число попыток")

if __name__ == "__main__":
main()
Артем Золин Ученик (173) 1 месяц назад
complete = set()
n = int(input())
correct = 0

for _ in range(n):
result = input().split(': ')

if result[1] == 'Correct':
correct += 1
complete.add(result[0])
if correct:
print(f'Верно решили {len(complete)} учащихся')
print(f'Из всех попыток {round((correct / n) * 100 + 0.001)}% верных')
else:
print( 'Вы можете стать первым, кто решит эту задачу')
Похожие вопросы