Вычисление среднего из чисел в файле .txt с использованием Python - PullRequest
0 голосов
/ 26 марта 2012
def main():

    total = 0.0
    length = 0.0
    average = 0.0

    try:
        #Get the name of a file
        filename = input('Enter a file name: ')

        #Open the file
        infile = open(filename, 'r')

        #Read the file's contents
        contents = infile.read()

        #Display the file's contents
        print(contents)

        #Read values from file and compute average
        for line in infile:
            amount = float(line)
            total += amount
            length = length + 1

        average = total / length

        #Close the file
        infile.close()

        #Print the amount of numbers in file and average
        print('There were ', length, ' numbers in the file.' )
        print(format(average, ',.2f'))

    except IOError:
        print('An error occurred trying to read the file.')

    except ValueError:
        print('Non-numeric data found in the file')

    except:
        print('An error has occurred')


main()

Вот так выглядят числа в моем файле .txt:

78
65
99
88
100
96
76

Я продолжаю получать сообщение "Произошла ошибка" при попытке запустить. После того, как я это прокомментирую, я получаю ошибку делимости. Я попытался просто распечатать сумму и длину, чтобы увидеть, действительно ли они вычисляют, но каждый из них равен 0.0, так что, очевидно, у меня есть некоторые проблемы в том, чтобы заставить их накапливаться правильно.

Ответы [ 3 ]

2 голосов
/ 26 марта 2012

infile.read() займет весь файл, а не отдельные части. Если вы хотите отдельные части, вам придется разделить их (по пробелам) и избавиться от пробелов (это \n).

Обязательные однострочные:

contents = infile.read().strip().split()

Затем вы захотите перебрать содержимое contents, так как это будет единственная вещь, которую стоит перебрать. infile уже исчерпан, и последующие вызовы read() сгенерируют пустую строку.

for num in contents:
    amount = float(num)
    # more code here

 average = total / len(contents) # you can use the builtin len() method to get the length of contents instead of counting yourself
2 голосов
/ 26 марта 2012

infile.read() использует файл. Попробуйте вместо этого написать каждую строку.

0 голосов
/ 26 марта 2012

Я изменил ваш код, чтобы посмотреть, смогу ли я заставить его работать и при этом выглядел как можно больше вашего. Вот что я придумал:

def main():

total = 0.0
length = 0.0
average = 0.0

    try:
        #Get the name of a file
        filename = raw_input('Enter a file name: ')

        #Open the file
        infile = open(filename, 'r')  

        #Read values from file and compute average
        for line in infile:
            print line.rstrip("\n")
            amount = float(line.rstrip("\n"))
            total += amount
            length = length + 1


        average = total / length

        #Close the file
        infile.close()

        #Print the amount of numbers in file and average
        print 'There were', length, 'numbers in the file.' 
        print format(average, ',.2f')

    except IOError:
        print 'An error occurred trying to read the file.' 

    except ValueError:
        print 'Non-numeric data found in the file'

    except:
        print('An error has occurred')

main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...