Python - Ayuda con un problema de logica

 
Vista:
sin imagen de perfil
Val: 9
Ha disminuido su posición en 9 puestos en Python (en relación al último mes)
Gráfica de Python

Ayuda con un problema de logica

Publicado por Nacho (3 intervenciones) el 13/04/2020 22:01:09
Hola, estoy aprendiendo a programar en Python y tengo un pequeño error que no puedo resolver, cada vez que ejecuto el siguiente codigo:

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
answer = input("¡Aventurate en las antiguas tierras! \n¿Quieres crear un personaje?")
personajes = []
creacion = {}
value = True
 
while value == True:
    if answer == 'Si' or answer == "si":
        creacion['Nombre'] = input("¿Que nombre deseas poner?")
        creacion['Clase'] = input("Elije una clase \n Mago Guerrero Cazador")
        if creacion['Clase'] == 'Mago' or creacion['Clase'] == 'Guerrero' or creacion['Clase'] == 'Cazador':
            creacion['Raza'] = input("Elije tu raza \n Elfo Humano Enano")
            if creacion['Raza'] == 'Elfo' or creacion['Raza'] == 'Humano' or creacion['Raza'] == 'Enano':
                print("Felicidades, has creado tu personaje")
                personajes.append(creacion)
            else:
                print("Raza invalida")
        else:
            print("Clase invalida")
 
    asd = input("Quieres crear mas personajes?")
    if asd == 'Si' or asd == 'si':
        value = True
    else:
        value = False
        print('Disfruta la experiencia.')

Pretendo obtener distintos personajes los cuales guardo en la lista 'personajes', sin embargo si no rompo el bucle, elementos iguales dentro de la lista por ejemplo:
[{'Nombre': 'Eduard', 'Clase': 'Cazador', 'Raza': 'Enano'},
{'Nombre': 'Eduard', 'Clase': 'Cazador', 'Raza': 'Enano'}]

No se supone que al ejecutarse de nuevo el bucle, los valores dentro del diccionario se sobrescriben?
Desde ya, muchas gracias!
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
sin imagen de perfil
Val: 1.846
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Ayuda con un problema de logica

Publicado por tincopasan (564 intervenciones) el 14/04/2020 01:07:03
Hola:
en el código que te muestro está la respuesta a tu pregunta, pero tengo algunos comentarios antes:
1) Si vas a desarrollar algo extenso y con múltiples posibilidades te conviene comenzar con clases.
2) La mayoría de los usuarios son vagos y cometen errores , debes empezar a codificar en base a eso.(ya sé que a los usuarios les molesta que diga esto pero con el tiempo lo verás), que escriban menos y pensa que pasa si hacen otra cosa.
3)este código no es el mejor ni por lejos, es simplemente para ejemplificar.
4) es totalmente una copia de tu idea con modificaciones.

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
40
41
42
#-*- coding: utf -8 -*-
personajes = []
creacion = {}
clases=["Mago","Guerrero","Cazador"]
razas=["Elfo","Humano","Enano"]
 
respuesta = input("¡Aventurate en las tierras antiguas! \n¿Quieres crear un personaje?  1-Si  /  2-No  >>  ")
 
if respuesta == "1":
   while True:
         creacion['Nombre'] = input("¿Qué nombre deseas poner? >>  ").capitalize()
         clase = input("Elije una clase: \n   1- Mago  /  2- Guerrero  /  3-Cazador     >> ")
         while clase not in "123":
            print("No es una opción válida")
            clase = input("Elije una clase \n   1- Mago  /  2- Guerrero  /  3-Cazador   >> ")
         clase= clases[int(clase) - 1]
         print("Clase elegida...",clase)
         creacion['Clase'] = clase
         raza  = input("Elije tu raza:  \n 1-Elfo   /  2- Humano  /  3- Enano    >> ")
         while raza not in "123":
            print("No es una opción válida")
            raza  = input("Elije tu raza:  \n 1-Elfo   /  2- Humano  /  3- Enano    >> ")
         raza=razas[int(raza) - 1]
         print("Raza elegida...", raza)
         creacion['Raza'] = raza
 
         print("Felicidades, has creado tu personaje")
         personajes.append(creacion.copy())
 
         continuar = input("Quieres crear mas personajes?  1- Si  / 2-  No   >>  ")
         if continuar == "1":
            next
         elif continuar == "2":
            print("Disfruta la experiencia")
            break
         else:
            print("Opción  incorrecta")
elif respuesta == "2":
   print("Te has perdido una batalla épica, Juego Terminado")
 
else:
   print("Opción no válida! Juego Terminado ")
Saludos
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
sin imagen de perfil
Val: 9
Ha disminuido su posición en 9 puestos en Python (en relación al último mes)
Gráfica de Python

Ayuda con un problema de logica

Publicado por Nacho (3 intervenciones) el 14/04/2020 01:16:43
Primero, muchas gracias por tu ayuda! voy a investigar acerca de algunos métodos que usaste y desconozco
Segundo, siii, supuse que había maneras mucho mas eficientes y prolijas de escribir este código como por ejemplo clases pero aun no llego a esa parte jeje, aun así, muchas gracias!
Tercero, cuando escribiste 'while case not in "123" ' significa que si el usuario escribe 1, 2 o 3 el while seria true?, pense que al estar los 3 numeros bajo unas mismas comillas contaban como una misma cadena de caracteres, es decir "123" distinto a 1,2,3
me explico?

Desde ya, muchas gracias

Y una consulta mas, clase= clases[int(clase) - 1] ¿que funcion cumple el -1?
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: 1.846
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Ayuda con un problema de logica

Publicado por tincopasan (564 intervenciones) el 14/04/2020 01:26:04
es la misma cadena, pero cada"número " es un elemento independiente, "la navidad es el día 24" es una sola cadena, pero cada letra es una parte de ella, esto forma parte de slice(partes) de cadenas, te recomiendo que lo busques, es muy usado el "in" basicamente significa que está en la cadena
not in es lo contrario
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
sin imagen de perfil
Val: 9
Ha disminuido su posición en 9 puestos en Python (en relación al último mes)
Gráfica de Python

Ayuda con un problema de logica

Publicado por Nacho (3 intervenciones) el 14/04/2020 01:27:22
muchisimas gracias! tambien voy a investigar eso
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