我需要创建一个程序,在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()
答案 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()