поиск ближайшего квадратного числа с ограничением

#python #square

#python #квадрат

Вопрос:

Эй, итак, я хочу написать код для поиска ближайшего квадратного числа, меньшего или равного определенному числу (x). Я попробовал следующее:

 m = 0 
base = 0 
while m <= x:
   if m > x:
      break
   m = base**2
   base  = 1

print(m) 
  

Это, однако, дает ближайший квадрат сразу после числа x, несмотря на то, что ставит разрыв, поскольку m > x уже присвоено m . как я могу остановить цикл до m > x ?

Комментарии:

1. Цикл автоматически прервется, нет необходимости в условии if

2. Конечно, вы можете сделать это без цикла: math.floor(math.sqrt(x)) ** 2

3. @MarkMeyer пришел сюда, чтобы сказать то же самое! Хороший ответ.

Ответ №1:

if m > x является избыточным. Тело цикла будет введено, только если m <= x имеет значение True, и если это верно, то m > x никогда не будет, так что это break никогда не должно выполняться.

Чтобы ответить на ваш вопрос, не зная больше о математике, я бы просто ввел вторую переменную prev_m , а затем использовал это:

 m = 0
prev_m = m
base = 0 
while m <= x:
    prev_m = m
    m = base**2
    base  = 1

print(prev_m)  # Then use prev_m instead
  

Ответ №2:

Есть более простой способ сделать это с помощью math модуля:

 import math 
y = math.sqrt(x) #find the square root of x
if y.is_integer() == False: #check y is not a whole number
    print(math.pow(int(y),2)) # find the square root of the nearest whole number to y
  

Ответ №3:

Большинство ответов основаны на вычислении слишком большого количества квадратов, а затем на использовании предыдущего.
Но есть ли возможность узнать, будет ли следующий квадрат слишком большим, не вычисляя его?

 m = 0
base = -1
while base*2   m < x:
    base  = 1
    m = base**2

print(m)
  

Отказ от ответственности: Просто забавный ответ, чтобы подумать о том, почему это работает.