Search code examples
pythonfilerandomnumbersgenerate

Writing random numbers in file


My task is to generate different files and each of them has a specific size. This size includes random numbers that are written in the file. As an example, if the size is 100, it means the program needs to write 100 random numbers and generate a file and add them to that file. My problem is that by running this code I will get for example 100 numbers but they are all the same and non of them is different. Can you help me how to fix it?

import random
import time

def fillFile(fileSize, fileName):
    for i in range(fileSize):
        values = random.randint(0, fileSize + 1000)
    file = open(fileName + ".txt", "w")
    for i in range(fileSize):
        file.write(f"{i} {values}\n")

fileSizes = [1000, 5000, 10000, 25000, 50000, 100000, 200000]

def readFile(fileName):
    files= open(str(fileName) + ".txt", "r")
    values = []
    for line in files:
        values.append(line.split())
    return values


Solution

  • Basically you should change the position at which you declare the variable "values"

    def fillFile(fileSize, fileName):
        for i in range(fileSize):
            file = open(fileName + ".txt", "w")
            for i in range(fileSize):
                values = random.randint(0, fileSize + 1000)
                file.write(f"{i} {values}\n")
    

    The idea here is that in your original code you generate a random number "values" fileSize times, then you enter a loop in which you write the last generated "values" to your file. Where as for your purpose, if you want all numbers in the file to be randomly generated, then you need to either have them declared INSIDE the loop, or to pre-create an array of your numbers and find a way to write it in the format you want in your file.

    Note :

    As a reminder, the function random.randint(a, b) returns a random integer N such that a <= N <= b. Therefore in your original code values = random.randint(0, fileSize + 1000) while generate one random int between a=0 and b=fileSize+1000. Therefore you probably might want to take out the "+1000" I think, but again depends on your goal which I'm unclear about.