Buenas ante todo saludos, soy nuevo por aca
me disculpan si tenia que presentarme en alguna parte del foro, pero no e revisado bien
tengo un problema con un ejercicio que me mandaron en clases de python
es el siguiente
>>>> Hacer un programa que solicice una oracion y divida las palabras en la pantalla con movinientos diferentes de cada palabra <<<<<
lo estoy haciendo en la pagina de ccodeskulptor.org (una excelente pagina donde puedes hacer tus programas y pasarlos con el link >>>>>
http://www.codeskulptor.org/#user41_FXiCUyquNL_0.py
________________________________________________________________
# programa
import simplegui
import random
oracion = ""
posicion = [75, 75]
ancho = 1100
alto = 800
intervalo = 900
def update(texto):
global oracion
oracion = texto.split()
def tick():
x = random.randrange(50, 600)
y = random.randrange(20, 600)
posicion[0] = x
posicion[1] = y
def draw(canvas):
canvas.draw_text(str(oracion), posicion, 30, "skyblue")
frame = simplegui.create_frame("texto", ancho, alto)
texto = frame.add_input("Escriba su oracion:", update, 150)
frame.set_draw_handler(draw)
timer = simplegui.create_timer(intervalo, tick)
frame.start()
timer.start()python
_____________________________________________________________
como pueden ver ya separe la oracion usando el metdo Split pero no se como hacer para que me muestre las palabras en lugares distintos, con distintos movimientos
E intentado tomarlo como una lista pero al tratar de usar >> str(oracion(0)) << me dice que no es elegible
Si alguien puede ayudarme a solucionar esto se lo agradezco de antemano
no uso ni por casualidad codeskulptor por varios motivos, pero viendo lo que intentas hacer y ya que:
canvas.draw_text(str(oracion), posicion, 30, "skyblue")
evidentemente el primer argumento debe ser una cadena que estás manejando en la función update, al hacer split da como resultado una lista, deberías dentro de la función declarar por ejemplo:
oracion = oracion[0]
y de esa forma obtener la primer palabra de la lista, el resto ya es por tu cuenta.
Cita de: tincopasan en 17 Mayo 2016, 01:44 AM
no uso ni por casualidad codeskulptor por varios motivos, pero viendo lo que intentas hacer y ya que:
canvas.draw_text(str(oracion), posicion, 30, "skyblue")
evidentemente el primer argumento debe ser una cadena que estás manejando en la función update, al hacer split da como resultado una lista, deberías dentro de la función declarar por ejemplo:
oracion = oracion[0]
y de esa forma obtener la primer palabra de la lista, el resto ya es por tu cuenta.
Hola tincopasan
gracias por tu respuesta pero la verdad o estoy tapado o no se que estoy pensando
e intentado hacer de varias formas pero la unica que me resulta es creando varias variables, varias posciones, y varios canvas
pero el detalle esta es que es limitado a la cantidad de palabras (ejemplo puedo colocar para 7 palabras) pero si la oracion lleva mas de las 7 palabras quedaria por fuera
la otra que se me ocurrio es usar un for dentro de la funcion update
http://www.codeskulptor.org/#user41_WV9ue6w9Fj_1.py
__________________________________
import simplegui
import random
oracion = ""
palabras = ""
position = [50, 50]
width = 500
height = 500
interval = 800
def update(texto):
global oracion
global palabras
oracion = texto.split()
for palabras in oracion:
return palabras
def tick():
x = random.randrange(0, width)
y = random.randrange(0, height)
position[0] = x
position[1] = y
def draw(canvas):
canvas.draw_text(str(palabras), position, 36, "skyblue")
frame = simplegui.create_frame("Home", width, height)
texto = frame.add_input("Escriba su oracion:", update, 150)
frame.set_draw_handler(draw)
timer = simplegui.create_timer(interval, tick)
frame.start()
timer.start()
___________________________________
pero igual me sigue mandando 1 sola palabra de la oracion el resto no
la verdad ya ni se que hacer, llevo 2 dias en esto jaja
Gracias de nuevo por tu respuesta
y si pones el for en la otra función:
def draw(canvas):
for palabras in oracion:
canvas.draw_text(str(palabras), position, 36, "skyblue")
ahora tendrías que resolver lo de la posicion de cada palabra
Estuve jugado con tu código un rato, esto es lo que hice por si te sirve de algo...
#Jonathan Romero
#C.I. 13.494.537
import simplegui
import random
oracion = ""
tmp = ""
posicion = [75, 75]
ancho = 1100
alto = 800
intervalo = 900
def update(texto):
global tmp
tmp = texto.split()
def tick():
global oracion
global tmp
x = random.randrange(50, 600)
y = random.randrange(20, 600)
if(len(tmp) > 0):
oracion = tmp[random.randint(0,len(tmp)-1)]
posicion[0] = x
posicion[1] = y
def draw(canvas):
canvas.draw_text(str(oracion), posicion, 30, "skyblue")
random.seed()
frame = simplegui.create_frame("texto", ancho, alto)
texto = frame.add_input("Escriba su oracion:", update, 150)
frame.set_draw_handler(draw)
timer = simplegui.create_timer(intervalo, tick)
frame.start()
timer.start()