如何显示算法的所有完整信息



我正在尝试创建一个关于莫尔斯电码的二进制树。程序应该显示所有消息,但由于某种原因,它只打印第一个字母。我该怎么办?

class Tree: 
def __init__(self, data):
self.data = data
self.izq = None
self.der = None
Arriba = Tree ("    ")
Arriba.izq = Tree("E")
Arriba.der = Tree("T")
Arriba.izq.izq = Tree("I")
Arriba.izq.der = Tree("A")
Arriba.der.izq = Tree("N")
Arriba.der.der = Tree("M")
Arriba.izq.izq.izq = Tree("S")
Arriba.izq.izq.der = Tree("U")
Arriba.izq.der.izq = Tree("R")
Arriba.izq.der.der = Tree("W")
Arriba.der.izq.izq = Tree("D")
Arriba.der.izq.der = Tree("K")
Arriba.der.der.izq = Tree("G")
Arriba.der.der.der = Tree("O")
Arriba.izq.izq.izq.izq = Tree("H")
Arriba.izq.izq.izq.der= Tree("V")
Arriba.izq.izq.der.izq = Tree("F")
Arriba.izq.der.izq.izq = Tree("L")
Arriba.izq.der.der.izq = Tree("P")
Arriba.izq.der.der.der = Tree("J")
Arriba.der.izq.izq.izq = Tree("B")
Arriba.der.izq.izq.der = Tree("X")
Arriba.der.izq.der.izq = Tree("C")
Arriba.der.izq.der.der = Tree("Y")
Arriba.der.der.izq.izq = Tree("Z")
Arriba.der.der.izq.der = Tree("Q")
texto = input("Digite el mensaje cifrado: ")
index = 0
def Cositas (Arriba):
global index

for i in texto[index]:
lista  = []

if i == ".":
index += 1
Cositas (Arriba.izq)

elif i == "-":
index +=1
Cositas (Arriba.der)
elif i == " ":
index += 1
lista.append(Arriba.data)
elif i == "/" :
index += 1
lista.append("---")

for j in lista:
print("Su mensaje es:")
print(j,end="")
Cositas(Arriba)

以下是一些问题:

  • i是一个空间时,进程停止:不再调用Cositas,并且不处理texto中该空间之后的字母。

  • 当遇到/时,也会出现类似的问题。没有取得更多进展。

  • 每个递归调用都会打印出"Su mensaje es:"。这里不使用递归更合适,而只使用循环

  • for i in texto[index]语句将只迭代一次,因为texto[index]只是一个字符。

  • 使用全局index变量是不好的做法。如果需要解码多条消息,则需要再次将其重置为0。这并不优雅。

我建议这样做时不要递归。因此,在你构建了树Arriba之后,你可以继续这样做:

def cositas (arriba, texto):
words = []
for word in texto.split("/"):
lista = []
for code in word.split():
node = arriba
for ch in code:
node = node.izq if ch == "." else node.der
lista.append(node.data)
words.append("".join(lista))
return " ".join(words)

texto = input("Digite el mensaje cifrado: ")
translation = cositas(Arriba, texto)
print("Su mensaje es:", translation)

因此,例如,如果您要输入:

-.-.-.---./-.-.-.-../-.------/-…-.-.-..-./。。

。。。输出将是:

Su mensajees:快来引擎室几乎满

最新更新