设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【每日一坑 5】 文字竖排

[复制链接]

0

主题

0

好友

52

积分

注册会员

Rank: 2

31#
发表于 2020-10-14 14:58:30 |只看该作者
本帖最后由 jodie 于 2020-10-14 15:01 编辑
  1. def change_pattern(poem):
  2.     # 分离出 题目,诗人+诗句
  3.     title,poet_n_poem  = poem.split()
  4.     title = title.strip()
  5.     poet_n_poem = poet_n_poem.strip()

  6.     # 存放诗句的列表
  7.     all_lines = []
  8.     # 分离句号
  9.     for one in poet_n_poem.split("。"):
  10.         if ',' in one:
  11.             # 分离逗号
  12.             lines = one.split(",")
  13.             # print(lines)
  14.             # 判断是否是 诗人+诗句,且给每个诗句后面加逗号
  15.             if len(lines[0]) != len(lines[1]):
  16.                 line_len = len(lines[1])
  17.                 poet = lines[0][:len(lines[0])-line_len]
  18.                 lines[0] = lines[0].strip(poet) + ","
  19.                 lines[1] = lines[1] + "。"
  20.                 line_len = line_len + 1
  21.                 all_lines = all_lines + lines
  22.             else:
  23.                 lines[0] = lines[0] + ","
  24.                 lines[1] = lines[1] + "。"
  25.                 all_lines = all_lines + lines


  26.     title_n_poet = title + " " + poet
  27.     title_n_poet_len = len(title_n_poet)
  28.     all_lines.insert(0,title_n_poet)
  29.     all_lines.reverse()

  30.     # 补全空格,使长度一致
  31.     delta = line_len - title_n_poet_len
  32.     # 诗句长度短
  33.     if delta < 0:
  34.         for i in range(0,len(all_lines)-1):
  35.             all_lines[i] = all_lines[i] + abs(delta) * " "
  36.     # 题目+空格+诗人 长度短
  37.     elif delta > 0:
  38.         all_lines[-1] = all_lines[-1] + abs(delta) * " "
  39.     else:
  40.         pass


  41.     # 把诗句的每个字单独出来
  42.     for i in range(0,len(all_lines)):
  43.         all_lines[i] = list(all_lines[i])


  44.     result_list = []
  45.     j = 0
  46.     while j < len(all_lines[0]):
  47.         i = 0
  48.         result_list.append([])
  49.         # for i in range(0,len(all_lines)):
  50.         #     result_list[j].append(all_lines[i][j])
  51.         while i < len(all_lines):
  52.             result_list[j].append(all_lines[i][j])
  53.             i = i + 1
  54.         j=j+1
  55.     # print(result_list)

  56.     for one in result_list:
  57.         string = "|".join(one)
  58.         print(string)



  59. if __name__ == "__main__":
  60.     poem = "锦瑟 李商隐锦瑟无端五十弦,一弦一柱思华年。庄生晓梦迷蝴蝶,望帝春心托杜鹃。沧海月明珠有泪,蓝田日暖玉生烟。此情可待成追忆," \
  61.        "只是当时已惘然。"
  62.     change_pattern(poem)
复制代码

result.jpg (23.73 KB, 下载次数: 693)

result.jpg

回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

32#
发表于 2020-10-14 16:36:54 |只看该作者
jodie 发表于 2020-10-14 14:58

不错啊
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

52

积分

注册会员

Rank: 2

33#
发表于 2020-10-14 23:40:51 |只看该作者
crossin先生 发表于 2020-10-14 16:36
不错啊

谢谢老师
回复

使用道具 举报

3

主题

1

好友

111

积分

注册会员

Rank: 2

34#
发表于 2021-2-10 11:36:47 |只看该作者
呼!整了一上午,终于弄出来了
  1. import re

  2. def hs_hang(text_):
  3.     text = re.findall(r'\b.*? .*? |\b\S*?[。,?!]{1}',text_)
  4.     text[0] = text[0].strip()  #为了使最右边一列不会多出一个空格、影响美观
  5.     #print(text)
  6.     hangshu = []
  7.     hang_dic = {}
  8.     keynum = 0
  9.     for a in text:
  10.         b = re.findall(r'.',a)
  11.         hangshu.append(len(b))
  12.         hang = max(hangshu)
  13.     while text:
  14.         keynum += 1
  15.         hang_dic[keynum] = re.findall(r'.',text.pop(-1))
  16.     #print(hang_dic)
  17.     #print(hang)
  18.     return hang,hang_dic,text

  19. #下面这个函数可以使每列诗句和它们之间的分隔符全都等长,避免错位的情况
  20. def hs_buquan(hang_dic,hang):
  21.     global key
  22.     for key in hang_dic.keys():
  23.         if len(hang_dic[key]) < hang:
  24.             for i in range(hang - len(hang_dic[key])):
  25.                 hang_dic[key] += ' '
  26.                 #这个空格很关键,因为中英文标点大小的不同,这个空格要用全角
  27.     #print(hang_dic)
  28.     return hang_dic

  29. def hs_paixu(hang_dic,hang):
  30.     global e
  31.     for e in range(hang):
  32.         line = []
  33.         for value in hang_dic.values():
  34.             line.append(value[e])
  35.         print('|'.join(line))

  36. #用的时候用函数guwen就彳亍了
  37. def guwen(shuru):  #输入参数时请不要用英文的字母和标点
  38.     hang,hang_dic,text = hs_hang(shuru)
  39.     hang_dic = hs_buquan(hang_dic,hang)
  40.     hs_paixu(hang_dic,hang)

复制代码
写这程序最让我惊喜的就是,用全角输入空格能解决评论区里很常见的错位问题,不管是句句字数一样还是不一样都能整齐打印

老师能帮我看看吗?

暂时学到的知识还不是很多,掌握得也不是很熟练,其他人的程序看得不是很懂

老师有什么建议的话尽管提,谢谢啦

回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

35#
发表于 2021-2-10 16:59:13 |只看该作者
global key
global e
这个是没有必要的

写得挺好的,继续多做练习
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

3

主题

1

好友

111

积分

注册会员

Rank: 2

36#
发表于 2021-2-10 17:17:33 |只看该作者
crossin先生 发表于 2021-2-10 16:59
global key
global e
这个是没有必要的

谢谢老师,我会更加努力的,还望老师继续指导
回复

使用道具 举报

0

主题

1

好友

21

积分

新手上路

Rank: 1

37#
发表于 2021-7-6 21:25:24 |只看该作者
没有头绪,感觉太难了,完全没有头绪
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-22 00:26 , Processed in 0.022815 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部