2015-10-30 4 views
1

Мне нужно создать программу, которая вычисляет 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) 

Я не уверен, что в этом плохого; любая помощь будет оценена по достоинству.

+2

Это очень хрупкий способ обработки файлов - что, если вы вызываете 'egcd' перед' gcd'? Вы должны отделить вычисления и записать их результаты в файлы в отдельные функции и соответствующим образом передать аргументы/возвращаемые значения. – jonrsharpe

+0

Вы должны открыть выходной файл одновременно с открытием входного файла. Затем вы, вероятно, читаете каждую строку более или менее так же, как сейчас, затем назначаете (а не увеличиваете) 'n1' и' n2', затем вызываете 'gcd (n1, n2)' и печатаете результат в выходной файл. Функция 'egcd()' должна идти; функция 'gcd()' должна выполнять только численную работу (без печати). –

+0

Я думаю, ваша проблема в том, что вы открыли DATA1.txt с помощью '' w + ''- я уверен, что для чтения просто нужно быть' 'r'', так как вы никогда не писали об этом. Кроме того, 'data.close()' совершенно бессмысленно. 'with' блоки автоматически закрывают файлы в конце. Кроме того, очень странно, что вы открываете 'outputFile' в одной области видимости, но затем закрываете его в другом ... но это, вероятно, не вызывает никаких проблем. – ArtOfWarfare

ответ

0

Выполняет ли это то, что вы хотите сделать? Он считывает файл с парой чисел на строку и записывает их GCD в другой файл.

import math 


def main(): 
    with open('DATA1.txt', 'r') as read, open('OUT1.txt', 'w') as write: 
     for line in read: 
      print(math.gcd(*map(int, line.split())), file=write) 

if __name__ == '__main__': 
    main() 

Файл с именем OUT1.txt создается со следующим содержимым:

6 
1 
1 
5123 
89 
0

Где вы читать и писать файлы должны быть в том же объеме (основная часть программы, и НОД() и egcd() не должен получить доступ к файлам Попросите их вернуть значение

Таким образом, вы бы увидели:..

gcd1 = gcd(n1, n2) 

и

gcd2 - egcd(n1,n2) 

Тогда напишите эти значения в файл.

Одна из проблем заключается в том, что egcd() закрывает выходной файл, а это значит, что вы не можете его снова записать.

Другая проблема заключается в том, что вы вызываете только вызовы gcd() и egcd(). Эти вызовы должны быть внутри цикла for внутри вашего с открытым() блоком, чтобы они вызывались повторно для каждой строки в файле.

Смежные вопросы