Python遇到的问题,有点不懂,有会的吗

  1. (简答题, 15.0分)
    X的因子的表示能整除X的整数,如6的因子有1,2,3,6。
    编写程序,输入一个长度为5位的正整数M,分别完成:
    (1)从大到小输出M所有的奇数因子。
    (2)从小到大输出M所有符合如下条件的因子:该因子刚好是某个数的平方值(如9、 16、 25等)。
    注意:程序中要让人白要输入什么数据。
    要让人看懂输出的是什么结果。
x=int(input("五位数"))
list1=[]
list2=[]
for i in range(1,x+1):
    if(x%i==0):
        if(i%2==1):#奇数因子
            list1.append(i)
        if(i**0.5%1==0):#平方因子
            list2.append(i)
print("奇数因子:")
list1.reverse()
print(list1)
print("平方因子:")
print(list2)
from math import sqrt
n = input("请输入一个5位数:")
while len(n)!=5:
    n = input("请输入一个5位数:")
lst = [1]
M = int(n)
for i in range(2,M+1):
    if M%i==0:
        lst.append(i)
lst.reverse()
print(f'从大到小输出M所有的奇数因子:{lst}')
lst1 = []
for l in lst:
    if round(sqrt(l))**2==l:
        lst1.append(l)
lst1.reverse()
print(f'刚好是某个数的平方值的子:{lst1}')

img


n=int(input("请输入5位的正整数:"))
res=[1]
for i in range(2,n//2+1):
    if n%i==0:
        res.append(i)
res.append(n)

res1=[str(i) for i in res[::1] if i%2==1]
res2=[str(i) for i in res if i**0.5==int(i**0.5)]
print("从大到小奇数因子为:",','.join(res1))
print("从小到大平方值因子为",','.join(res2))
while True:
    M = input('请输入一个5位的正整数:')
    if M.isnumeric() and int(M)>=10000:
        M = int(M)
        break
n = [M]
for i in range(1,M//2+1):
    if M%i==0:
        n.insert(1,i)
print(f'该正整数所有的奇数因子从大到小为:{[i for i in n if i%2==1]}')
print(f'所有因子里是某个数的平方值的因子从小到大为:{[i for i in n[::-1] if i**0.5 in n]}')

结果

请输入一个5位的正整数:50000
该正整数所有的奇数因子从大到小为:[3125, 625, 125, 25, 5, 1]
所有因子里是某个数的平方值的因子从小到大为:[1, 4, 16, 25, 100, 400, 625, 2500, 
10000]