Итак, я изучил этот алгоритм поиска бисекции в Python и я применяю его, чтобы найти приблизительно квадратный корень из числа. Что касается алгоритма, то он работает отлично на свои ограничения, однако, что-то я часто в JavaScript, является инкапсулировать условия внутри переменных, так что легче читать, например:Удержание условий Python вне цикла?
var isGreaterThanFive = num > 5;
if(isGreaterThanFive && otherConditions...)
Хотя делать это в JavaScript работ абсолютно нормально, когда я пытаюсь сделать это на Python, моя программа, похоже, переходит в бесконечный цикл. Это мой код в JavaScript:
function sqrtOf (x) {
var min = 0
var max = x
var epsylon = 0.001
var guess = (max + min)/2
var guessNumber = 0;
//I created these two so it is easier to understand
var notCloseEnough = Math.abs(Math.pow(guess, 2) - x) >= epsylon;
var stillPlausible = guess <= x;
while (notCloseEnough && stillPlausible) {
guessNumber += 1
if(Math.abs(Math.pow(guess, 2)) > x) {
max = guess;
} else {
min = guess;
}
guess = (max + min)/2;
}
return guess;
}
console.log(sqrtOf(25)); // 5
И теперь в Python:
def sqrtOf (x)
minVal = 0
maxVal = x
epsylon = 0.001
guess = (maxVal + minVal)/2.0
guessNumber = 0;
notCloseEnough = abs(guess ** 2 - x) >= epsylon
stillPlausible = guess <= x
while notCloseEnough and stillPlausible:
guessNumber += 1
if abs(guess ** 2) > x:
maxVal = guess
else:
minVal = guess
guess = (maxVal + minVal)/2.0
return guess
print sqrtOf(25)
Если у вас есть и присвоение, выражение в правой части '=' оценивается перед назначением переменной. поэтому 'stillPlausibe' равен либо« True », либо« False »к тому времени, когда цикл запущен, и вы никогда ничего не измените. –
Ваш код javascript имеет ту же проблему ... – Izkata