#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)
Отказ от ответственности: Просто забавный ответ, чтобы подумать о том, почему это работает.