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:
Спасибо
Ответ дал:
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]
Вас заинтересует
3 месяца назад
3 месяца назад
3 месяца назад
1 год назад
1 год назад
7 лет назад