为什么我的每字反码代码没有反码一些字?
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)
我想做什么
我正在尝试制作一个程序来反转每个单词,但不反转标签中的单词。
输入和输出示例:
输入:
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)