print("---Вариант 1---")
n = 0
while 2 ** n<10000:  # или условие (n ** 2 < 1000)
    n += 1
# n -= 1  # в конце нужно вычесть "единицу", если использовать условие (n ** 2 < 1000)

print("Квадрат числа", n, "меньше 1000.", "n ** 2 =", n ** 2)  # два одинаковых вывода
print(f"Квадрат числа {n} меньше 1000. n ** 2 = {n ** 2}")  # два одинаковых вывода
print("Искомое число n:", n)

print()  # Пустая строка

print("---Вариант 2---")

n = 0
while True:
    n += 1
    if not (n  ** 2 < 10000):
        break

print("Квадрат числа", n, "меньше 1000.", "n ** 2 =", n ** 2)  # два одинаковых вывода
print(f"Квадрат числа {n} меньше 1000. n ** 2 = {n ** 2}")  # два одинаковых вывода
print("Искомое число n:", n)

print()  # Пустая строка

print("---Вариант 3---")

n = 1
while True:
    if 2 ** n<10000:
        n += 1
    else:
        n += 1  # корректировка последнего значения n
        break

print("Квадрат числа", n, "меньше 1000.", "n ** 2 =", n ** 2)  # два одинаковых вывода
print(f"Квадрат числа {n} меньше 1000. n ** 2 = {n ** 2}")  # два одинаковых вывода
print("Искомое число n:", n)

"""
Вариантов масса
Последние 2 варианта, особенно 3-ий, они достаточно извращенские (можно поиграться для общего развития).

Наверное лучшим и "стандартным" вариантом будет именно 1-ый:
Когда используется "понятное условие" (n ** 2 < 1000), и после цикла "корректируется" значение n
Приведу ещё раз этот код:

n = 0
while (n ** 2 < 1000):
    n += 1

n -= 1  # в конце нужно вычесть "единицу", если использовать условие (n ** 2 < 1000)
print(n)

Ⓒ Я не претендую на звание лучшего кода...
"""
