[Python] Hilo general

NocAB

Creo que queda más claro usando sólo los índices con range(len(list)):

for i in range(len(mi_lista)):
    if mi_lista[i] < 0:
        mi_lista[i] = mi_lista[i] * -1

Aunque yo lo hubiera hecho con una list comprehension, que queda muy recogido y bonito xd

spoiler

Pero no sé cuál es la forma más recomendable.

2 1 respuesta
hda

#1471 entiendo que el comprehension se le impartirá más adelante. A mí también me parece más elegante. Pythonic XD

1 1 respuesta
NocAB

#1472 cierto, lo meto en un spoiler porque eso igual de momento es liar

Wei-Yu

Dejad a los chavalotes que camelen.

Si te lías con la sintaxis, meterte con list comprehension o añadir más variaciones para hacer lo mismo es un follonaco.

1
CaNaRy_r00lz

Buenas, alguien me puede decir como puedo buscar information para lo siguiente.

A ver si lo explico bien, tengo un inputo que es 5, 10 o 15 que es un contador de intentos. Entonces hice un while infinito que hasta que no aciertas sigues pudiendo intentarlo, y habia pensado meter ese while dentro de otro while haciendo estilo:

intentos = 0

while intentos > 5:
intentos += 1

Pero no me funciona he probado a buscar en google pero no consigo supongo poner las palabras correctas, alguna idea? o lo que intento hacer no funciona ?

3 respuestas
NocAB

#1475 puedes hacer un while True para tener un bucle infinito pero no te estoy entendiendo. Por qué quieres hacer un bucle infinito si tienes un límite de intentos? No te vale con el while intentos < limite_intentos (siendo límite_intentos 5, 10 o 15)?

1 respuesta
Kaiserlau

#1475 pon el código loquito

1 respuesta
CaNaRy_r00lz

#1476 El while true lo tengo dentro del while, supongo que me he hecho la picha un lio xD
#1477

spoiler
1 respuesta
LR

#1475 es para el "adivinador de números" no?

Lo tienes al revés, while intentos < 5, intentos +=1

Si lo quieres hacer como tú lo tienes, simplemente hazlo al reves, ponle que mientras sean mayor que 0 y le metes un intentos -= 1

1 respuesta
NocAB

#1478 yo usaría sólo el bucle del número de intentos y saldría de él cuando se acierta usando un break.

2 respuestas
LR

#1480 es para el 100 Days de Python, ahí aún no han metido nada de break, ni pass ni nada así.

1
CaNaRy_r00lz

#1479 Si es para ese mismo, bueno no se si es la forma correcta es como se me ha ocurrido hacerlo, seguro que la mujer esta lo hacen en 2 lineas xD

#1480 El numero de intentos no es fijo varia dependiendo de la dificultadad que quieras darle

1 respuesta
LR

#1482 si, me lo imaginé por lo del 5, 10, y eso.

A ver, cambia primero el planteamiento. Tienes un número fijo, en tu código. El ejercicio realmente te pide que en función de la dificultad, le pongas un número de intentos.

En vez de poner intentos < 5, hazlo al revés, plantéate los intentos como vidas. Cada fallo, 1 vida menos. Entonces puedes hacer while intentos > 0, y en cada fallo restas 1 vida. Al final si te lo planteas como cosas que ya controlas/conoces, como las vidas en un juego, te es más fácil plantear el problema cuando estás empezando y lo ves todo más abstracto.

1
Runt

Yo no estoy haciendo el 100 days, pero ando aprendiendo a programar también y he intentado hacer lo que pedía el compañero para practicar, a mi manera. Code review pls :3

import random

numeros_validos = [5, 10, 15]
contador = random.choice(numeros_validos)
eleccion = 0
intentos = 0 

while intentos <= contador:
    user_input = input('Introduce un número:')
    eleccion = int(user_input)
    
if eleccion in numeros_validos: print(f'¡El número {user_input} es correcto!') break else: print('Sigue intentándolo...') intentos += 1 if eleccion not in numeros_validos: print('Game over.')
1 respuesta
LR

#1484 el último if ya lo contemplado con el else (o eso o no se ve la indentacion en el móvil xD)

El ejercicio es un random entre 1 y 100 y en cada fallo te dice si es más bajo o más alto, hasta que te quedas sin intentos o lo aciertas.

El user_input te lo puedes saltar cambiándolo por elección = int(input(blablabla))

1
Kaiserlau

Una cosa, en el curso ese a esas alturas no podéis usar funciones y tal? aunque no cambia mucho el tema no se por ir pillando 'buenas' costumbres xd?

2 respuestas
CaNaRy_r00lz

#1486 Si, si se puede, pero sinceramente a mi por lo menos no se me ocurrio hacerlo con una funcion , es decir, lo pienso pero no se como lo plantearias

1 respuesta
LR

#1486 si, las mete bastante pronto, lo que si que es verdad que todo lo que puede, al principio, lo hace así, a pelo y a base de bucles, ni recursividad ni funciones muchas veces.

Yo de hecho al principio me miraba todas las soluciones y explicaciones a ver si decía algo de por qué si o por qué no usar recursividad y no decía nada.

1 respuesta
Kaiserlau

#1487 la lógica del juego por un lado (una funcion que compruebe los numeros etc) y el loop principal en el main.

#1488 tampoco agobiarse xd todos los caminos dan a roma.

Yo hace bastante que no toco python xd Lo que le decia a #1487 según como lo tenia. :ninjaedit:

import random

def user_imput():
    num = int(input("Make a guess:\n"))
    return num

def logica(num, secret):
    if num == secret:
        print("You won")
        return True
    elif num > secret:
        print("Too high")
    elif num < secret:
        print("Too low")

if __name__ == "__main__":
    count = 0
    secret = random.choice([5,10,15])
    while count < 3:
        if logica(user_imput(), secret):
            break
        if count < 2 :
            print('Try again')
        elif count == 2:
            print('game over')
        count += 1  
1 2 respuestas
inmor

Estoy haciendo un ejercicio de estos en los que tienes que hacer un juego de cartas y justo me salta este error definiendo una funcion, no entiendo porque xD

class Deck:


def __init__(self):
    self.deck = []  # start with an empty list
    for suit in suits:
        for rank in ranks:
            self.deck.append(Card(suit,rank))

def __str__(self):
    number_of_cards = 0
    for card in self.deck:
        number_of_cards+=1  
    print ('The deck has' + str(number_of_cards)    

def shuffle(self):
    random.shuffle(self.deck)
    
def deal(self):
    single_card = self.deck.pop()
    return single_card[/quote]

File "C:\Users\fxx\AppData\Local\Temp/ipykernel_8148/4215894479.py", line 15
def shuffle(self):
^
SyntaxError: invalid syntax

1 respuesta
Kaiserlau

#1490 creo que te falta un ) al terminar en

print ('The deck has' + str(number_of_cards))
1 1 respuesta
gonya707

Algo que aprendi hace un trillon de años aprendiendo a programar con C es que si el error te salta en la linea X y no lo ves claro mires en la X-1, veo que las viejas costumbres no se pierden

5 1 respuesta
inmor

#1491 Joder, gracias ya me estaba rayando, llevaba 20 minutos cambiando cosas y seguia saltando me estaba volviendo loco xD

1
Kaiserlau

#1492 el buen turboC

LR

#1489 ya ya, realmente no era agobio, era por ver buenas prácticas a día de hoy xD

NocAB

#1489 aprovecho para preguntarte, que yo estoy acostumbrado a usar python en notebooks, ¿qué sentido tiene poner un if name == "main" en un script simple?

1 respuesta
Kaiserlau

#1496 en la practica para estas mierdas ninguno xd, en scripts yo lo metería siempre. Simplemente por facilitarte la vida a la hora de estructurarlo desde un principio, luego quien sabe, si esto o lo otro lo vas a sacar a otro modulo. Yo lo meto ever. Me parece hasta rarow no usarlo.

pd: En jupyter y con celdas no se si tendría alguna diferencia/ventaja usarlo, supongo que no, (uso jupyter lab. reomendado over9000).

1 respuesta
NocAB

#1497 gracias, es que estoy haciendo unos scripts de automatización de una tareas con hojas de cálculo a partir de lo que hice en un primer momento en un notebook con pandas y me entran muchas dudas con estas cosas xd

Yo también uso Jupyter Lab, hasta hace muy poco usaba Jupyter Notebook pero me he cambiado y sí que parece que está mejor.

1 respuesta
Kaiserlau

#1498 Yo en jupyter empiezo poco a poco, pero luego cuando puedo voy construyendo funciones o clases o lo que tercie en cada celda. Lo uso para prototipar mis mierdas también xd (básicamente porque vas casi al vuelo). Al final termino con funciones separadas en cada celda, empiezo a jugar con ellas. Luego solo es cuestión c&p y armar el script o modulo o lo que sea.

También suelo sacar a .py y voy importando en el propio notebook. Al final lo que termino haciendo precisamente es editando el main con sus modulos separados.

pd: npi si es lo normal. A mi me vale.

1 1 respuesta
NocAB

#1499 lo haces todo desde jupyter lab o luego te pasas a otro IDE?

1 respuesta