题目大意:Return the next square if sq is a square, -1 otherwise
我自己最开始写的:
import math def find_next_square(sq): a=math.sqrt(sq)#a的类型是float # print(type(a)) if int(a)==a: return (a+1)**2 else: return -1
后来又写了一种比较笨的:
def fine_next_square(sq): s=[i**2 for i in range(1,1000000)] if sq in s: return s[s.index(sq)+1] else: return -1这个方法效率低,很傻。
然后学习了更多比较好的解法,供大家参考:
def find_next_square(sq): root = sq ** 0.5 if root.is_integer(): return (root + 1)**2 return -1
def find_next_square(sq): x = sq**0.5 return -1 if x % 1 else (x+1)**2
from math import sqrt def find_next_square(sq): return (sqrt(sq)+1)**2 if sqrt(sq)%1 == 0 else -1
import math def find_next_square(sq): return (math.sqrt(sq) + 1) ** 2 if (math.sqrt(sq)).is_integer() else -1
def find_next_square(sq): root = sq ** 0.5 if (root % int(root) == 0): return (root + 1) ** 2 return -1
find_next_square=lambda sq: (lambda sqrt: (sqrt+1)**2 if sqrt**2==sq else -1)(int(sq**0.5))
def find_next_square(s): return -1 if s**0.5%1!=0 else (s**0.5+1)**2
这个也比较有意思:
def find_next_square(sq): n = int(sq ** 0.5) if not sq - n ** 2: return (n+1)**2 return -1