2013-11-25 23 views
0

Это то, что у меня есть до сих пор, я создаю программу, которая просит пользователя ввести 7 чисел. Эти числа могут быть любыми числами. Конечный результат будет давать средние значения положительных чисел, отрицательные числа, а все числа следующим образом:Python программа, которая создает сумму отрицательных и положительных чисел?

average positive="" 
average negative="" 
average all="" 


import random 

def main(): 
     sum_positive=0 
     count_positive=0 # number of positive 
     sum_negative=0 
     count_negative=0 # number of negative 

    for i in range (7): 
     n=input("Please, enter number %d: " % i) # will display prompt like "Please, enter   number 1:" 
     print ("number entered: ",n) # this will print the entered number, one of the question 
     if n > 0: 
      count_positive += 1 
      sum_positive = sum_positive + n 
     elif n < 0: 
      count_negative += 1 
      sum_negative = sum_negative + n 
    # loop ends here 
    print("Sum of negative number is :", sum_negative) 
    print("Average negative number is : ", sum_negative*1.0/count_negative) 
    print("Sum of positive number is :", sum_positive) 
    print("Average positive number is : ", sum_positive*1.0/count_positive) 



main() 
+0

Исправьте свой отступ – jramirez

+0

Выглядит не слишком далеко от меня, но 'input' в Python 3 всегда возвращает строку. Вам нужно будет называть 'int' на нем перед сравнением с 0, позволяя пользователю вводить что-то другое, кроме числа. –

+0

, когда я запускаю его на холостом ходу, он дает мне «ожидаемый с отступом» ошибку sum_positive – user32152

ответ

0

Вы могли бы сделать что-то вроде этого.

user_input = [] 
for i in range(7): 
    user_input.append(input("Pleace, enter number %d: " % i)) 

negs = [x for x in user_input if x < 0] 
pos = [x for x in user_input if x > 0] 

print "Sum of neg ", sum(negs) 
print "Avg of neg ", sum(negs)/float(len(negs)) 

print "Sum of pos ", sum(pos) 
print "Avg of pos ", sum(pos)/float(len(negs)) 

print "Sum of all ", sum(user_input) 
print "Avg of all ", sum(user_input)/float(len(user_input)) 
+2

' filter' с 'lambda' является устаревшим , лучше использовать списки списков. 'negs = [x для x в user_input, если x <0]' или даже генератор с '(', ')'. Хорошее резюме из Guido здесь: http://www.artima.com/weblogs/viewpost.jsp?thread=98196 – tamasgal

1

Немного аккуратнее & более вещей коды.

numbers = [input("Please, enter number {}: ".format(i+1)) for i in range(7)] 
# will display prompt like "Please, enter number 1:" 
print "numbers entered:", numbers # this will print the entered numbers 

positives = [num for num in numbers if num >= 0] 
negatives = [num for num in numbers if num < 0] 

# loop ends here 
print "Sum of negative numbers is :", sum(negatives) 
print "Average negative number is :", sum(negatives)*1.0/len(negatives) 
print "Sum of positive numbers is :", sum(positives) 
print "Average positive number is :", sum(positives)*1.0/len(positives) 

List Comprehensions быстрее, чем обычные for петли & более вещий.

sum - это встроенная функция, которая возвращает сумму целых чисел/поплавков в предоставленных итерациях.

len - это встроенная функция, которая возвращает длину списка или итерации, переданной ему.

Примечание. В Python v3 print есть функция. Кроме того, input ведет себя как raw_input, поэтому для ввода целых чисел в качестве входных данных вы должны сделать int(input()).

Смежные вопросы