Código:

quota = 22

a = int(input("Enter a number: "))
b = int(input("Enter a number: "))
c = int(input("Enter a number: "))
d = int(input("Enter a number: "))
e = int(input("Enter a number: "))

Me gustaría que así, si al menos 2 de las variables a - f son iguales o superiores a la cuota variable que se imprime "Cuota cumplida"

Preferiblemente me gustaría de la manera más eficiente y comprensible.

1
birdseyeassassin 27 oct. 2017 a las 22:55

8 respuestas

La mejor respuesta

if (sum([x >=quota for x in [a,b,c,d,e]])) >= 2: print("Quota met")

O

if (sorted([a,b,c,d,e])[-2] >= quota): print("Quota met")

1
Acccumulation 27 oct. 2017 a las 20:22

Puede usar un ciclo while para hacer el círculo 6 veces (y no necesita variables)

quota = 22
n = 6
res = 0
while n != 0:
  if(int(input("Enter a number: ")) >= quota):
    res += 1
  n -= 1

if(res >= 2):
  print("Quota met")
else:
  print("not met2")

O con su método y variables:

quota = 22

a = int(input("Enter a number: "))
b = int(input("Enter a number: "))
c = int(input("Enter a number: "))
d = int(input("Enter a number: "))
e = int(input("Enter a number: "))
f = int(input("Enter a number: "))



if (len([x for x in [a,b,c,d,e,f] if x>=quota]) >= 2): print("quota met!")
2
Damián Rafael Lattenero 27 oct. 2017 a las 20:35

Hubiera preferido recopilar la entrada en una lista desde el principio:

numbers = [int(input("Enter a number: ")) for i in range(5)]

Podría decirse que la legibilidad sería más simplificada, y duplicar (a,b,c,d,e) significa que cualquier actualización futura del código significaría que los cambios deben ocurrir en más de un lugar.

if numbers.count(quota) >= 2: print("Quota met")
0
Tjaart 27 oct. 2017 a las 21:18

Puede crear un iterable de las entradas y resumir el valor bool para todos los elementos que se prueban iguales o por encima del valor de la cuota:

if sum(x >= quota for x in (a, b, c, d, e, f)) >= 2:
    print('quota met')
2
Moses Koledoye 27 oct. 2017 a las 20:08

El enfoque más fácil, en mi humilde opinión, sería simplemente count la cantidad de veces que quota aparece allí:

if (a, b, c, d, e).count(quota) >= 2:
    print "quota met"
6
Mureinik 27 oct. 2017 a las 19:59

Usando reduce:

Reducir es una función realmente útil para realizar algunos cálculos en una lista y devolver el resultado. Aplica un cálculo continuo a pares secuenciales de valores en una lista.

In [1]: a,b,c,d,e = 5,6,7,8,9
In [2]: quota=7
In [3]: f=lambda x, y: x + 1 if y >= quota else x
In [4]: reduce ( f, [a,b,c,d,e], 0 )
Out[4]: 3

No es realmente legible, pero cada cuerpo ama reducir.

Editado debido al comentario de @ StefanPochmann - función f corregida

1
dani herrera 28 oct. 2017 a las 19:53
  quota = 22
cc=0

a = int(input("Enter a number: "))
b = int(input("Enter a number: "))
c = int(input("Enter a number: "))
d = int(input("Enter a number: "))
e = int(input("Enter a number: "))

if (a==quota):
    cc=cc+1
if (b==quota):
    cc=cc+1
if (c==quota):
    cc=cc+1
if (d==quota):
    cc=cc+1
if (e==quota):
    cc=cc+1

if(cc>=2):
    print('Quota met')
else
    print('Quota not met')

Paso 1: obtenga las entradas

Paso 2: compara cada entrada con la cuota

Paso 3: si la entrada coincide con la cuota, aumente el contador (cc) en uno

Paso 4: repita el paso 3 para otra entrada

Paso 5: comprueba el contador si es mayor o igual que 2 imprime "Cuota cumplida"

0
Harsh.jaiswal 27 oct. 2017 a las 20:08

Haga que las llamadas de entrada sean iterativas y pruebe si son mayores que 22. Si crean una lista booleana, cuente cuántos valores son iguales o mayores que la cuota.

quota = 22

#create empty list
b_ls = []

# iterate input and check if it's larger than quote
for i in range(5):
  b_ls .append(int(input('Enter a number: ')) >= quota)

# print if quota is meta
if b_ls .count(True) >= 2: print('Quota met')
0
Vico 27 oct. 2017 a las 20:09