巴巴鲁 发表于 2020-11-22 08:57:50

Python翻转字符串

实在想不起来怎么做,求思路或代码
《七律 人民解放军占领南京》,全文如下:
s = "钟山风雨起苍黄,百万雄师过大江。\
虎踞龙盘今胜昔,天翻地覆慨而慷。\
宜将剩勇追穷寇,不可沽名学霸王。\
天若有情天亦老,人间正道是沧桑。"
请输出全文的翻转形式,例如:
人间正道是沧桑,天若有情天亦老。
不可沽名学霸王,宜将剩勇追穷寇。
天翻地覆慨而慷,虎踞龙盘今胜昔。
百万雄师过大江,钟山风雨起苍黄

笨鸟学飞 发表于 2020-11-22 19:00:06

可以把内容加入列表,利用list.reverse()方法反向列表中的元素即可

Hu-33-1215 发表于 2020-11-22 23:27:23

直接把內容加入列表,再用reverse()的話會以每個字進行反轉,所以要把每行隔開加入列表,詩句每行有固定字數,用len()計算總字數,之後計算要把詩句分成多少行,用2個FOR循環把整篇詩分段加入列表(第一個循環是總循環次數,第2個循環是計算多少個字組成加入列表),還有用IF把標點換了,之後得出以句組成的列表,最後用reverse()打印出來

Hu-33-1215 发表于 2020-11-22 23:29:04

可是如果不是格式固定我暫時沒想到方法,剛學PYTHON幾天,看有沒有大佬提供一些思路{:10_266:}

Hu-33-1215 发表于 2020-11-22 23:37:22

x = "钟山风雨起苍黄,百万雄师过大江。\
虎踞龙盘今胜昔,天翻地覆慨而慷。\
宜将剩勇追穷寇,不可沽名学霸王。\
天若有情天亦老,人间正道是沧桑。"
print(x)
row_words = input("每行幾個字?:")
print("現在我們把詩反過來諗~~")
row_words = int(row_words) + 1
time_0 = int(len(x) / row_words)
y = list(x)
new_y = []
nx = ""
for time in range(time_0) :
    for row_word in range(row_words) :
      word = y.pop(0)
      if word == "。" :
            word = ","
      elif word == "," :
            word = "。"
      nx += word
    new_y.append(nx)
    nx = ""

new_y.reverse()
for reverses_word in new_y :
    print(reverses_word, end="")

巴巴鲁 发表于 2020-11-23 07:15:56

Hu-33-1215 发表于 2020-11-22 23:27
直接把內容加入列表,再用reverse()的話會以每個字進行反轉,所以要把每行隔開加入列表,詩句每行有固定字 ...

我想了想这样行不行?不过不知道为什么分隔后会出现一个空格在列表里,很烦
s="钟山风雨起苍黄,百万雄师过大江。\
虎踞龙盘今胜昔,天翻地覆慨而慷。\
宜将剩勇追穷寇,不可沽名学霸王。\
天若有情天亦老,人间正道是沧桑。"
s = s.replace("。",",")
s_list = s.split(",")
s_list.reverse()
length = len(s_list)

for i in range(1, length, 2):
    print(s_list, end = ',')
    print(s_list, end = '。')
    print()

wp231957 发表于 2020-11-23 09:03:05

巴巴鲁 发表于 2020-11-23 07:15
我想了想这样行不行?不过不知道为什么分隔后会出现一个空格在列表里,很烦

D:\wp\wp>py app3.py
人间正道是沧桑,天若有情天亦老。
不可沽名学霸王,宜将剩勇追穷寇。
天翻地覆慨而慷,虎踞龙盘今胜昔。
百万雄师过大江,钟山风雨起苍黄。

效果不是挺好的嘛   有啥问题

逃兵 发表于 2020-11-23 09:14:44

本帖最后由 逃兵 于 2020-11-23 09:17 编辑

s = "钟山风雨起苍黄,百万雄师过大江。\
虎踞龙盘今胜昔,天翻地覆慨而慷。\
宜将剩勇追穷寇,不可沽名学霸王。\
天若有情天亦老,人间正道是沧桑。"


s = s.replace("。",",")
s_list = s.split(",")[:-1]
s_list.reverse()

for i in range(len(s_list)):
    if i%2:
      print(s_list,end='。\n')
    else:
      print(s_list,end=',')

输出

人间正道是沧桑,天若有情天亦老。
不可沽名学霸王,宜将剩勇追穷寇。
天翻地覆慨而慷,虎踞龙盘今胜昔。
百万雄师过大江,钟山风雨起苍黄。

巴巴鲁 发表于 2020-11-23 12:21:10

wp231957 发表于 2020-11-23 09:03
D:\wp\wp>py app3.py
人间正道是沧桑,天若有情天亦老。
不可沽名学霸王,宜将剩勇追穷寇。


列表里会有个空格,反转后在第一个元素里,所以要从第二个元素开始遍历
不知道什么原因

逃兵 发表于 2020-11-23 14:18:42

巴巴鲁 发表于 2020-11-23 12:21
列表里会有个空格,反转后在第一个元素里,所以要从第二个元素开始遍历
不知道什么原因

你切割字符串的时候,字符串的最后一个元素是逗号,逗号的右侧又没有值,所以多切出一个空

巴巴鲁 发表于 2020-11-23 16:00:29

逃兵 发表于 2020-11-23 14:18
你切割字符串的时候,字符串的最后一个元素是逗号,逗号的右侧又没有值,所以多切出一个空

哦,理解你代码第八行的意思了,强
可以这么消
页: [1]
查看完整版本: Python翻转字符串