(python) agregar usado para listar, luego solo devuelve valor si no se ha usado

El título lo dice todo. Lo que sigue es la base de un pequeño juego de aprendizaje japonés que escribí. Solo necesito imprimir el kana si aún no se ha impreso en el ciclo actual. ¿Alguien puede ver qué es lo que estoy haciendo mal? Gracias :)

#!/usr/bin/python
from os     import system as cmd
from random import choice as random
from time   import sleep
from sys    import platform

m = ["ma",  "mi",  "mu",  "me",  "mo"]
y = ["ya",         "yu",         "yo"]
n = ["n"]

def get_dict(group):
    if   group == 1:
        return m
    elif group == 13:
        return y
    elif group == 14:
        return n
    elif group == 15:
        return m + y + n

def clear():
    if "win" in platform: cmd("cls")
    if "lin" in platform: cmd("clear")

def get_kana():
    global kana
    return random(kana)

## Initiate      ##
kana = get_dict(15)
speed = speed()
clear()
print disp
print "Please get ready!..."
sleep(5)

def chk_used():
    global used_kana
    numlpo = 0
    while numlpo < 50:
        numlpo = numlpo + 1
        kana = get_kana()
        if kana not in used_kana:
            used_kana = used_kana.append(kana)
            return kana
            break

def main():
    used_kana = []
    while True:
        clear()
        print disp
        print "Please write the following kana: \n"
        print "    " + chk_used()
        sleep(3)

main()

preguntado el 03 de mayo de 12 a las 10:05

Debe guardar la kana en un dict clasificados por sus sonidos iniciales. -

@Joel Cornett Estaba pensando en hacer eso, pero cambié de opinión porque me resulta mucho más fácil trabajar con listas cuando llamo a grupos personalizados. Aunque gracias por la sugerencia :) -

Parece que estás haciendo varias cosas mal, la principal es used_kana = used_kana.append(kana); eso está garantizado para establecer used_kana a None. -

1 Respuestas

Un par de cosas:

In chk_used, tienes la línea:

used_kana = used_kana.append(kana)

Solo hay un problema. list.append() devuelve Ninguno. Cada vez que haces esto, estás agregando kana a used_kana, pero luego está configurando el valor de used_kana a Ninguno.

used_kana.append(kana)

Será suficiente

Usted define used_kana dentro de una función

def main():
    used_kana = []

Pero tratas de referirte a él globalmente. Python busca una variable global y no la encuentra.

def chk_used():
    global used_kana

La solución: pass usó kana como argumento para chk_used()

def chk_used(usedCharacters):
    ...

def main():
    used_kana = []
        ...
        print "    " + chk_used(used_kana)

Por último:

    if kana not in used_kana:
        used_kana.append(kana)
        return kana
        break #there's no reason for this break. the return on the line before exits the function, your code will never ever execute this line.

contestado el 03 de mayo de 12 a las 10:05

¡Gracias! ¡Eso fue muy completo y parece haber resuelto todos los problemas que tenía! Agregué la interrupción después como seguridad adicional, pero entiendo que no necesariamente haría nada. Además, la velocidad no está definida ya que eliminé 10-15 funciones adicionales que ayudan a cambiar la funcionalidad de ese programa. ¡Muchas gracias por tu ayuda! Ahora entiendo agregar :) - abkai

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.