帮我看下以下代码哪有错误

问题遇到的现象和发生背景

题目:把一个自然数分解成最多4个平方数的和。

问题相关代码,请勿粘贴截图
from random import choices
from itertools import chain
def fun(n):
    while True:
        x=list(range(1,n))
        y=list(chain(*[choices(x,k=i)for i in range(1,5)]))
        rule=lambda m:m**2
        num=map(rule,y)
        if sum(num)==n:
            return y
            break
print(fun(10))

运行结果及报错内容

没有结果,也无法调试。

我的解答思路和尝试过的方法

我的思路是利用循环一个一个试,以便达到用的数最少

我想要达到的结果

1、这个y是个10个元素的列表,建议改成for循环
2、x其实可以不考虑int(n**0.5) + 1之后的部分