生成随机数并写入文本文件

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