2016-08-25 6 views
1

Я пытаюсь прочитать в текстовом файле целых чисел, сделать его списком, вычислить среднее значение всех целых чисел, вычислить среднее значение всех неотрицательных целых чисел, распечатать макс и мин. Мне удалось вычислить среднее значение всех целых чисел, но мне трудно получить среднее значение всех неотрицательных целых чисел и max и min.Вычисление среднего числа неотрицательных чисел из текстового файла

Вот то, что я до сих пор:

file = open("numberlist.txt", "r") 

sum = 0 

list = [] 
for num in file: 
    list.append(num) 

poslist = [] 
for number in file: 
    x = int(number) 
    if x > 0: 
     poslist.append(x) 
     sum += number 
posavg = sum/len(poslist) 
print("The number of non-negative integers is ", len(poslist)) 
print("The average of the non-negtive integers is ", posavg) 

ответ

0

Если числа разделены пробелами
(или, как я понимаю из вашего кода, новые линии)
это очень короткий и "Pythonic" задача!

Во-первых, давайте читать весь файл в числах
, а также есть файл закрывается автоматически:

with open('numberlist.txt') as f: 
    nums = [int(x) for x in f.read().split() if int(x) >= 0] 

После предыдущей 2 линии вы все неотрицательные
числа в списке называется nums !

Теперь, среднее будет:

avg = sum(nums)/len(nums) 

И мин/макс будет:

minNum, maxNum = min(nums), max(nums) 

И это все!

Теперь, я толкнул так много Python, как я думаю, что можно
в решении этой задачи, поэтому, понимая этот код вы делаете
скачок в Python!

0

Это сохраняет большую часть своего кода и добавляет неотрицательное часть к ней (возможно, следовало бы назвать положительным вместо :)

file = open("numberlist.txt", "r") 

sum = 0 
nonNegativeTotal = 0 
nonNegativeCount = 0 

list = [] 
for num in file: 
    list.append(num) 

for number in list: 
    x = int(number) 
    if x >= 0: 
     nonNegativeCount += 1 
     nonNegativeTotal += x 
    sum += x 
avg = sum/len(list) 
avgNonNegative = nonNegativeTotal/nonNegativeCount 
print("The number of integers is ", len(list)) 
print("The overall average is ", avg) 
print("The number of non-negative numbers is ", nonNegativeCount) 
print("The non-negative average is ", avgNonNegative) 

list.sort() 
print("The minimum number is ", list[0]) 
print("The maximum number is ", list[-1]) 

Для мин и макс вы могли бы сделать:?

minNum, maxNum = min(list), max(list)