Функция Python не запущена, интерпретатор не выдает никаких ошибок

#python #function

#python #функция

Вопрос:

Я очень новичок в Python и у меня проблема с программой, которую я делаю для класса. main() и create_file работают, но когда он переходит к read_file, интерпретатор просто сидит там. Программа запущена, но ничего не происходит.

Ответ, вероятно, что-то очень простое, но я просто не вижу его. Заранее спасибо за любую помощь.

Я использую IDLE (Python и IDLE v. 3.5.2)

Вот код:

 import random

FILENAME = "randomNumbers.txt"

def create_file(userNum):

    #Create and open the randomNumbers.txt file
    randomOutput = open(FILENAME, 'w')

    #Generate random numbers and write them to the file
    for num in range(userNum):
        num = random.randint(1, 500)
        randomOutput.write(str(num)   'n')

    #Confirm data written
    print("Data written to file.")

    #Close the file
    randomOutput.close()

def read_file():

    #Open the random number file
    randomInput = open(FILENAME, 'r')

    #Declare variables
    entry = randomInput.readline()
    count = 0
    total = 0

    #Check for eof, read in data, and add it
    while entry != '':
        num = int(entry)
        total  = num
        count  = 1

    #Print the total and the number of random numbers
    print("The total is:", total)
    print("The number of random numbers generated and added is:", count)

    #Close the file
    randomInput.close()

def main():

    #Get user data
    numGenerate = int(input("Enter the number of random numbers to generate: "))

    #Call create_file function
    create_file(numGenerate)

    #Call read_file function
    read_file()

main()
  

Комментарии:

1. while entry != '': Вы никогда не меняетесь entry внутри цикла, поэтому он будет продолжать цикл вечно.

2. Вы уверены, что он действительно запущен? Вы определили некоторые функции, но вызывали ли вы их когда-нибудь?

3. @Gator_Python Посмотрите на последнюю строку: main()

4. Ах, спасибо @Barmar, я не прокручивал вниз.

5. @Barmar Ты прав — я забыл поместить entry = randomInput.readline() в цикл while — спасибо! Я чувствую себя немного глупо, лол.

Ответ №1:

У вас есть бесконечный while цикл в функции, поскольку entry он никогда не изменяется во время цикла.

Pythonic способ обработки всех строк в файле выглядит следующим образом:

 for entry in randomInput:
    num = int(entry)
    total  = num
    count  = 1
  

Комментарии:

1. Вы можете сделать его еще более питоническим, обернув с помощью диспетчера контекста.

2. Спасибо! По какой-то причине я думал, что цикл while остановится, когда он достигнет конца файла.

3. Я понимаю, что забыл поместить entry = randomInput.readline() внутри цикла while. Тьфу, я чувствую себя глупо.