Python将随机整数写入换行文件

时间:2016-01-18 00:10:25

标签: python python-3.x

我需要创建一个程序,在10到90之间生成10个随机整数,并调用两个单独的函数来执行单独的操作。第一个(playlist)只需要在没有空格的一行上打印它们,这很容易。第二个(savelist)给了我一些问题。我需要将列表nums中的每个数字写入angles.txt,并将每个数字按顺序写在一个单独的行上。无论我尝试什么,我都无法将它们分开,并且它在单行上显示为一个字符串。我错过了什么?

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()

5 个答案:

答案 0 :(得分:1)

在savelist()中,你需要遍历列表:

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

number.sort()

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

myfile.close()

当您向savelist()发送“nums”时,您正在发送一个列表。如果您只是尝试将“数字”写入文件,它将编写整个列表。因此,通过循环遍历列表中的每个元素,您可以将每一行写入文件。

答案 1 :(得分: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(&#39;数字&#39;稍微有些混乱,因为列表中包含&​​gt; 1个数字!)。

答案 2 :(得分: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()

答案 3 :(得分:0)

@tomlester已经声明你需要遍历number中的元素。另一种方法是。

def savelist(number):

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

答案 4 :(得分: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()