[Python] Hilo general

Chupachota

Me podéis recomendar algún curso online que esté bien?
Ahora mismo estoy haciendo este: https://mva.microsoft.com/es-es/training-courses/introducci-n-a-la-programaci-n-con-python-8360?l=erdPeDP8_6504984382
Pero me gustaría hacer otro más completo y que profundice más cuando lo acabe.

2 respuestas
MartiONE

#271 que lvl tienes? partes desde 0?

1 respuesta
D

#271 https://www.codecademy.com/pt-BR/learn/python

1 respuesta
Chupachota

#272 Prácticamente desde 0, sí.

#273 Gracias.

B

sabe alguno porque python no me deja hacer esto?

for i in lista:
for j in lista[i+1,2]
1 respuesta
Vashealer

#275 indentación

1 respuesta
B

#276 y como se pone?

1 respuesta
Vashealer

#277

for i in lista:
    for j in lista[i+1:2]:
        pass  # stuff
1 respuesta
B

#278 jJAJAJA coño eso ya sabia que era asi, es que no copie y pegue el codigo si no que lo escribi aqui directamente y salio asi sin estar ordenadito, la cosa es que no va poniendolo bien

1 respuesta
Vashealer

#279 si pones el código entero y qué error te da sería de ayuda :P

1 respuesta
B

#280

spoiler

Traceback (most recent call last):
File "C:\Users\hdfh\Desktop\ejemplos\termo.py", line 25, in <module>
for j in bolas[(i+1):2]:
TypeError: unsupported operand type(s) for +: 'sphere' and 'int'

1 respuesta
Vashealer

#281 parece que i es del tipo 'sphere' y lo estás intentando sumar con un int.

Cuando necesitas trabajar con índices es mejor utilizar enumerate() :

for idx, obj in enumerate(list):
    pass

De esta manera en obj tienes la sphere que estás iterando y en idx el índice de la iteración. Puedes indicarle a enumerate el inicio, por si quieres que empiece por 1 en vez de por 0. :

for idx, obj in enumerate(list, 1):
    pass
1 respuesta
B

#282

for j,obj in enumerate(bolas,1):

Traceback (most recent call last):
File "C:\Users\hdfh\Desktop\ejemplos\termo.py", line 27, in <module>
if sqrt((j.pos.x-i.pos.x)**2)<(i.radius+j.radius):
AttributeError: 'int' object has no attribute 'pos'

tampoco va

1 respuesta
Vashealer

#283 a ver... en el post anterior te he dicho que el primer parámetro es el índice y el segundo es el objeto en sí. En este caso estás utilizando el índice para acceder al attr pos, tienes que usar el obj.

1 respuesta
B

#284 lo siento pero npi xD. que objeto pongo? sphere? i?

2 respuestas
Kaiserlau

#285 dale un type(a) o un type(bolas[0])
Creo q ese TypeError: unsupported operand type(s) for +: 'sphere' and 'int'
esta apuntando a que estas intentando sumar o iterar un objeto con un int

tambien podrias manejar esa tupla de esferas como un diccionario, asi juegas con keys y no con posiciones en la tupla..

2 respuestas
Vashealer

#285 A ver, te pongo la idea otra vez, el elemento de la lista es el segundo parámetro, a ver si con este código te queda más claro :

lista_con_cosas = []
for indice_i, cosa in enumerate(lista_con_cosas):
    for indice_j, otra_cosa in enumerate(lista_con_cosas[indice_i+1:2]):
        # ahora en indice_i y indice_j tienes los indices :)
        # en cosa y otra_cosa tienes las cosas xd
        otra_cosa.pos = 0
        cosa.pos = 3
3 1 respuesta
B

#286 <class 'visual_common.primitives.sphere'>

1 respuesta
Vashealer

#286 no es cosa del type en este caso según lo que ha puesto, es que está utilizando la propia esfera de la iteración anterior para sumarla con un int. De ahí que necesita el enumerate() o trabajar con índices a mano.

2 respuestas
Kaiserlau

#288 atiende a #287 lo q estas haciendo en este for:

for j in bolas[(i+1):2]:
for objeto en bolas[(objeto+1):2]:

Y obviamente no puedes sumar 1 a un objeto xd

#289 solo se lo digo para q entienda el xq de ese error

1 1 respuesta
B

#289 #290

for indice_i,i in enumerate(bolas):
        i.pos.x=(i.pos.x+i.velocidad.x*t)
        i.pos.y=i.pos.y+i.velocidad.y*t
        for indice_j,j in enumerate(bolas[indice_i:]):

graciasss. Ahora ya funciona perfectamente y era eso lo que me estaba dando problemas y no hacia bien el calculo

2
B

Hola, un amigo y yo estamos atascados en un ejercicio que el enunciado es así:
Vas andando por la calle y te encuentras con alguien. Si es un amigo le das 20 euros y si no es un amigo no le das nada. Puede suceder hasta 5 veces y se detiene si encuentras al amigo
Y estamos atascados tal que así

intentosRealizados=0

print('A ver si encontramos al amigo al que le debes dinero. Eres tu mi amigo?')

amigo=True
desconocido=False

while intentosRealizados<5:
    print ('Es este un amigo o un desconocido?')
    estimacion=input('Es este un amigo o un desconocido?')
    estimacion=bool(True or False)
    
intentosRealizados=intentosRealizados+1 if estimacion==True: break if estimacion==False: print('Ok. Sigamos buscando') if estimacion== True: print('Toma los 20 euros')

Si alguien nos puede echar una mano nos vendria muy bien

1 respuesta
Deoxys
estimacion=bool(True or False)

Eso va a ser siempre True, no?

Creo que lo que quieres hacer es

estimacion=bool(estimacion)

Y en las condicionales, en lugar de hacer

if variable==True: 
if variable==False:

Puedes hacer

if variable:
if not variable:

Y bueno, otra cosa, podrías ahorrarte la condicional del final poniendo el print de 'toma los 50€' antes del break :)

1 respuesta
B

#293 Es que nos sigue saltando true siempre

intentosRealizados=0

print('A ver si encontramos al amigo al que le debes dinero. Eres tu mi amigo?')

amigo=True
desconocido=False

while intentosRealizados<5:
    print ('Es este un amigo o un desconocido?')
    estimacion=input('Es este un amigo o un desconocido?')
    estimacion=bool(estimacion)
    
intentosRealizados=intentosRealizados+1 if amigo: print ('Toma los 20 euros') break if desconocido: print('Ok. Sigamos buscando')
1 respuesta
Che931

#292

print ('Es este un amigo o un desconocido?')

Esta línea la puedes quitar porque el método input te lo mostrará igualmente.

estimacion=input('Es este un amigo o un desconocido?')
estimacion=bool(True or False)

Si lo que introduces son las palabras amigo/desconocido entonces en la segunda línea debes comparar si lo leído es amigo o desconocido:

texto = input('Es este un amigo o un desconocido?')
estimacion = texto == "amigo"

He renombrado la variable estimación a texto porque puede traerte problemas en el futuro al usarla como dos cosas diferentes. Lo he probado y funciona pero claro no sé si esas son las palabras que vas a meter en el input()

1 respuesta
B

#295

intentosRealizados=0

print('A ver si encontramos al amigo al que le debes dinero. Eres tu mi amigo?')

amigo=True
desconocido=False

while intentosRealizados<5:
    texto = input('Es este un amigo o un desconocido?')
    estimacion = texto == "amigo"
    
intentosRealizados=intentosRealizados+1 if amigo: print ('Toma los 20 euros') break if desconocido: print('Ok. Sigamos buscando')

Nos sigue dando desconocido por true

2 respuestas
Deoxys

#294 Ouch mierda, estoy espeso y se me ha colado esa. bool() siempre devuelve true en una cadena de texto no vacía.

#296 Estás definiendo arriba amigo y desconocido, pero luego no los estás cambiando porque la entrada del usuario la guardas en 'estimacion'

1 respuesta
B

#297 Ya lo cambié, pero vamos, que estamos en las mismas

Che931

#296 Esos dos if no tiene sentido. Básicamente lo que te debería quedar era:

intentosRealizados=0

print('A ver si encontramos al amigo al que le debes dinero. Eres tu mi amigo?')

while intentosRealizados<5:
    texto = input('Es este un amigo o un desconocido?')
    estimacion = texto == "amigo"

    intentosRealizados += 1

    if estimacion:
        print('Toma los 20 euros')
        break

    print('Ok. Sigamos buscando')

estimación es True si la entrada es amigo y False en otro caso

2 2 respuestas
B

#299 Mira tio gracias porque nos tenia quemados esto ya. +1