本帖最后由 sunrise085 于 2020-4-17 14:49 编辑
先说一下前面几个输出都是怎么来的。看注释。num=input("shuru:")
list1=num.split(" ")
print(len(list1)) #那个3,是这里输出的
for i in list1:
i=eval(i)
print(type(i)) #那三个<class 'int'>是这里输出的
最后的那个<class 'str'>是调用函数时,第一次for循环那个print(type(lst[j]))输出的。
之后程序就出错了。
出错原因是因为在主程序中你并没有将list1重点 各个元素变化层int类型,调用函数的时候,if lst[j] % i == 0 and j == len(lst) - 1 这一句对str类型的lst[j]进行求余,就出错了
另外,你的程序逻辑问题特别大。根本实现不了求几个数的最大公约数
按照你的思路,在你能看明白的情况下帮你修改了一下def gcd(lst):
i = 1
while i<=min(lst): #循环的结束条件应该是这几个数的最小值
for j in range(len(lst)):
#print(type(lst[j]))
if lst[j] % i != 0:#lst[j]不能整除i,跳出本层循环,继续下一个数的判断
i+=1
break
else: #都能整除,标记这个数,进行下一个数的判断
result=i
i+=1
return result
num=input("shuru:")
list1=num.split(" ")
print(len(list1))
for i in range(len(list1)):
list1[i]=eval(list1[i]) #这里应该将list1的值变为int类型
print(type(list1[i]))
k=gcd(list1)
print(k)
|