为啥我的每个单词反转代码不反转某些单词?
Posted
技术标签:
【中文标题】为啥我的每个单词反转代码不反转某些单词?【英文标题】: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)
。
【参考方案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
【讨论】:
以上是关于为啥我的每个单词反转代码不反转某些单词?的主要内容,如果未能解决你的问题,请参考以下文章