Python - Uso de While en Python

 
Vista:
Imágen de perfil de Movalash

Uso de While en Python

Publicado por Movalash (8 intervenciones) el 20/10/2021 08:01:08
Estoy aprendiendo a programar con Python y tengo algunas dudas hasta el momento:

Sobre el uso del While:

Empecé a escribir este código para practicar el uso del While. Básicamente es un programa que solicita elegir una modalidad (jugador o equipo, representados con las letras j o J para jugador y e o E para equipo), para luego proceder a solicitar datos para al final realizar un cálculo básico.

Creo que estoy implementando mal el While en el código porque, anque elija una de las 4 opciones permitidas (j, J, e, E), luego de teclear una de las dos letras aparece el mensaje "Has introducido una modalidad incorrecta, vuelve a intentarlo." y pienso que debería aparecer si ingreso cualquier caracter que no sea j, J, e o E. Luego al elegir por sgunda vez y colocar j o J, si entra en el if selectMode == "j" or "J" y empieza a solicitar los datos del jugador.
Si se elige e o E (por segunda vez luego de que aparece el mensaje "Has introducido una modalidad incorrecta, vuelve a intentarlo." ) automáticamente entra al if selectMode == "j" or "J" y no al elif selectMode == "e" or "E".

Agradecido por el apoyo que puedan brindar.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
print("Programa de prueba para estadísticas deportivas.")
 
selectMode=(input(str("Introduzca modalidad (pulse J para jugador o E para equipo): ")))
 
while selectMode != "j" or selectMode != "J" or selectMode != "e" or selectMode != "E":
    print("Has introducido una modalidad incorrecta, vuelve a intentarlo.")
    selectMode=(input(str("Introduzca modalidad (jugador o equipo): ")))
 
    if selectMode == "j" or "J":
 
        playerName=input("Introduce el nombre del jugador: ")
 
        playerGames=int(input("Introduce los partidos jugados: "))
 
        playerGoals=int(input("Introduce la cantidad de goles marcados: "))
 
        playerAvgGol=playerGoals/playerGames    #Se pude usar la función round(x). Revisar info sobre función round()
 
        print("El avg gol del jugador " + str(playerName) + " es de " + str(playerAvgGol) + " goles por partido.")
 
        print("El programa de pruebas a culminado.")
 
        break
 
    elif selectMode == "e" or "E":
 
        teamName=(input("Introduce el nombre del equipo: "))
 
        teamGames=(int(input("Introduce la cantidad de partidos jugados: ")))
 
        teamGoals=(int(input("Introduce la cantidad de goles marcados: ")))
 
        teamGoalAverage=teamGoals/teamGames
 
        print("El avg gol del equipo " + str(teamName) + " es " + str(teamGoalAverage))
 
        print("El programa de pruebas a culminado.")
 
        break
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Francisco Javier
Val: 249
Ha aumentado su posición en 29 puestos en Python (en relación al último mes)
Gráfica de Python

Uso de While en Python

Publicado por Francisco Javier (313 intervenciones) el 20/10/2021 12:47:11
Buenas, mira en el wile si pones que mientras se cumpla una condicion pones todo indentado del while y fuera de la condición , en este caso los if deben ir fuera del while, a parte poniendo el método lower() pasa siempre a miinúsculas y ya no tienes porque hacer mención a las dos y por último el while con dos condiciones no puedes poner or porque siempre está abierta una opción y entra en el bucle aunque ponga la j o la e por eso debes utilizar el and.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
print("Programa de prueba para estadísticas deportivas.")
 
selectMode=(input("Introduzca modalidad (pulse J para jugador o E para equipo): "))
while selectMode.lower()!='j' and selectMode.lower()!='e':
    print("Has introducido una modalidad incorrecta, vuelve a intentarlo.")
    selectMode=(input("Introduzca modalidad (jugador o equipo): "))
 
if selectMode.lower() == "j":
 
 
    playerName=input("Introduce el nombre del jugador: ")
 
    playerGames=int(input("Introduce los partidos jugados: "))
 
    playerGoals=int(input("Introduce la cantidad de goles marcados: "))
 
    playerAvgGol=playerGoals/playerGames    #Se pude usar la función round(x). Revisar info sobre función round()
 
    print("El avg gol del jugador " + str(playerName) + " es de " + str(playerAvgGol) + " goles por partido.")
 
    print("El programa de pruebas a culminado.")
 
 
elif selectMode.lower() == "e":
 
    teamName=(input("Introduce el nombre del equipo: "))
 
    teamGames=(int(input("Introduce la cantidad de partidos jugados: ")))
 
    teamGoals=(int(input("Introduce la cantidad de goles marcados: ")))
 
    teamGoalAverage=teamGoals/teamGames
 
    print("El avg gol del equipo " + str(teamName) + " es " + str(teamGoalAverage))
 
    print("El programa de pruebas a culminado.")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Movalash

Uso de While en Python

Publicado por Movalash (8 intervenciones) el 22/10/2021 04:32:46
Muchísimas gracias por las sugerencias. En efecto, sacando el if y el elif del bucle, cambiando los or por and y usando la función lower(), el programa corrió de manera correcta.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
print("Programa de prueba para estadísticas deportivas.")
 
selectMode=(input(str("Introduzca modalidad (pulse J para jugador o E para equipo): ")))
 
while selectMode.lower() != "j" and selectMode.lower() != "e":
    print("Has introducido una modalidad incorrecta, vuelve a intentarlo.")
    selectMode=(input(str("Introduzca modalidad (jugador o equipo): ")))
 
if selectMode.lower() == "j":
 
    playerName=input("Introduce el nombre del jugador: ")
 
    playerGames=int(input("Introduce los partidos jugados: "))
 
    playerGoals=int(input("Introduce la cantidad de goles marcados: "))
 
    playerAvgGol=playerGoals/playerGames    #Se pude usar la función round(x). Revisar info sobre función round()
 
    print("El avg gol del jugador " + str(playerName) + " es de " + str(playerAvgGol) + " goles por partido.")
 
    print("El programa de pruebas a culminado.")
 
 
elif selectMode.lower() == "e":
 
    teamName=(input("Introduce el nombre del equipo: "))
 
    teamGames=(int(input("Introduce la cantidad de partidos jugados: ")))
 
    teamGoals=(int(input("Introduce la cantidad de goles marcados: ")))
 
    teamGoalAverage=teamGoals/teamGames
 
    print("El avg gol del equipo " + str(teamName) + " es " + str(teamGoalAverage))
 
    print("El programa de pruebas a culminado.")

Luego de haber podido mejorar el código me queda algunas dudas:
Luego de cambiar los or por and, usar la función lower(), pero dejando el if y el elif dentro del While,
¿Por qué al elegir j o e el progama termina de correr? y al colocar por primera vez cualquier otro caracter el programa indica que colocaste una modalidad incorrecta (se ejecuta el while) pero al colocar por segunda vez j o e el programa si entra en el if o el elif.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Uso de While en Python

Publicado por tincopasan (1082 intervenciones) el 22/10/2021 05:45:31
hay varias cosas:
1)
1
selectMode=(input(str("Introduzca modalidad (pulse J para jugador o E para equipo): ")))
input decuelve una cadena por lo tanto sobra con:
1
selectMode = input("Introduzca modalidad (pulse J para jugador o E para equipo): ")
2) usas muchas veces la función lower, se podría resumir a la primera declaración:
1
selectMode = input("Introduzca modalidad (pulse J para jugador o E para equipo): ").lower()
y ya no necesitas usarla más, por ejemplo:
1
while selectMode != "j" and selectMode != "e":
Se termina el script si pones lo que sigue dentro del while, porque éste solo se ejecuta si lo ingresado es distinto de "j" o "e" si querés que sea u bucle para ingresar los datos es otro while modificando los bloques actuales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar