Мне нужно создать программу, которая вычисляет GCD из пяти пар чисел и печатает их в текстовый файл (OUT1.txt). Каждая входная пара хранится в отдельной строке в текстовом файле (DATA1.txt), как это:Напишите GCD в файл
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)
Я не уверен, что в этом плохого; любая помощь будет оценена по достоинству.
Это очень хрупкий способ обработки файлов - что, если вы вызываете 'egcd' перед' gcd'? Вы должны отделить вычисления и записать их результаты в файлы в отдельные функции и соответствующим образом передать аргументы/возвращаемые значения. – jonrsharpe
Вы должны открыть выходной файл одновременно с открытием входного файла. Затем вы, вероятно, читаете каждую строку более или менее так же, как сейчас, затем назначаете (а не увеличиваете) 'n1' и' n2', затем вызываете 'gcd (n1, n2)' и печатаете результат в выходной файл. Функция 'egcd()' должна идти; функция 'gcd()' должна выполнять только численную работу (без печати). –
Я думаю, ваша проблема в том, что вы открыли DATA1.txt с помощью '' w + ''- я уверен, что для чтения просто нужно быть' 'r'', так как вы никогда не писали об этом. Кроме того, 'data.close()' совершенно бессмысленно. 'with' блоки автоматически закрывают файлы в конце. Кроме того, очень странно, что вы открываете 'outputFile' в одной области видимости, но затем закрываете его в другом ... но это, вероятно, не вызывает никаких проблем. – ArtOfWarfare