python文字竖排的2种实现方法

时间:2023-02-11 07:34:42

第一种:来自于网络。

#!/usr/bin/env python
#-*- coding:utf-8 -*-
#主题:文字变成竖排。
#来源:https://yq.aliyun.com/articles/538844
##|观|,|利|是|如|不|空|舌|,|明|无|得|故|怖|世|耨|蜜|上|真|即|波|
##|自|照|子|空|是|灭|中|身|乃|尽|苦|故|,|,|诸|多|多|咒|实|说|罗|
##|在|见|,|,|。|,|无|意|至|,|集|,|心|远|佛|罗|,|,|不|咒|僧|
##|菩|五|色|空|舍|不|色|,|无|乃|灭|菩|无|离|,|三|是|是|虚|曰|揭|
##|萨|蕴|不|即|利|垢|,|无|意|至|道|提|挂|颠|依|藐|大|无|。|:|谛|
##|,|皆|异|是|子|不|无|色|识|无|,|萨|碍|倒|般|三|神|等|故|揭|,|
##|行|空|空|色|,|净|受|声|界|老|无|埵|,|梦|若|菩|咒|等|说|谛|菩|
##|深|,|,|,|是|,|想|香|。|死|智|,|无|想|波|提|,|咒|般|揭|提|
##|般|度|空|受|诸|不|行|味|无|,|亦|依|挂|,|罗|。|是|,|若|谛|萨|
##|若|一|不|想|法|增|识|触|无|亦|无|般|碍|究|蜜|故|大|能|波|,|婆|
##|波|切|异|行|空|不|,|法|明|无|得|若|故|竟|多|知|明|除|罗|波|诃|
##|罗|苦|色|识|相|减|无|,|,|老|。|波|,|涅|故|般|咒|一|蜜|罗|。|
##|蜜|厄|,|,|,|。|眼|无|亦|死|以|罗|无|槃|,|若|,|切|多|揭|
##|多|。|色|亦|不|是|耳|眼|无|尽|无|蜜|有|。|得|波|是|苦|咒|谛|
##|时|舍|即|复|生|故|鼻|界|无|。|所|多|恐|三|阿|罗|无|,|,|,|
x=u'观自在菩萨,行深般若波罗蜜多时,照见五蕴皆空,度一切苦厄。舍利子,色不异空,空不异色,色即是空,空即是色,受想行识,亦复如是。舍利子,是诸法空相,不生不灭,不垢不净,不增不减。是故空中无色,无受想行识,无眼耳鼻舌身意,无色声香味触法,无眼界,乃至无意识界。无无明,亦无无明尽,乃至无老死,亦无老死尽。无苦集灭道,无智亦无得。以无所得故,菩提萨埵,依般若波罗蜜多故,心无挂碍,无挂碍故,无有恐怖,远离颠倒梦想,究竟涅槃。三世诸佛,依般若波罗蜜多故,得阿耨多罗三藐三菩提。故知般若波罗蜜多,是大神咒,是大明咒,是无上咒,是无等等咒,能除一切苦,真实不虚。故说般若波罗蜜多咒,即说咒曰:揭谛揭谛,波罗揭谛,波罗僧揭谛,菩提萨婆诃。'

lines = 20
lens = len(x)//lines
 
def printN(cur):
    s = "|"
    for j in range(0,lens+1): #
        try:
            s += x[cur + lines*j] + "|" #[当前行 + 总行数*list间隔], 13*0, 13*1, 13*2
        except:
            pass
    return s  
     
for i in range(0,lines): #
    print(printN(i))

第二种:我写的。

#心得:取string切片,可以直接切片。不用:

def print_in_line(string,row=20):
    '''string 语句,row行数,direction 方向。原理:字数/行数的余数。'''
    ''' 字数/行数, 余数。决定了文字打印出来的坐标。'''
    len_col=len(string)//row +1
    #必须加1,否则最后一列打不出来。
    
    line=''
    for i in range(row):
        for j in range(len_col):
            try:
                line+=string[j*row+i]
                line+='|'
                #可以通过直接切片的方式,进行取值。错误则不打印连接符。
                
            except:
                pass
        else:
            line+='\n'
    else:
        print(line)
        return line



print('-'*100)



x='''大王叫我来巡山
词曲:赵英俊
演唱:贾乃亮,甜馨
太阳对我眨眼睛
鸟儿唱歌给我听
我是一个努力干活儿
还不粘人的小妖精
别问我从哪里来
也别问我到哪里去
我要摘下最美的花儿
献给我的小公举
大王叫我来巡山
我把人间转一转
打起我的鼓
敲起我的锣
生活充满节奏感
大王叫我来巡山
抓个和尚做晚餐
山涧的水
无比的甜
不羡鸳鸯不羡仙
''' #如果原句带有换行符,则需要对str做预处理。 #如果原句是汉字,含有英文字符,那么 #换行符。 if '\n' in x: x=x.replace('\n','') print_in_line(x)

我的打印处理是这样的:

大|亮|。|别|下|巡|的|个|鸯||,|我|问|最|山|锣|和|不||甜|是|我|美|。|。|尚|羡||馨|一|从|的|我|生|做|仙||。|个|哪|花|把|活|晚|。||太|努|里|儿|人|充|餐||阳|力|来|。|间|满|。||对|干|。|献|转|节|山||我|活|也|给|一|奏|涧||眨|儿|别|我|转|感|的||眼|。|问|的|。|。|水||睛|还|我|小|打|大|。||。|不|到|公|起|王|无||鸟|粘|哪|举|我|叫|比||儿|人|里|。|的|我|的||唱|的|去|大|鼓|来|甜||歌|小|。|王|。|巡|。||给|妖|我|叫|敲|山|不||我|精|要|我|起|。|羡||听|。|摘|来|我|抓|鸳|

英文逗号的列宽和中文的符合宽度不一样。所以需要另外替换一下。

做英文符号替换为中文,要另外开个帖子了。