Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
 Аватар для Lenna
0 / 0 / 0
Регистрация: 01.08.2019
Сообщений: 3

Ошибки в задачке

01.08.2019, 13:52. Показов 4205. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.
Вопрос, собственно, в чем... Есть вот такое задание:

Напишите функцию modify_list(l), которая принимает на вход список целых чисел, удаляет из него все нечётные значения, а чётные нацело делит на два. Функция не должна ничего возвращать, требуется только изменение переданного списка, например:
Python
1
2
3
4
5
6
7
8
9
lst = [1, 2, 3, 4, 5, 6]
print(modify_list(lst))  # None
print(lst)               # [1, 2, 3]
modify_list(lst)
print(lst)               # [1]
 
lst = [10, 5, 8, 3]
modify_list(lst)
print(lst)               # [5, 4]
Функция не должна осуществлять ввод/вывод информации.

Это то, что я наваяла (последние 3 строчки для проверки, работает ли это "творение"):

Python
1
2
3
4
5
6
7
8
9
10
def modify_list(l):
    for i in range(len(l)):
      if l[i]%2==0:
        l[i]//=2
      else:
        l.pop(i)
      return l
l = [int(i) for i in input().split()]
li = modify_list(l)
print(*li)
Я сама вижу, что очень криво и все плохо, но я только знакомлюсь с программированием в принципе.
Напишите пожалуйста, в чем я здесь накосячила и почему нельзя было так делать.)))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.08.2019, 13:52
Ответы с готовыми решениями:

Проверте ошибки в задачке по паскалю
Создать односвязный линейный список со слов строки, расположив их за алфавитным порядком.Вычислить количество повторений каждого слова в...

3 задачке на прологе
Решите мне задачьки на прологе пожалуйста.. Создайте предикат, который будет находить среднеарифметическое значений, находящихся в...

Проблема в задачке
#include <iostream.h> #include <string.h> #include <stdio.h> #include <math.h> #include <stdlib.h> #include <conio.h> double...

7
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
01.08.2019, 14:14
Лучший ответ Сообщение было отмечено Lenna как решение

Решение

Lenna, по заданию (как я понимаю) речь идет о четных и нечетных значениях, а ты работаешь с индексами!
и если судить по входным и выходным данным все обстоит именно так - нужно работать со значениями а не индексами (то есть на четность надо проверять само число а не его индекс в листе)

решение в лоб
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def modify_list(a_list: list) -> None:
    for i, e in enumerate(a_list):
        if e % 2 == 0:
            a_list[i] = e // 2
    for e in a_list:
        if e % 2 != 0:
            a_list.remove(e)
 
 
l = [1, 2, 3, 4, 5, 6]
modify_list(l)
assert l == [1, 2, 3]
modify_list(l)
assert l == [1]
l = [10, 5, 8, 3]
modify_list(l)
assert l == [5, 4]
Добавлено через 3 минуты
а это если не в лоб (но препод не поверит)
Python
1
2
def modify_list(a_list: list) -> None:
    a_list[:] = [e // 2 for e in a_list if e % 2 == 0]
1
151 / 86 / 35
Регистрация: 05.08.2017
Сообщений: 257
01.08.2019, 14:59
Лучший ответ Сообщение было отмечено Lenna как решение

Решение

Цитата Сообщение от Welemir1 Посмотреть сообщение
а это если не в лоб (но препод не поверит)

Не по теме:

Что бы поверил препод


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def modify(lst):
    i = 0
    while i != len(lst):
        if lst[i] % 2 == 0:
            lst[i] //= 2
            i += 1
        else:
            lst.pop(i)
 
 
test = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(test)
 
modify(test)
print(test)
Добавлено через 8 минут
А по твоему коду - у тебя return стоит в теле цикла, т.е. после первой итерации происходит возврат в место вызова. Даже если поставить return вне тела цикла, то произойдет IndexError, т.к. ты удаляешь элементы из списка в цикле for. Для этого лучше использовать while. Так же отступы неправильно расставлены, используй TAB вместо пробела
1
 Аватар для Semen-Semenich
5234 / 3479 / 1175
Регистрация: 21.03.2016
Сообщений: 8,307
01.08.2019, 15:40
Лучший ответ Сообщение было отмечено Lenna как решение

Решение

Цитата Сообщение от Welemir1 Посмотреть сообщение
нужно работать со значениями а не индексами (то есть на четность надо проверять само число а не его индекс в листе)
по мне так она так и делает только берет число из списка по индексу.
Python
1
2
     if l[i]%2==0:
        l[i]//=2
и это все делается в один проход
Python
1
2
3
4
5
6
7
8
9
10
def modify_list(l):
    for i in reversed(range(len(l))):
        if l[i]%2==0:
            l[i]//=2
        else:
            l.pop(i)
  
 
l = [int(i) for i in input().split()]
print(*l)
2
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
01.08.2019, 15:44
Semen-Semenich, да, про индексы - это я не внимательно посмотрел, а потом уже поздно было исправлять. я в итоге в один проход и делаю.
0
 Аватар для Lenna
0 / 0 / 0
Регистрация: 01.08.2019
Сообщений: 3
06.08.2019, 10:03  [ТС]
Welemir1, Resistanse, Semen-Semenich, спасибо вам огромное за помощь!
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
06.08.2019, 10:05
Lenna, Название: thx.jpg
Просмотров: 33

Размер: 10.9 Кб
0
 Аватар для Lenna
0 / 0 / 0
Регистрация: 01.08.2019
Сообщений: 3
12.08.2019, 15:39  [ТС]
не заметила сразу. Исправилась.)) Еще раз всем спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2019, 15:39
Помогаю со студенческими работами здесь

Подскажите пожалуйста по задачке
Решаю вот тут задачку(игра фанты для 2 игроков), вроде бы получилось , покажите пожалуйста мои ошибки, я знаю их тут много:) mport...

Заменить циклы в задачке
Нужно преписать задачку. Заменить циклы for на while А так-же ещё раз переписать, но только на этот раз for > do/while ...

Функция replace в задачке
Задача в питоне надо исправить ошибки в коде, для получения требуемого вывода. Нашел ошибку, немного изменил код, но выдает ошибку в...

Не могу разобраться в задачке
Дано целое число N (> 1) и набор из N вещественных чисел. Если данный набор образует убывающую последовательность, то вывести 0; в...

Сомнения в простой задачке
В группе 20 студентов,в сессии 4 экзамена. Определить суммарную стипендию. считать,что стипендия в размере R рублей начисляется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru