2016-01-18 192 views
2

我需要製作一個程序,該程序可生成10到90之間的10個隨機整數,並調用兩個單獨的函數來執行單獨的操作。第一個(playlist)只需要將它們全部打印在一行中而沒有空格,這很容易。第二個(savelist)給我的問題。我需要在列表numsangles.txt中寫下每個數字,每個數字在一個單獨的行上依次排列。無論我嘗試什麼,我都無法在單獨的行上找到它們,並且它在一行中顯示爲一個字符串。我錯過了什麼?Python將隨機整數寫入換行文件

import random 

def main(): 
    nums = [] 
    # Creates empty list 'nums' 
    for n in range(10): 
     number = random.randint(10, 90) 
     nums.append(number) 
     # Adds 10 random integers to list 
    playlist(nums) 
    savelist(nums) 

def playlist(numb): 
    index = 0 
    while index < len(numb): 
     print(numb[index], end=' ') 
     index += 1 

def savelist(number): 
    myfile = open('angles.txt', 'w') 
    # Creates numbers.txt file 
    number.sort() 
    myfile.write(str(number) + '\n') 
    myfile.close() 

main() 

回答

1

在savelist(),您可以通過列表需要循環:

myfile = open('angles.txt', 'w') 
# Creates numbers.txt file 

number.sort() 

for e in number: 
    myfile.write(str(e)) 

myfile.close() 

當您發送 「NUMS」 到savelist(),您發送的列表。如果您只是試圖將「數字」寫入文件,它會寫出整個列表。因此,通過遍歷列表中的每個元素,可以將每行寫入文件。

+0

我無法相信我錯過了。我早些時候嘗試過類似的東西,但似乎我過於複雜了。謝謝! – RevvedUp

+0

@RevvedUp如果這個答案[解決你的問題],請考慮[接受它](http://meta.stackexchange.com/questions/5234/how-通過點擊答案左邊的複選標記/勾號,將其變成綠色,接受答案作品。這標誌着您的問題已經解決,您的滿意,併爲您和回答者授予[聲譽](http://stackoverflow.com/help/whats-reputation)。 – MattDMo

+0

我會早一點,但它說我必須等6分鐘才能接受答案。我不知道爲什麼這是網站上的事情,我承認我沒有期待這麼快就有答案。 – RevvedUp

0

嘗試下面的代碼:您正在將整個數組寫入文件,因此只能看到一行。

def main(): 
nums = [] # Creates empty list 'nums' 

for n in range(10): 
    number = random.randint(10, 90) 
    nums.append(number) 
    # Adds 10 random integers to list 

playlist(nums) 

savelist(nums) 


def playlist(numb): 
    index = 0 

    while index < len(numb): 
     print(numb[index], end=' ') 
     index += 1 

def savelist(number): 
    myfile = open('angles.txt', 'w') 
    # Creates numbers.txt file 

    number.sort() 
    for element in number: 
     myfile.write(str(element) + '\n') 

    myfile.close() 

main() 
1

要寫一個列表到一個文件,你需要迭代列表中的每個元素並單獨寫入,並附上換行符。例如:

def savelist(number): 

    myfile = open('angles.txt', 'w') 
    # Creates numbers.txt file 

    number.sort() 

    for n in number: 
     myfile.write(str(number) + '\n') 

    myfile.close() 

你也可以生成與新行加入您的列表中的一個字符串,然後寫到文件中。例如:

myfile.write('\n'.join([str(n) for n in number]) 

最後,你可能要考慮使用的文件打開上下文管理,以確保文件被關閉無論發生什麼情況。例如:

def savelist(nums): 

    # Creates numbers.txt file 
    nums.sort() 

    with open('angles.txt', 'w') as myfile: 
     myfile.write('\n'.join([str(n) for n in nums]) 

請注意,我也改變了變量名nums,而不是number(「數」是略顯混亂,因爲列表中包含> 1號!)。

0

@tomlester已經聲明您需要遍歷number中的元素。另一種做法是。

def savelist(number): 

    number.sort() 
    with open('angles.txt', 'w') as myfile: 
     myfile.write('\n'.join(map(str, number))) 
0

這是我會怎麼做:

from random import randint 

def rand_lst(lo, hi, how_many): 
    return [randint(lo, hi) for _ in range(how_many)] 

def print_lst(nums): 
    print(''.join(str(num) for num in nums)) 

def save_lst(nums, fname): 
    with open(fname, "w") as outf: 
     outf.write('\n'.join(str(num) for num in sorted(nums))) 

def main(): 
    nums = rand_lst(10, 90, 10) 
    print_lst(nums) 
    save_lst(nums, "angles.txt") 

if __name__ == "__main__": 
    main()