生成随机数并写入文本文件
Generate random numbers and write to text file
所以我必须生成 100 个介于 1 和 100 之间的随机数,并将它们写入一个 txt 文件,并在数字之间输入 (\n)。
下一个任务是读回这个 txt 文件,计算 20 到 80 之间的数字数量,然后将数量写入 STDOUT。将这些数字(20 到 80 之间的数字)写入另一个 txt 文件,数字之间用逗号隔开。
这是我想出的代码,有点管用,但我确信有一种更简单、更短的方法可以做到这一点。另外由于某种原因它不能正常工作,因为它将一些(不是每个)10 以下的数字写入文件(也计算它们):
import random
f = open("eredmenyek_nyers.txt", "w")
for i in range(100):
randomlist = random.randint(1,100)
f.write(str(randomlist) + '\n')
f.close()
db=0
f = open("eredmenyek_nyers.txt", "r")
f2 = open("eredmenyek_szort.txt", "w")
szamok = f.read()
ezt = szamok.split("\n")
xxx=len(ezt)
print(ezt)
i=0
db=0
for xxx in ezt:
if '80' > ezt[i]:
if ezt[i] > '20':
db+=1
f2.write(str(ezt[i]) + ',')
i+=1
print("Ennyi 20 és 80 közötti szám van ebben a listában:",db)
f.close()
f2.close()
解决了字符串与整数比较的部分问题。下面的代码将执行预期的操作。但是,正如你在问题中提到的,首先是将 100 个数字写入文件,post, 读取文件,在 STDOUT 中打印,post that 将 20 到 80 之间的数字写入另一个文件...这显示为一系列事件。如果这不是问题,您可以在一个 for 循环本身中同时写入文件和 STDOUT。我正在更新,以便一个接一个地完成一系列操作 - 正如您的问题中提到的那样。
用这段代码替换第二个for循环....
for item in ezt:
if item != '': # To handle last /n which will be a blank
if int(item) < 80 and int(item) > 20:
db+=1
f2.write(item + ',')
... This is the code I have come up with, kinda works, but I'm sure there is a simpler and shorter way to do it. ...
你实际上可以把它做得更紧凑一点, comprehensions, map()
and .join()
:
from random import randint
with open("numbers.txt", "w") as file:
file.writelines(f"{randint(1, 100)}\n" for _ in range(100))
with open("numbers.txt", "r") as fin,\
open("filtered_numbers.txt", "w") as fout:
numbers = [n for n in map(int, fin) if 20 < n < 80]
print(f"Found {len(numbers)} numbers between 20 and 80.")
fout.write(",".join(map(str, numbers)))
解决此问题的一种方法是将文件加载到列表中。 Python 有处理列表的好工具,所以我们可以迭代列表并生成一个新的列表,包含通过测试的项目,然后获取新列表的长度并将其写入新文件。
为了便于阅读和诊断,有时也可以将问题分解成小块。
import random
""" Generate intial file of random numbers.
"""
f = open("file1.txt", "w")
for i in range(100):
f.write(str(random.randint(1,100)) + "\n")
f.close()
""" Read file items into a list. This will make other operations
easier.
"""
num_list = []
f = open("file1.txt", "r")
while True:
next_line = f.readline()
if len(next_line) == 0:
break
num_list.append(int(next_line))
f.close()
""" Create new list and append items >=20 and <=80.
"""
short_list = []
for i in num_list:
if 20 <= i <= 80: short_list.append(i)
""" Output number of items in short list. Convert to a string so
[] can be removed, then write to file.
"""
print("Number of items:", len(short_list))
f = open("file2.txt", "w")
string = (str(short_list)).strip('[]')
f.write(string + "\n")
f.close()
所以我必须生成 100 个介于 1 和 100 之间的随机数,并将它们写入一个 txt 文件,并在数字之间输入 (\n)。
下一个任务是读回这个 txt 文件,计算 20 到 80 之间的数字数量,然后将数量写入 STDOUT。将这些数字(20 到 80 之间的数字)写入另一个 txt 文件,数字之间用逗号隔开。
这是我想出的代码,有点管用,但我确信有一种更简单、更短的方法可以做到这一点。另外由于某种原因它不能正常工作,因为它将一些(不是每个)10 以下的数字写入文件(也计算它们):
import random
f = open("eredmenyek_nyers.txt", "w")
for i in range(100):
randomlist = random.randint(1,100)
f.write(str(randomlist) + '\n')
f.close()
db=0
f = open("eredmenyek_nyers.txt", "r")
f2 = open("eredmenyek_szort.txt", "w")
szamok = f.read()
ezt = szamok.split("\n")
xxx=len(ezt)
print(ezt)
i=0
db=0
for xxx in ezt:
if '80' > ezt[i]:
if ezt[i] > '20':
db+=1
f2.write(str(ezt[i]) + ',')
i+=1
print("Ennyi 20 és 80 közötti szám van ebben a listában:",db)
f.close()
f2.close()
解决了字符串与整数比较的部分问题。下面的代码将执行预期的操作。但是,正如你在问题中提到的,首先是将 100 个数字写入文件,post, 读取文件,在 STDOUT 中打印,post that 将 20 到 80 之间的数字写入另一个文件...这显示为一系列事件。如果这不是问题,您可以在一个 for 循环本身中同时写入文件和 STDOUT。我正在更新,以便一个接一个地完成一系列操作 - 正如您的问题中提到的那样。
用这段代码替换第二个for循环....
for item in ezt:
if item != '': # To handle last /n which will be a blank
if int(item) < 80 and int(item) > 20:
db+=1
f2.write(item + ',')
... This is the code I have come up with, kinda works, but I'm sure there is a simpler and shorter way to do it. ...
你实际上可以把它做得更紧凑一点, comprehensions, map()
and .join()
:
from random import randint
with open("numbers.txt", "w") as file:
file.writelines(f"{randint(1, 100)}\n" for _ in range(100))
with open("numbers.txt", "r") as fin,\
open("filtered_numbers.txt", "w") as fout:
numbers = [n for n in map(int, fin) if 20 < n < 80]
print(f"Found {len(numbers)} numbers between 20 and 80.")
fout.write(",".join(map(str, numbers)))
解决此问题的一种方法是将文件加载到列表中。 Python 有处理列表的好工具,所以我们可以迭代列表并生成一个新的列表,包含通过测试的项目,然后获取新列表的长度并将其写入新文件。
为了便于阅读和诊断,有时也可以将问题分解成小块。
import random
""" Generate intial file of random numbers.
"""
f = open("file1.txt", "w")
for i in range(100):
f.write(str(random.randint(1,100)) + "\n")
f.close()
""" Read file items into a list. This will make other operations
easier.
"""
num_list = []
f = open("file1.txt", "r")
while True:
next_line = f.readline()
if len(next_line) == 0:
break
num_list.append(int(next_line))
f.close()
""" Create new list and append items >=20 and <=80.
"""
short_list = []
for i in num_list:
if 20 <= i <= 80: short_list.append(i)
""" Output number of items in short list. Convert to a string so
[] can be removed, then write to file.
"""
print("Number of items:", len(short_list))
f = open("file2.txt", "w")
string = (str(short_list)).strip('[]')
f.write(string + "\n")
f.close()