[Python] Hilo general

Fwend

#1440 El de blackjack pero estaba investigando por mi cuenta como hacerlo y ya luego me pongo su solución xD

1
eondev

#1438 el diccionario no existe aún. Si quieres hacer eso hazlo en 2 pasos

1 respuesta
Fwend

#1442 Vale es lo que me imaginaba que estaba ocurriendo, pero por confirmar. Gracias!

werty

#1438 esto vale?

key1v = [1, 2, 3]
test_dict = {
"Key1" : key1v,
"Key2": sum(key1v),
}

1 respuesta
KooPad

#1444 No debería, el valor de Key2 va a ser constante a 6 ya que se evalúa y se asigna.

1 respuesta
werty

#1445 ah, osea que quieres algo dinámico, que confirme cambie key1, cambie key2 automáticamente

1 respuesta
Fwend

#1446 Exacto, imaginaba que no seria posible y ahora en frio al pensarlo esta bastante claro que no se iba a ir actualizando solo dinamicamente jajaja, gracias por las ayudas!

1 respuesta
werty

#1447 a ver, posible si que sería, pero tendrías que definir una nueva clase, como se ha comentado antes, y además hacerla de manera que cuando cambie el valor de key1, lo haga también el de key2. Poderse todo se puede.

En tu caso está fuera de lo que pretende el curso enseñar claro. Cuando aprendas sobre clases, ya si quiere lo retomas xd

Retil

#1438 Para hacer lo que buscas una solución que se me ocurre es crear una clase con sus metodos propios y desde dentro de la clase controlar que cada vez que cambie key1 se actualize el valor de key2. Puedes hacer que la devolucion de la clase sea un diccionario y, a efectos practicos, habrias implementado esa idea.

CaNaRy_r00lz

Lo pongo aqui para no hacer spoiler en el otro hilo, pero estoy teniendo un error de indentacion que no entiendo, estaba funcionando y de repente sin tocarlo me suelta este error

File "C:...", line 20
deal_card()
....................^ esto apunta al parentesis
IndentationError: expected an indented block

spoiler

Estoy probando para hacer el blackjack de otra forma y coño no entiendo pk me dice lo de la indentacion

Lo flipo, solo he añadido algo depues del if y ahora no me da el error, no tiene sentido o si?

3 respuestas
LR

#1450 si tienes un if "vacío" se queda esperando a que escribas después que hacer en caso de que la condición sea verdadera, si no pones nada, pilla todo lo que viene después como código a ejecutar en caso de verdadero, por lo que te pilla todo lo siguiente como fallo de indentacion

Edit: Aún no he llegado a esa parte, pero si tu codigo es lo que has puesto, el fallo viene de ahí, de tener un if sin un "contenido" por así decirlo

1 respuesta
CaNaRy_r00lz

#1451 uhm juraria que cuando no me daba el error tambien lo tenia vacio, pero lo tendre en cuenta, gracias!

2 respuestas
eondev

#1452 no puede funcionar un if vacío nunca de la vida tranquilo XD

4
NocAB

#1452 no veo el sentido de ese if sin nada pero si es para ir probando lo que tienes y luego rellenarlo puedes ponerle un pass.

2 1 respuesta
CaNaRy_r00lz

#1454 Si exacto, voy probando poco a poco, que si me lio a meter cosas y luego me falla algo no se donde empezar, asi que prefiero ir pasito a paso, no conocia lo del pass, muchas gracias!

LR

#1450 Por cierto, acabo de hacer el ejercicio y deberias cambiar los random.sample() por random.choices(), ya que una de las reglas que te dicen, es que las barajas son infinitas y que las cartas no salen de las barajas una vez que se seleccionan. Con sample, te saca un valor y no puede repetirse a menos que lo tengas repetido en la lista, con choices puede pillarte 20 veces el mismo

Para el resto, hace muchos años que no toco nada de codigo, hasta que punto esto sigue o no sigue buenas practicas y/o esta bien estructurado? Es el mismo ejercicio que el de #1450 , estoy teniendo "problemas" siguiendo el curso mas que nada por no saber si estoy estructurando bien las cosas o no (usar recursividad en vez de loops por ejemplo o separar en demasiadas funciones)

ejercicio blackjack
2 respuestas
3njoy

#1450 Quizas tuvieras la tabulacion del IF mal , yo aun no me aclaro bien, pero es una tonteria que te da error y cuando los tabulas bien se arregla todo.
También creo que es correcto lo que dice #1456

1 respuesta
CaNaRy_r00lz

#1456 #1457 Puede que tuviera mal la tabulacion pero la hice de nuevo.

No he mirado ninguna de las pistas, fui a la burro, es decir, jugue un par de partidas al blackjack y luego me puse a hacerlo, quitando de como llamar la funcion y demas.

Gracias no habia visto que samples no repite valores dentro de la misma lista, pensaba que al decirte que pillara 2 samples, es como si hiciera 2 listas y pillara 1 valor de cada una.

inmor

probablemente mañana o pasado termine con este curso: https://www.udemy.com/course/complete-python-bootcamp/

Cual creeis que es la mejor manera de continuar? He pensado en empezar a aprender JS+php y hacer 20-30 mins al dia algo de codigo en python para no olvidar lo aprendido.

1 respuesta
PiradoIV

#1459 Pon lo que has aprendido en práctica, haz proyectos reales.

1
1mP

Estoy en un curso de Python que he empezado ayer y hemos dado el tema este del "if", lo que hay un simbolo que se me ha olvidado que era: "!=" . Cuando estamos haciendo una estructura "if" a que se refiere? Venía a significar como "Diferente de" ?

Muchas gracias.

3 respuestas
eondev

#1461 sip

1
M

#1461

if 4 == 4:
    print('4 es igual a 4.')
    
if 4 != 2: print('4 NO es igual a 2.')
1
LR

#1461 si, tienes == y lo contrario !=

Te sirve tanto para ifs como para cualquier estructura con una comparación

1
gonya707

Y en python tambien tienes la keyword not

if a != b:
  print("blablabla")

es lo mismo que

if not a == b:
  print("blablabla")
1
1mP

Buenas tardes a todos, hoy vengo con otra duda:

Tengo un ejercicio que dicta esto:
Cambia los elementos negativos de una lista por sus valores positivos.

El resultado sería este:

mi_lista = [4, 7, -3, 6, 10, 8, -1]

num = 0

for index in mi_lista:
  if index < 0:
    index = index * -1
    mi_lista[num] = index
  num = num + 1

print(mi_lista)

Voy entendiendolo todo hasta que llego a mi_lista[num] = index .

¿Cuál sería la interpretación de eso? mi_lista ya es una lista, pero está usando num cómo índice? Y en tal caso, no entiendo el uso ese ahí. No sé, lo veo y me suena a chino.

Alguien que me pueda arrojar un haz de luz? Lo estoy llevando bastante regular, pero bueno, quiero terminar el curso por mis cojones morenos.

2 respuestas
eondev

#1466 te ralla porq usas el nombre de índice en vez de algo representativo. Esos valores qué son? Pues eso. Num es el verdadero índice que vas incrementandolo.

1
refresco

#1466

si tu en python pones un bucle como

lista = [4, 7, -3, 6, 10, 8, -1]
for index in lista:
.....

index te va a tomar los valores de la lista, en este caso 4,7,-3,6,... NO los indices(0,1,2,3,4...)
entonces una vez que tu compruebas que el numero de la lista(index) es negativo y le cambias el valor, ahora necesitas guardar ese valor en la posicion correcta de la lista.
Para eso creas la variable num y le vas sumando +1 en cada iteracion. Este valor de num toma los valores(0,1,2,3,4,5).

Tambien existe la funcion enumerate, que te hace directamente eso

for num,index in enumerate(mi_lista):

1
Wei-Yu

si le das la vuelta al naming imagino que te sería más sencillo de entender; no sé por qué llama "index" al ítem en la lista y "num" al índice que usas para recorrerla

mi_lista = [4, 7, -3, 6, 10, 8, -1]

# inicializamos el índice a 0 para empezar por el 4 del principio
index = 0

for num in mi_lista:

  # si el número es negativo, primero le cambiamos el signo
  # y después se guarda el número en el índice que toca
  if num < 0:
    num = num * -1
    mi_lista[index] = num
  
  # antes de acabar el bucle se suma 1 al índice para que la próxima
  # vez sea el siguiente número
  index = index + 1

print(mi_lista)

con los nombres del revés si sigues el proceso tú a mano uno a uno (primero índice 0 con número 4, luego índice 1 con número 7, etc) lo verás más nítido imagino

2
hda

Ideal sería usar enumerate, que te da pares índice, elemento en una lista/iterable.

for i, ele in enumerate(mi_lista):
   if ele < 0: mi_lista[i]=-ele
1

Usuarios habituales