#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. Тьфу, я чувствую себя глупо.