【问题标题】:Why my each word reversing code is not reversing some words?为什么我的每个单词反转代码不反转某些单词?
【发布时间】:2021-04-08 06:49:42
【问题描述】:

我想做什么

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

输入:

Thank you stack overflow

输出:

knahT uoy kcats wolfrevo

如果单词在标签中,不要颠倒。这样:

输入:

<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>something

输出:

<tag>something 

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

第二

输入:

Thank you stack overflow

输出:

knahT uoy kcats overflow

^ 我需要反转溢出。

重要

我需要 里面的任何东西都不应该颠倒。 如果单词在标签中,则不应颠倒 喜欢输入:

<tag>word<tag>

输出:

<tag>drow<tag>

标签和单词之间没有空格。

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

【问题讨论】:

  • 不是在最后加入堆栈,而是调用stackprint 方法。它将确保在脚本退出之前清空堆栈。
  • 现在似乎是学习调试的好时机。在纸上确定您希望代码如何流动以及您希望变量在代码中的哪个位置具有哪些值。这与您实际获得的值相比如何?
  • @NotThatGuy 你什么意思?
  • ”和下一个单词之间是否有空格?这个“谢谢堆栈溢出”的输出是什么?
  • 您是否在编辑后再次测试了您的代码?如果没有,您应该这样做,并且通常不建议对可能解决您遇到的问题并因此使问题无效的问题进行编辑(而是将这些信息留作答案,或者如果您认为它只是删除问题是不太可能对其他人有帮助)。另外,您可能指的是stackprint(stack),而不是stackprint(st)

标签: python stack


【解决方案1】:

正如我在评论部分提到的,不是用 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)

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      相关资源
      最近更新 更多