Форум сайта python.su
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 последних теста из-за этого не проходит.
Офлайн
ncmps
Офлайн
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)
Офлайн
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)
Последнее действие сам напишешь , мне уже лень.
Офлайн
Чет, не отобразилась
id_stud,value_id,tms =
Офлайн
Решил таким способом, в угоду компактности кода, снижена скорость - так как сортируется на каждом вводе, можно вынести отдельно.
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=' ')
Офлайн
Всем привет!
Помогите разобраться, почему сортировка по второй лямбде не происходит? Я ее проверял, правильно выдает сумму по студенту.
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])
Офлайн
KEKIs
из вашего кода невозможно понять, какие именно данные ожидаются в results
сделайте такой пример (всякие инпуты только осложняют понимание)
results = [(..., ...), (..., ...), (..., ...), (..., ...)] # заполните данными, которые там планируются быть results.sort(key=lambda x: sum([k[1] for k in results if k[0] == x[0]])) assert results == [(..., ...), (..., ...), (..., ...), (..., ...)] # заполните данными, которые вы ожидаете увидеть после сортировки
Офлайн
FishHook
да, учту в следующий раз)
В целом я нашел ошибку сам: метод sort возвращает новый список, а не сортирует на месте. Чтобы получить ожидаемый результат поменял все на sorted
Офлайн
KEKIsМетод list.sort() сортирует на месте, в то время как глобальная встроенная функция sorted() сортирует и складывает в новый список.
В целом я нашел ошибку сам: метод 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)
Офлайн