2012-09-06 61 views
6

Tengo que pedirle al usuario que ponga algunos números y luego imprima el tamaño, suma, promedio, mínimo y máximo. Puedo obtener las 3 primeras cosas, pero estoy estancado en el mínimo y el máximo. El problema que tengo es que no puedo utilizar sort() porque necesito para hacer la lista un número entero uno, pero no se puede utilizar una lista de números enteros para split()Encontrar el mínimo y máximo en python

Aquí está mi código:

number = raw_input('Enter number:') 
    list_of_numbers = number.split() 
    tally = 0 
    sum = 0 
     while number!= '': 
     tally = tally + 1 
     sum = sum + int(number) 
     average = float(sum)/float(tally) 
     number = raw_input('Enter number:') 
    print "Size:", tally 
    print "Sum:", sum 
    print "Average:", average 

Alguna pista ? Gracias

Respuesta

3

Creo que puedes usar min() y max() para encontrar esos valores.

+0

no creo que existe – user1008073

+4

@ user1008073 http://docs.python.org/library/functions.html#min – squiguy

16

¿Tiene permiso para usar las funciones incorporadas de Python? Si es así, es más fácil:

number = raw_input('Enter number:') 
list_of_numbers = number.split() 

numbersInt = map(int, list_of_numbers) # convert string list to integer list 

print "Size:", len(numbersInt) 
print "Min:",  min(numbersInt) 
print "Max:",  max(numbersInt) 
print "Sum:",  sum(numbersInt) 
print "Average:", float(sum(numbersInt))/len(numbersInt) if len(numbersInt) > 0 else float('nan') 

donde numbersInt = map(int, list_of_numbers) convierte cada número de serie de la lista a un entero. Cada función tiene el siguiente significado:

  • len calcula la longitud de una lista
  • min calcula el mínimo
  • max calcula el máximo
  • sum calcula la suma de una lista

No hay una función media en la biblioteca estándar de Python. Pero puede usar numpy.mean() en su lugar.

+0

Esta es la forma más Pythonic y uno más eficiente. – jurka

1

Usted tiene dos opciones:

  • Se podría comparar el número actual de los extremos anterior y actualizar su mínimo y máximo en consecuencia;

    import sys 
    tally = 0 
    sum = 0 
    nmax = -sys.maxint 
    nmin = +sys.maxint 
    number = raw_input('Enter number:') 
    while number!= '': 
        number = int(number) 
        if number > nmax: 
         nmax = number 
        elif number < nmin: 
         nmin = number 
        tally = tally + 1 
        sum += number 
        average = float(sum)/float(tally) 
        number = raw_input('Enter number:') 
    

    Utilizamos el entero más grande en su sistema (sys.maxint) para inicializar nuestra nmin y nmax

  • Se podría almacenar cada número en una lista, a continuación, realizar todas las operaciones a la vez:

    number = raw_input('Enter number:') 
    numbers = [] 
    while number!= '': 
        numbers.append(int(number)) 
        number = raw_input('Enter number:') 
    numbers.sort() 
    nmin = numbers[0] 
    nmax = numbers[-1] 
    tally = len(numbers) 
    nsum = sum(numbers) 
    avg = nsum/float(tally) 
    
1

Esto puede ser menos complejo si no estoy equivocado.

len_min_max_sum=reduce(lambda x,y : (x[0]+1,y,x[2],x[3]+y) if x[0]>y else (x[0]+1,x[1],y,x[3]+y) if x[2]<y else (x[0]+1,x[1],x[2],x[3]+y) ,arr,(0,arr[0],arr[0],0)) 

len_min_max_sum_avg=(len_min_max_sum[0],len_min_max_sum[1],len_min_max_sum[2],len_min_max_sum[3],float(len_min_max_sum[3])/len_min_max_sum[0]) 
1
tally = 0 
sum = 0 
while True: 
number = input('Enter number') 
list_of_numbers = number.split() 
if number == '': 
continue 
else: 
tally = tally + 1 
sum = sum + int(number) 
average = float(sum)/float(tally) 
print('Size:', tally) 
print('Sum:', sum) 
print('Average:', average) 
+1

Por favor edite su sangría. Es crucial para Python. – YakovL

Cuestiones relacionadas