Compute the square root of a positive integer using binary search
Your comments on  the elif / else part are too long to be just after the statements
Don't use semicolons (;) in Python.
This is a refactored version of the code


import math

class Solution(object):
    def mySqrt(self, x):
        """
        :type x: int
        :rtype: int

        Returns floor(sqrt(x))
        """
        low = 0
        high = x//2 + 1

        """
        It is proved that 0 &lt;= sqrt(x) &lt;= x/2, so
        we run a dichotomic in [0, x/2] to find floor(sqrt(x))

        Loop analysis:
        * Initialization: low = 0 and high = x/2 + 1 
        * Termination: |high-low| is reduced each iteration,
          as shown in lines high = mid - 1 and low = mid + 1.
        * Invariant: low &lt;= floor(sqrt(x)) &lt;= high.
          Let mid be (low + high)/2.
            - If mid^2 &lt;= x &lt; (mid+1)^2,
              then mid is floor(sqrt(x)) and just return it.
            - If mid^2 &gt; x, search for values smaller than mid.
            - Otherwise, if mid^2 &lt; x, search within higher values.
        """
        while (low &lt;= high):
            mid = (low + high) // 2
            sq = mid * mid
            sq_next = (mid+1)*(mid+1)
            if (sq &lt;= x &lt; sq_next):
                return mid
            elif (sq &gt; x):
                high = mid - 1
            else:
                low = mid + 1

for i in range(1, 26):
  assert(math.floor(math.sqrt(i)) == Solution().mySqrt(i))