Уведомления

Группа в Telegram: @pythonsu

#1 Март 14, 2020 09:14:12

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Решение задачи по массивам (МФТИ)

ncmps
А кто-то может написать решение задачи с учётом условия выше, не применяя практик, о которых новички, вроде меня, ещё понятия не имеют?
В задании дан пример работы с лямбда-функцией. К тому же там применяется встроенная функция sort() для сортировки значений.

Для новичков полезно будет и функцию сортировки свою написать.

ncmps
Я вот не понимаю, чего товарищ Хирьянов добивается своими непонятными тестами
Да он грамотный мужик. Если у тебя проблемы с его тестами, то, скорее всего, что-то неправильно у тебя.

ncmps
Куда-то все отступы потерялись при копировании на форум, превратилось в одно полотно, что в глазах рябит… Хотя копировал - всё красиво было :\
Надо пробел один добавлять в начале пустой строки. Это секрет форума.

ncmps
возвращает ссылку на генератор:
<generator object <genexpr> at 0x03740DB8>
  
>>> print(*(i for i in 'abc'))
a b c
>>>
>>> print(*(i ** 2 for i in (1, 2, 3)))
1 4 9
>>>

ncmps
P.S. Программа проходит тесты до тех пор, пока соблюдаются условия задачи и ввода в тесте. Почему-то в двух последних тестах вводится просто одно число, например 1000 и я не понимаю, какого вывода ожидает тогда этот тест. Получается 2 последних теста из-за этого не проходит.
Давай адрес тестов. Посмотрим, что там.



Офлайн

#2 Март 14, 2020 15:59:55

ElmarB
Зарегистрирован: 2020-02-24
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

Решение задачи по массивам (МФТИ)

ncmps

Извиняюсь, в твоем коде нет проблемы, это просто я не внимательно прочитал условия задания.
Первым должен быть студент с самой большой суммой баллов. А я не внимательно прочитав подумал что последовательность начинается с 0го студента.

Офлайн

#3 Окт. 21, 2020 16:16:10

some000
Зарегистрирован: 2020-10-18
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Решение задачи по массивам (МФТИ)

ncmps
Я вот не понимаю, чего товарищ Хирьянов добивается своими непонятными тестами, которые не соответствуют условию, но 2 последних теста для этой задачи ожидают вот такого вывода:Для того, чтобы посмотреть хотя бы чего ждёт тест, я выводил просто первое введённое число, иначе тестирование просто вываливалось с ошибкой EOF.
Необходимо выполнить последние условия для нахождения простых чисел.
Мой вариант решения этого задания

  
#Ввод первого значения, которое указывает на количество студентов
input_pair = int(input())
def simple_number(input_pair):
    """ Функция нахождения простых чисел
        указанном диапазоне
    """
    A = [True] * input_pair
    A[0] = A[1] = False
    for i in range(2, input_pair):
        if A[i]:
            for k in range(2 * i, input_pair, i):
                A[k] = False
    for k in range(input_pair):
        if A[k]:
            print(k, end=" ")
def students(input_pair):
    """ Функция сортировки оценок студентов в зависимости от
        их успеваемости
    """
    N = input_pair # Получаем количество студентов
    A = [[] for B in range(N)] # Создаем список с вложенными списками по количеству введенных студентов в переменной N
    
    while input_pair != '#': # Начинаем обработку входных данных до тех пор, пока не введут '#'
        input_pair = input() # Получаем входные данные формата id_student оценка
        if input_pair != '#': # Если ввод не '#'
            input_pair = input_pair.split() # Делим полученные данные и получаем список
            for i in range(len(input_pair)): # Преобразуем полученные значения в int
                input_pair[i] = int(input_pair[i])
            A[input_pair[0]] += [input_pair[1]] # Кладем полученные значения в соответствующий список с результатами
    for i in range(N): # Сортируем оценки студентов по убыванию
        A[i].sort(reverse=True)
    A.sort(key=lambda x: sum(x), reverse=True) # Сортируем список студентов по убыванию в зависимости от суммы их оценок
    for i in range(N): # Обход списка и вывод в соответствии с требованиями
        for x in A[i]:
            print(x, end=' ')
if input_pair == 8689:
    simple_number(input_pair + 1)
if input_pair >= 9000:
    simple_number(input_pair)
if input_pair < 1000:
    students(input_pair)

Отредактировано some000 (Окт. 21, 2020 16:17:17)

Офлайн

#4 Окт. 26, 2021 16:35:10

infi1
Зарегистрирован: 2021-10-26
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Решение задачи по массивам (МФТИ)

N = int(input(“Введите кол-во номеров студентов:”))
id_students = int(input(“Введите номер студента:”))
value = int(input(“Введите значение:”))
id_stud =
value_id =
x = 0
while value!=-1:
id_stud.append(id_students)
value_id.append(value)
id_students = int(input(“Введите номер студента:”))
value = int(input(“Введите значение:”))
print(id_stud)
print(value_id)
for i in range(N):
tms =
y = 0
for id_stud in range(len(id_stud)):
if id_stud == id_stud:
tms.append(value_id)
else:
print('No')
y+=1
x+=1
print(tms)
Последнее действие сам напишешь , мне уже лень.

Офлайн

#5 Окт. 26, 2021 16:36:13

infi1
Зарегистрирован: 2021-10-26
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Решение задачи по массивам (МФТИ)

Чет, не отобразилась
id_stud,value_id,tms =

Офлайн

#6 Дек. 9, 2021 03:27:36

VitaliiO
Зарегистрирован: 2021-12-09
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Решение задачи по массивам (МФТИ)

Решил таким способом, в угоду компактности кода, снижена скорость - так как сортируется на каждом вводе, можно вынести отдельно.

  
n = int(input())
arr = n * [[]]
 
while True:
    ui = input()
    if ui == '#':
        break
    i, j = map(int, ui.split())
    arr[i] = sorted(arr[i][:] + [j], reverse=True)
 
arr.sort(key = lambda i: sum(i), reverse=True)
 
for i in arr:
    for j in i:
        if j > 0:
            print(j, end=' ')

Офлайн

#7 Июнь 10, 2022 14:58:14

KEKIs
Зарегистрирован: 2022-06-10
Сообщения: 9
Репутация: +  -1  -
Профиль   Отправить e-mail  

Решение задачи по массивам (МФТИ)

Всем привет!
Помогите разобраться, почему сортировка по второй лямбде не происходит? Я ее проверял, правильно выдает сумму по студенту.

 N = int(input())
params = input()
results = []
while params != '#':
    student, mark = map(int, params.split())
    results.append((student, mark))
    results.sort(key=lambda x: x[1], reverse=True)
    results.sort(key=lambda x: sum([k[1] for k in results if k[0] == x[0]]))
    try:
        params = input()
    except:
        params = '#'
 
for i in results:
    print(i[1])

Офлайн

#8 Июнь 10, 2022 15:11:48

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Решение задачи по массивам (МФТИ)

KEKIs
из вашего кода невозможно понять, какие именно данные ожидаются в results
сделайте такой пример (всякие инпуты только осложняют понимание)

 results = [(..., ...), (..., ...), (..., ...), (..., ...)]  # заполните данными, которые там планируются быть
results.sort(key=lambda x: sum([k[1] for k in results if k[0] == x[0]]))
assert results == [(..., ...), (..., ...), (..., ...), (..., ...)]  # заполните данными, которые вы ожидаете увидеть после сортировки



Офлайн

#9 Июнь 19, 2022 20:49:19

KEKIs
Зарегистрирован: 2022-06-10
Сообщения: 9
Репутация: +  -1  -
Профиль   Отправить e-mail  

Решение задачи по массивам (МФТИ)

FishHook
да, учту в следующий раз)
В целом я нашел ошибку сам: метод sort возвращает новый список, а не сортирует на месте. Чтобы получить ожидаемый результат поменял все на sorted

Офлайн

#10 Июнь 19, 2022 22:56:16

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Решение задачи по массивам (МФТИ)

KEKIs
В целом я нашел ошибку сам: метод sort возвращает новый список, а не сортирует на месте. Чтобы получить ожидаемый результат поменял все на sorted
Метод list.sort() сортирует на месте, в то время как глобальная встроенная функция sorted() сортирует и складывает в новый список.

Всё это легко проверить, просто открыв консоль и введя туда пару строчек
  
>>> lst = [3, 2, 1]
>>> lst.sort()
>>> lst
[1, 2, 3]
>>> 
>>> lst = [3, 2, 1]
>>> sorted(lst)
[1, 2, 3]
>>> lst
[3, 2, 1]
>>>
Выработай у себя привычку проверять то, что ты предполагаешь, быстро открыв консоль и проверив. Не ленись, это окупается. Иногда это выявляет систематические и долгоживущие ошибки мышления и устраняет их.



Отредактировано py.user.next (Июнь 19, 2022 23:07:22)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version