设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 59036|回复: 36
打印 上一主题 下一主题

【每日一坑 5】 文字竖排

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
#
发表于 2013-12-22 23:38:47 |只看该作者 |正序浏览
前两天看到一道还蛮有意思的题目,今天就拿来挖坑吧:

把一段字符串用“右起竖排”的古文格式输出,并且拿竖线符号作为每一列的分割符。
比如这段文字:
"静夜思 李白床前明月光,疑似地上霜。举头望明月,低头思故乡。"
输出结果:
低┊举┊疑┊床┊静
头┊头┊似┊前┊夜
思┊望┊地┊明┊思
故┊明┊上┊月┊
乡┊月┊霜┊光┊李
。┊,┊。┊,┊白



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

使用道具 举报

0

主题

1

好友

21

积分

新手上路

Rank: 1

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

使用道具 举报

3

主题

1

好友

111

积分

注册会员

Rank: 2

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

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

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

使用道具 举报

3

主题

1

好友

111

积分

注册会员

Rank: 2

33#
发表于 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)

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

老师能帮我看看吗?

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

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

回复

使用道具 举报

0

主题

0

好友

52

积分

注册会员

Rank: 2

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

谢谢老师
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

使用道具 举报

0

主题

0

好友

52

积分

注册会员

Rank: 2

30#
发表于 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

回复

使用道具 举报

0

主题

0

好友

4

积分

新手上路

Rank: 1

29#
发表于 2020-8-23 17:02:21 |只看该作者
text = "静夜思 李白床前明月光,疑似地上霜。举头望明月,低头思故乡。"
for j in range(0,6):
    for i in range(0,30)[::-1]:
        if i % 6 == j and i >5 :
            print(text[i] + "|",end = '')
        elif i % 6 == j and i <=5 :
            print(text[i],end = '')
    print('\n')
回复

使用道具 举报

0

主题

0

好友

4

积分

新手上路

Rank: 1

28#
发表于 2019-9-30 14:28:07 |只看该作者
本帖最后由 xling 于 2019-9-30 14:29 编辑

a = "静夜思 李白床前明月光,疑似地上霜。举头望明月,低头思故乡。"

for i in range(0,6):
    for j in range(0,5):
        c = '|' + a[(4-j)*6+i]

        if(j==4):
            c += '\n'
        print(c,end='')

{8CBB7E4D-F40D-43E6-A5A8-5778B8841109}_20190930142913.jpg (8.27 KB, 下载次数: 657)

{8CBB7E4D-F40D-43E6-A5A8-5778B8841109}_20190930142913.jpg

回复

使用道具 举报

0

主题

0

好友

6

积分

新手上路

Rank: 1

27#
发表于 2018-10-5 21:19:03 |只看该作者
我是新手,为什么大家要弄得那么复杂?
回复

使用道具 举报

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

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

GMT+8, 2024-11-24 10:07 , Processed in 0.022253 second(s), 26 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部