Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.70/107: Рейтинг темы: голосов - 107, средняя оценка - 4.70
57 / 15 / 6
Регистрация: 08.08.2020
Сообщений: 266
1

Является ли число степенью двойки?

20.08.2020, 15:15. Показов 21543. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Прошу помочь найти ошибку. Смотрю на код, рассуждаю, вроде всё должно работать. Варианты с функциями и for не рассматриваются. Хочу разобраться именно в этом примере.

Python
1
2
3
4
5
6
7
8
9
10
11
12
x=int(input())
if x%2==0:
  i=0
  while 2**i<=x:
    if 2**i==x:
      print(i)
    elif 2**i>x:
      print('НЕТ')
    else:
      i=i+1
else:
  print('НЕТ')
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.08.2020, 15:15
Ответы с готовыми решениями:

Проверить, является ли заданное натуральное число степенью двойки
Здравствуйте, форумчане. Есть следующее задание: Дано натуральное число N. Выведите слово...

Выведите слово YES, если число N является точной степенью двойки
Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или...

Написать функцию power_of_two, которая определяет является ли заданное число степенью двойки
# Написать функцию power_of_two, которая определяет является ли заданное число степенью двойки. #...

Проверить является ли число степенью тройки
def is_power_three(n): print(n) if n == 1: return 'Є степенем трійки' if n...

Проверить, является ли число a степенью числа b
Решите задачу одним циклом while, допускается применение условных операторов. Задано два числа a...

23
2123 / 1206 / 501
Регистрация: 11.10.2018
Сообщений: 6,080
20.08.2020, 15:34 2
Цитата Сообщение от Zay Посмотреть сообщение
2**i > x:
- как может быть больше если цикл работает только <=?

Добавлено через 1 минуту
Цитата Сообщение от Zay Посмотреть сообщение
Python
1
i=i+1
- я думал это всегда надо выполнять, а оказывается только по else - Это ошибка.
0
57 / 15 / 6
Регистрация: 08.08.2020
Сообщений: 266
20.08.2020, 15:45  [ТС] 3
Поменял
Python
1
2
3
4
5
6
7
8
9
x=int(input())
if x%2==0:
  i=0
  while 2**i<=x:
    i=i+1
    if 2**i==x:
      print(i)
else:
  print('НЕТ')
Но как в коде определить, если поступает число на вводе например 6, оно нас не устраивает,
как при этом выаемти 'нет' хоть оно попадает в цикл потомучно четное.
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
20.08.2020, 15:50 4
Используйте break + else
Python
1
2
3
4
5
6
7
8
9
10
11
...
 
    while 2 ** i <= x:
        i = i + 1
        if 2 ** i == x:
            print(i)
            break
    else:
        # выполняется т.т.т., когда цикл завершился без вызова break
        print('No')
...
0
57 / 15 / 6
Регистрация: 08.08.2020
Сообщений: 266
20.08.2020, 16:02  [ТС] 5
ioprst, не придумаю как в else вставить инструкцию, что если при вычислении получается число меньше чем x и приближенное к нему, тоесть последнее возможное ,то выводим 'нет'
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
20.08.2020, 16:12 6
О чем вы?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def foo(x):
    if x % 2 == 0:
        i = 0
 
        while 2 ** i <= x:
            i = i + 1
            if 2 ** i == x:
                print(i)
                break
        else:
            print('НЕТ')
 
    else:
      print('НЕТ')
 
for x in [1, 2, 6, 8, 15, 16, 17]:
    print(f'{x}: ', end=' ')
    foo(x)
Вывод:
Код
1:  НЕТ
2:  1
6:  НЕТ
8:  3
15:  НЕТ
16:  4
17:  НЕТ
0
Модератор
Эксперт Python
2691 / 1597 / 513
Регистрация: 21.02.2017
Сообщений: 4,211
Записей в блоге: 1
20.08.2020, 16:27 7
Python
1
2
3
import math
 
print("Да" if math.log(x, 2).is_integer() else "Нет")
0
57 / 15 / 6
Регистрация: 08.08.2020
Сообщений: 266
20.08.2020, 16:30  [ТС] 8
Спасибо всем но я просил без функций, задаса должна решаться тем уровнем на котором мы сейчас находимся, а мы изучаем пока только if и while
0
2123 / 1206 / 501
Регистрация: 11.10.2018
Сообщений: 6,080
20.08.2020, 16:33 9
Что нужно сделать вообще?
0
57 / 15 / 6
Регистрация: 08.08.2020
Сообщений: 266
20.08.2020, 16:45  [ТС] 10
Вводится число, надо вывести ,нет' если число не является одной из степеней двойки или вывести число которое является степенью двойки.
0
2123 / 1206 / 501
Регистрация: 11.10.2018
Сообщений: 6,080
20.08.2020, 17:02 11
Так а что вывести-то, если входное число является степенью 2-ки. Само число или степень?

Добавлено через 43 секунды
Вот если надо степень вывести
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
print("Введите число")
x = int(input())
 
i=0
est=False
while 2**i <= x:
    if 2**i == x:
        print(i)
        est=True
    i=i+1
 
if est == False:
    print('НЕТ')
0
Эксперт Python
8583 / 4412 / 1852
Регистрация: 27.03.2020
Сообщений: 7,239
20.08.2020, 17:40 12
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Python
1
2
3
4
5
6
7
8
9
x = int(input())
 
while x % 2 == 0 :
    x = x // 2
 
if x == 1 :
    print('YES')
else :
    print('NO')
0
57 / 15 / 6
Регистрация: 08.08.2020
Сообщений: 266
20.08.2020, 18:21  [ТС] 13
FFPowerMan, вывести надо степень

Добавлено через 3 минуты
Буду разбираться с двумя последними кодами, спасибо большое
0
Эксперт Python
8583 / 4412 / 1852
Регистрация: 27.03.2020
Сообщений: 7,239
20.08.2020, 18:40 14
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Python
1
2
3
4
5
6
7
8
9
x = int(input())
k = 0
while x % 2 == 0 :
    x = x // 2
    k += 1
if x == 1 :
    print(k)
else :
    print('NO')
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37302 / 20736 / 4272
Регистрация: 12.02.2012
Сообщений: 34,125
Записей в блоге: 14
20.08.2020, 19:00 15
Как вариант:

Python
1
2
3
4
5
6
7
8
9
10
def is_power2(n):
    if n==1:
        return True
    elif n%2==0:
        return is_power2(n//2)
    else:
        return False
        
n=int(input("n="))
print(is_power2(n))
1
4253 / 2949 / 688
Регистрация: 08.06.2007
Сообщений: 9,855
Записей в блоге: 4
20.08.2020, 19:04 16
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Может быть, такое решение имеется в виду?
Python
1
2
3
4
5
n = int(input())
if n & (n-1):
    print("НЕТ")
else:
    print("ДА")
2
Am I evil? Yes, I am!
Эксперт PythonЭксперт Java
19226 / 10946 / 2917
Регистрация: 21.10.2017
Сообщений: 23,137
20.08.2020, 19:17 17
Python
1
2
3
4
5
n = int(input())
if n <= 0:
    print(False)
else:
    print(n & (n - 1) == 0)
Добавлено через 5 минут

Не по теме:

palva, опередил

1
Модератор
Эксперт Python
1356 / 653 / 207
Регистрация: 23.03.2014
Сообщений: 3,057
21.08.2020, 12:18 18
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def check2rec(num):
    if num == 1:
        res = True
        print(res)
        return res
    if num & 1:
        res = False
        print(res)
        return res
    return check2rec(num >> 1)
 
 
if __name__ == '__main__':
    num = int(input())
    check2rec(num)
а такой вариант был?
0
5408 / 2763 / 558
Регистрация: 07.11.2019
Сообщений: 4,510
21.08.2020, 15:14 19
Python
1
2
n=64
print(['нет', 'да'][bin(n).count('1')==1])
4
16 / 14 / 4
Регистрация: 05.06.2019
Сообщений: 79
22.08.2020, 00:02 20
Вот твой код. Много лишних операторов( все что внутри while - лишнее).
Ломаю голову как без массива и логарифма не проверять любое четное число
Через час-два напишу, если соображу

Python
1
2
3
4
5
6
7
8
9
10
x = int(input())
i = 0
 
if x % 2 == 0:
    while 2 ** i < x:
        i += 1
    else:
        print(i)
else:
    print('НЕТ')
0
22.08.2020, 00:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2020, 00:02
Помогаю со студенческими работами здесь

Цикл проверить, является ли число степенью числа 3
Дано целое число N&gt;0, если оно является степенью числа 3 то вывести TRUE, если нет - FALSE

Определить, является ли число степенью любого натурального числа
Степень числа Дано натуральное число, большее 1. Определить, является ли оно степенью любого...

Напишите программу, которая оставляет элементы в множестве если они являются степенью двойки
Напишите программу на Python которая оставляет элементы в множестве если они являются степенью...

Проверить, является ли число n точной степенью двойки
2) Ввести число n с клавиатуры. Если число n является точной степенью двойки, вывести “YES”, в...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru