为什么我的每字反码代码没有反码一些字?

Why my each word reversing code is not reversing some words?

我想做什么

我正在尝试制作一个程序来反转每个单词,但不反转标签中的单词。
输入和输出示例:

输入:

Thank you stack overflow

输出:

knahT uoy kcats wolfrevo

如果单词在tags中,则应该不要反转。像这样:

输入:

<tag>something

输出:

<tag>gnihtemos

我的代码

我尝试使用堆栈算法解决这个问题。

s = input()
def stackprint(st):
    while st != []:
        print(st.pop(), end="")
stack = []
tag = False
for ch in s:
    if ch == '<':
        stackprint(stack)
        tag = True
        print(ch, end="")
    elif ch == '>':
        tag = False
        print(ch, end="")
    elif tag:
        print(ch, end="")
    else:
        if ch == ' ':
            stackprint(stack)
            print(ch, end="")
        else:
            stack.append(ch)
print("".join(stack))

问题

但是,如果只有一个词或没有标签,我的代码将无法正常工作。没有tag时,最后一个字不反序,只有一个词时,不反序

现在的输出:

第一

输入时:

<tag>something

输出:

<tag>something 

^ 我需要一些东西来扭转。

第二

输入:

Thank you stack overflow

输出:

knahT uoy kcats overflow

^我需要溢出来反转

重要

我需要<>里的东西,不能颠倒。 如果单词在标签中,则不应反转 喜欢输入:

<tag>word<tag>

输出:

<tag>drow<tag>

标签和单词之间不会有space。

Thank you <tag>stack overflow
knahT uoy <tag>kcats wolfrevo

这似乎适用于您提供的示例:

def revSetence(sentence):
    sentence = sentence + " ";
    flag = False
    final_sentence = ""
    word = ""
    for letter in sentence:
        if letter == "<":
            flag = True
        if letter == ">":
            flag = False
        if letter.isalpha():
            if flag:
                final_sentence = final_sentence + letter
            else:
                word = word + letter
        else:
            if len(word) > 0:
                final_sentence = final_sentence + word[::-1] 
            final_sentence = final_sentence + letter
            word =""
    return final_sentence

正如我在评论部分提到的,不是使用 join 方法打印堆栈,而是调用 stackprint 方法以确保堆栈被清空会给你想要的结果。

s = input()
def stackprint(st):
    while st != []:
        print(st.pop(), end="")
stack = []
tag = False
for ch in s:
    if ch == '<':
        stackprint(stack)
        tag = True
        print(ch, end="")
    elif ch == '>':
        tag = False
        print(ch, end="")
    elif tag:
        print(ch, end="")
    else:
        if ch == ' ':
            stackprint(stack)
            print(ch, end="")
        else:
            stack.append(ch)
stackprint(stack)