Как исправить цикл while внутри функции? - PullRequest
0 голосов
/ 30 ноября 2018

Мой код работает, и просит назвать файл и сколько чисел.Но он просто продолжает спрашивать цифры, и если я ставлю ноль, он делает то, что должен делать.любая помощь очень ценится очень.Я просто не знаю, как исправить код, и это действительно беспокоит меня.

import random
def generateRandomNumber(myfile):
    try:
        fileToBeWrittenTo = open(myfile,"w")
        numberOfRandomNumbers = int(input("How many numbers" + \
                                      " should the random file hold?:" ))
    except Exception as potentialError:
        print("An error has occured:", potentialError )
    else:
        for randomNumberCount in range(1, numberOfRandomNumbers + 1 ):
            randomNumber = generateRandomNumber(myfile)
            fileToBeWrittenTo.write(str( randomNumber ) + '\n' )
        print( numberOfRandomNumbers, "numbers have been written" + \
               " to the file ")
    finally:
        fileToBeWrittenTo.close()
        print("\nEnd of program")
    displayNumber(myfile)
    randomNumber = random.randint(1,500)
    return randomNumber

def main():
    myfile = str(input("Enter file name here "))
    with open(myfile, 'w+') as f:
        generateRandomNumber(myfile)

    return f
    myfile.close    

def displayNumber(myfile):
    try:
        myfile = open(myfile,'r')
        total = 0
        NORN = 0
        Avg = 0
        line = myfile.readline()
        while line != "":
            randomNumber = int(line)
            total += randomNumber
            NORN += 1
            Avg = total / NORN
            print( randomNumber )
        line = myfile.readline()
    except IOError:
        print("Problem with file being opened")
    else:
        print("The average of the numbers is " + str(Avg))
        print("The total of all the numbers is " + str(total)+\
          "\nThere are " + str(NORN)+\
          " in the file")
        myfile.close()
    finally:
        print("End of program")

main()

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

использование try-except-else-finally хорошо, но я вижу, что это сбивает вас с толку, попробуйте сначала узнать try-except.

у вас нет завершающего цикла в

def generateRandomNumber(myfile):
    ....
            randomNumber = generateRandomNumber(myfile)

и

while line != "":
    ....
    print( randomNumber )
line = myfile.readline()

должно быть

while line != "":
    ....
    print( randomNumber )
    line = myfile.readline()

А вот ваш рабочий код

import random

def generateRandomNumber():
    randomNumber = random.randint(1,500)
    return randomNumber

def writeRandom(myfile):
    try:
        fileToBeWrittenTo = open(myfile, "w")
        numberOfRandomNumbers = int(input("How many numbers" + \
                                      " should the random file hold?:" ))
    except Exception as potentialError:
        print("An error has occured:", potentialError )
    else:
        for randomNumberCount in range(1, numberOfRandomNumbers + 1 ):
            randomNumber = generateRandomNumber()
            fileToBeWrittenTo.write(str( randomNumber ) + '\n' )
        print( numberOfRandomNumbers, "numbers have been written" + \
               " to the file ")
        fileToBeWrittenTo.close()
        displayNumber(myfile)
    finally:
        print("\nEnd of program")

def main():
    myfile = str(input("Enter file name here "))
    writeRandom(myfile)  

def displayNumber(myfile):
    try:
        my_file = open(myfile,'r')
        total = 0
        NORN = 0
        Avg = 0
        line = my_file.readline()
        while line != "":
            randomNumber = int(line)
            total += randomNumber
            NORN += 1
            Avg = total / NORN
            print( randomNumber )
            line = my_file.readline()
    except IOError:
        print("Problem with file being opened")
    else:
        print("The average of the numbers is " + str(Avg))
        print("The total of all the numbers is " + str(total)+\
          "\nThere are " + str(NORN)+\
          " in the file")
        my_file.close()
    finally:
        print("End of program")

main()
0 голосов
/ 30 ноября 2018

Функция generateRandomNumber вызывает себя рекурсивно в операторе randomNumber = generateRandomNumber(myfile), который пропускается, если вы вводите 0.

Кроме того, ваш main содержит неиспользованные with open и myfile.closeЗаявление не выполнено и не нужно.Попробуйте сократить его.

def main():
    myfile = str(input("Enter file name here "))
    generateRandomNumber(myfile)

Вы также можете значительно упростить функции generateRandomNumber и displayNumber, используя с открытым .

Это хорошоПрактикуйтесь использовать ключевое слово с при работе с объектами файла.Преимущество заключается в том, что файл правильно закрывается после завершения его набора, даже если в какой-то момент возникает исключение.Использование с также намного короче, чем написание эквивалентных блоков try-finally

Наконец, displayNumber содержит бесконечный цикл, попробуйте сделать отступ второго шага line = myfile.readline() на один шаг или переписатьфункция для чтения всего файла сразу и использования простого цикла for.

with open(myfile) as myfilehandle:
    lines = myfilehandle.readlines()

for line in lines:
    # do things
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...