Python Forum

Full Version: Can someone please explain this code for me and what it does?
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
def my_sqrt(n):
    approx = n/2
    closer = (approx + n/approx)/2
    while closer != approx:
        approx = closer
        closer = (approx + n/approx)/2
    return approx
It seems to be an implementation of the Babylonian method of finding the square root of a number:
https://en.wikipedia.org/wiki/Methods_of...ian_method

Do you have a specific question about it?
Would like to know what each line does and how the code works, new to coding so just trying to understand.
def my_sqrt(n):
    approx = n/2
    closer = (approx + n/approx)/2
    while closer != approx:
        approx = closer
        closer = (approx + n/approx)/2
    return approx
I'm a novice coder but I'll give it a go and wiser contributors than me can add to it.

def my_sqrt(n): # create a function calling in an 'n' arguement
approx = n/2 # set a variable equal to 'n' ÷ 2
closer = (approx + n/approx)/2 # set a variable equal to ('approx' variable + 'n' ÷'approx' variable) ÷ 2
while closer != approx: # start of while loop that is run when following 'approx' variable is false, or not equal to
approx = closer # 'approx' variable equals 'closer' variable
closer = (approx + n/approx)/2 # takes the 'closer' variable equal to ('approx' variable + 'n' ÷'approx' variable) ÷ 2
return approx # function returns 'approx' variable

Add this line to see some results in terminal:
print('\'approx\' variable is:', approx)
Add this line indented (under 'closer =' in while loop) and inline with 'def' to see different results.
You'll have to remove this line that is inline with 'def'. It causes an error which I mention just for you to see it.

The programs gives the square root of any number you call the function with (replace a number for 'n').
So if you open Python Idle, paste this code, save, press F5, and type 'my_sqrt(9)' is the python window that opens, you should see some lines with the final line showing a floating point value of 3.0
Replace '9' with any # you want.

Phil Blush
I recommend that you copy and paste the code into the Python Visualiser and you can then step through the programme a line at a time and see, visually, what is going on.
This piece of code will give me the square root of a number?! I trust you guys but I just can't get it. Big Grin The math is an interesting thing. Lots of tricks in it.