2015-05-21 5 views
1

Я хочу сохранить вывод (0,1,1,2,3) для цикла в файл, но мой код записывает только последнее значение (3) цикла. Как я могу это исправить?Сохранение вывода петли в файл

#!/usr/bin/python 

def fib(n): 
    a, b = 0, 1 
    for i in range(0, n): 
     a, b = b, a + b 
    return a 
for c in range(0, 5): 
    print(fib(c)) 
    file=open("fib.txt","w") 
    s = str(fib(c)) 
    file.write(s+"\n") 
# file.write("%s\n" % fib(c)) 
    file.close() 
+0

Открыть файл в режиме добавления: 'file = open ("fib.txt", "a") – Igle

+1

Возможный дубликат [Как вы добавляете файл в Python?] (Http://stackoverflow.com/ Вопросы/4706499/how-do-you-append-to-a-file-in-python) – Igle

+0

Когда вы открываете файл в режиме записи, он вместо этого перезаписывает режим использования содержимого. – ZdaR

ответ

1

Постарайтесь это сделать.

def fib(n): 
    a, b = 0, 1 
    for i in range(0, n): 
     a, b = b, a + b 
    return a 
file=open("fib.txt", "a") 
for c in range(0, 5): 
    print(fib(c)) 
    s = str(fib(c)) 
    file.write(s + "\n") 
file.close() 
0

Дайте попробовать в yield вместо return

#!/usr/bin/python 

def fib(n): 
    a, b = 0, 1 
    for i in range(0, n): 
     a, b = b, a + b 
     yield a 
for c in range(0, 5): 
    print(fib(c)) 
    file=open("fib.txt","w") 
    for s in str(fib(c)): 
     file.write(s+"\n") 
    file.close() 
1

Вы можете прочитать о generators и context managers:

def fib(n): 
    a, b = 0, 1 
    for i in range(n): 
     a, b = b, a + b 
     yield a 

with open("fib.txt","w") as f: 
    for x in fib(5): 
     f.write(str(x) + '\n') 
+0

Похоже, ты избил меня! – pzp

1

Ну это не только легко, но гораздо более легко, то легко ...: P

использовать тот же код просто изменить режим файла при открытии, что это ...

file=open("fib.txt","w") #opens your file in write mode 

так .. изменить его

file=open("fib.txt","a") #opens your file in append mode 

который откроет файл в режиме добавления.

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