Python. Напишите программу, которая принимает на вход список из строк, содержащих числа, и возвращает список из чисел, которые являются степенями двойки. Если в исходном списке есть строки, которые не являются числами или не являются степенями двойки, программа должна игнорировать эти элементы.
Например, если на входе список ['2', '4', '8', '9', '16', 'abc'], то программа должна вернуть список [2, 4, 8, 16], так как только 2, 4, 8 и 16 являются степенями двойки, а строка 'abc' не является числом.
Ответы
Ответ дал:
2
Ответ:
Програма запрашивает у пользователя данные через кому, например: 2, 4, 8, 9, 16, abc.
user_list = input('Введите числа через кому: ').split(',')
result = [] # Тут будет наш готовый список
for s in user_list:
try:
number = int(s)
# Проверка на степень
if number > 0 and (number & (number - 1)) == 0:
result.append(number)
except ValueError:
pass
# Выводим результат
print(result)
Приложения:
addenisovih:
Спасибо
Строку кода user_list = user_list.replace(', ', ',').split(',') можно облегчить, если вместо метода replace просто сразу использовать в качестве аргумента не ',', а ', '. Тогда мы получаем user_list = user_list.split(', ')
Так же лучше объединить две строки user_list = input('Введите числа через кому: ') и user_list = user_list.split(', ') в одну, получая user_list = input('Введите числа через кому: ').split(", ")
Я разделил на две строки, так как я придерживался правилам стилизации кода PEP8
А использовал replace, так как пользователь может ввести ", ", а не просто кому
Ну можно и без использования replace, щас исправлю
Спасибо за замечание!
Обычно в задачах пример кода дает человеку понять, что данные должны вводиться только "таким" способом, а выводиться только "таким", никак иначе. Исключением являются программы, которые создаются под прихоти определенного человека, но тогда он сам должен ставить необходимые "рамки" и условия.
Ответ дал:
2
Объяснение:
- Приведенный мною код очень лаконичный, однако некоторые детали в нем требуют разъяснения.
- Для начала мы создаем переменную str_arr, в которую сохраняем строку-список, полученный на входе. Далее с помощью генератора исправляем нашу строку, используя методы обрезания strip(), чтобы метод split() смог правильно разбить ее на список из строковых значений, который мы впоследствии сможем использовать.
- С помощью цикла проходим по списку и проверяем каждый элемент:
- Если этот элемент число, и этот элемент не равен 0, и этот элемент является степенью двойки, то в другой список int_arr мы добавляем это число.
- Немного остановимся на условии проверки числа на соответствие степени двойки. Я использовал побитовый оператор И (&), который сравнивает биты двух чисел: элемент списка и его "левый сосед", и если результат их сравнения равен 0, то это число является степенью двойки.
Код Python 3.10:
str_arr = [a.strip("'") for a in input().lstrip("[").rstrip("]").split(', ')]
int_arr = []
for x in str_arr:
if x.isdigit() is True and int(x) != 0 and (int(x) & (int(x) - 1)) == 0:
int_arr.append(x)
print(int_arr)
Результат:
Ввод: ['2', '4', '8', '9', '16', 'abc']
Вывод: [2, 4, 8, 16]
Вас заинтересует
1 год назад
1 год назад
1 год назад
3 года назад
3 года назад
8 лет назад