【发布时间】:2015-10-30 14:07:42
【问题描述】:
我需要创建一个程序来计算五对数字的 GCD 并将它们打印到一个文本文件 (OUT1.txt)。每个输入对存储在文本文件 (DATA1.txt) 的单独行中,如下所示:
18 24
112 1
43243 333343
20492 87091
3293 979
我目前的代码没有输出任何东西,尽管数学运算是正确的。到目前为止我的代码如下:
outputFile = open('OUT1.txt', 'w+')
n1 = 0
n2 = 0
with open('DATA1.txt', 'w+') as data:
for line in data:
twoNums = line.split()
n1 += int(twoNums[0])
n2 += int(twoNums[1])
data.close()
def gcd(n1, n2):
n = min(n1, n2)
cds = []
for i in range(1, n+1):
while i > 1:
remainder1 = n1 % i
remainder2 = n2 % i
if remainder1 == 0 and remainder2 == 0:
cds.append(i)
break
if not cds:
outputFile.write('1')
else:
outputFile.write(str(max(cds)))
def egcd(n1, n2):
while n2 != 0:
(n1, n2) = (n2, n1 % n2)
outputFile.write(str(n1))
outputFile.close()
gcd(n1, n2)
egcd(n1, n2)
我不确定这有什么问题;任何帮助将不胜感激。
【问题讨论】:
-
这是一种非常脆弱的文件处理方式——如果在
gcd之前调用egcd会怎样?您应该分离计算并将其结果写入文件到单独的函数中,并适当地传递参数/返回值。 -
您应该在打开输入文件的同时打开输出文件。然后您可能会像现在一样或多或少地阅读每一行,然后分配(而不是递增)
n1和n2,然后调用gcd(n1, n2)并将结果打印到输出文件。egcd()函数应该去;gcd()函数应该只做数字工作(不打印)。 -
我认为你的问题是你用
'w+'打开了DATA1.txt——我很确定应该只是'r',因为你从来没有写过它.此外,data.close()完全没有意义。with块在文件末尾自动关闭文件。此外,您在一个范围内打开outputFile却在另一个范围内关闭它真的很奇怪......但这可能不会导致任何问题。
标签: python io greatest-common-divisor