2015-04-18 5 views
-1

Мне нужно создать функцию, которая будет печатать наименьшее, наибольшее и среднее значение n количество номеров, введенных пользователем.наименьшее, наибольшее и среднее значение n чисел, вводимых пользователем

Моя функция, до сих пор, может печатать среднее и наибольшее значение n количество цифр, введенных пользователем, но я застрял на поиске наименьшего значения.

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

def main(): 

    n = int(input("how many?")) 
    if (n>0): 
     counter=0 
     total=0 
     l_v=0 

     while counter<n: 
      x = int(input("enter next number")) 
      total=total+x 
      counter=counter+1 
      if x>l_v: 
       l_v=x 


     print ("the largest value is {0}".format(l_v))  
     print("the average is ", total/n) 
    else: 
     print("What? it is not possible to find the average, sorry ") 


main() 
+0

Почему я получаю downvoted? – stacker

ответ

1

Как @Padraic упоминалось, the answer that your posted to your question не работает для положительных значений, так как ваши Условный оператор проверяет только, если минимальное значение меньше 0.

Чтобы это исправить, вы можете просто присвоить первое введенное значение для всех переменных. Таким образом, вы не должны использовать положительные и отрицательные inf переменные:

def main(): 

    n = int(input("how many?")) 
    if (n>0): 
     counter=0 
     total=0 
     f_v = l_v = s_v = total =int (input("enter first value")) #first value 
     while counter<(n-1): 
      x = int(input("enter next number")) 
      total=total+x 
      counter=counter+1 
      if x<s_v: #find minimum 
       s_v=x 
      elif x>l_v: #find maximum 
       l_v=x 

     print ("the smallest value is {0}".format(s_v))   
     print ("the largest value is {0}".format(l_v))  
     print("the average is ", total/n) 
    else: 
     print("What? it is not possible to find the average, sorry ") 


main() 

Теперь ваш код будет работать без каких-либо проблем:

how many?5 
enter first value-1 
enter next number7 
enter next number0 
enter next number3 
enter next number2 
the smallest value is -1 
the largest value is 7 
('the average is ', 2.2) 
+1

о, ничего себе, я этого не понимал! Спасибо! – stacker

2

Следите за наименьшее количество также установить начальное значение в float(inf) для мин и float(-inf) для макс:

if n > 0: 
    l_v = float("-inf") 
    mn_v = float("inf") 
    sm, counter = 0, 0  
    while counter < n: 
     x = int(input("enter next number")) 
     if x < mn: 
      mn = x 
     if x > l_v: 
      l_v = x 
     sm += x 
     counter += 1 
    print("the largest value is {0}".format(l_v)) 
    print("the average is ", sm/n) 
    print("the min value is {}".format(mn_v)) 

You также может использовать петлю для работы с диапазоном:

n = int(input("how many?")) 
if n > 0: 
    l_v = float("-inf") 
    mn_v = float("inf") 
    sm = 0 
    for i in range(n): 
     x = int(input("enter next number")) 
     if x < mn: 
      mn = x 
     if x > l_v: 
      l_v = x 
     sm += x 
    print("the largest value is {0}".format(l_v)) 
    print("the average is ", sm/n) 
    print("the min value is {}".format(mn_v)) 

Или используя список comp:

n = int(input("how many?")) 
if n > 0: 
    nums = [int(input("enter next number")) for _ in range(n)] 
    print ("the largest value is {0}".format(min(nums))) 
    print("the average is ", sum(nums)/ n) 
    print("the min value is {}".format(min(nums))) 
else: 
    print("What? it is not possible to find the average, sorry ") 

sm += x является augmented assignment, который так же, как делают sm = sm + x.

При проверке пользовательского ввода и литья вы действительно должны использовать try/except поймать любой exceptions:

def get_num():   
    while True: 
     try: 
      n = int(input("enter next number")) 
      # user entered valid input, return n 
      return n 
     except ValueError: 
      # could not be cast to int, ask again 
      print("Not an interger") 

while True: 
    try: 
     n = int(input("how many?")) 
     break 
    except ValueError: 
     print("Not an interger") 

if n > 0: 
    l_v = float("-inf") 
    mn_v = float("inf") 
    sm, counter = 0, 0  
    while counter < n: 
     x = int(input("enter next number")) 
     if x < mn: 
      mn = x 
     if x > l_v: 
      l_v = x 
     sm += x 
     counter += 1 
    print("the largest value is {0}".format(l_v)) 
    print("the average is ", sm/n) 
    print("the min value is {}".format(mn_v)) 
+0

жаль, что я должен был сказать, что это должен быть цикл while. Может быть, я должен поместить f_v = int (input («ввести первое значение»), тогда .... если x stacker

+1

@stacker, логика все еще точно такая же, независимо от того, используете ли вы цикл while или диапазон –

2

Вы можете добавить элементы в список, пока данные входа пользователя.

Когда пользователь будет выполнен, просто используйте min(), max() и sum() (и, возможно, len()) в списке.

0

Это то, что я закончил делать ... Просто отработал сам, испытав проб и ошибок.

Я очень ценю ответы! Дает мне другой способ взглянуть на проблему!

Ответ:

def main(): 

    n = int(input("how many?")) 
    if (n>0): 
     counter=0 
     total=1 
     l_v=0 
     s_v= 0 
     f_v = int (input("enter first value")) 
     while counter<n: 
      x = int(input("enter next number")) 
      total=total+x 
      counter=counter+1 
      if x<f_v: 
       s_v=x 
      elif x>l_v: 
       l_v=x 

     print ("the smallest value is {0}".format(s_v))   
     print ("the largest value is {0}".format(l_v))  
     print("the average is ", total/n) 
    else: 
     print("What? it is not possible to find the average, sorry ") 


main() 
+1

Ваш код не будет работать, если пользователь не вводит отрицательное число, тогда 0 всегда будет меньше любого введенного числа.Вы также попадаете, если пользователь просто вводит отрицательные числа для самого высокого значения или сначала вводит наивысшее значение. –

+0

Чтобы предотвратить то, что указал @PadraicCunningham, вы можете инициализировать 'l_v'' 'sys.minint' и' s_v' '' sys .maxint' – kstenger

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