python练习4

一、对一段文字进行排版

例1:

txt='''
月落乌啼霜满天,江枫渔火对愁眠。
姑苏城外寒山寺,夜半钟声到客船。
'''
linewidth=30 #预定的输出宽度(全局变量)

def lineSplit(line):#定义分隔函数
      plist=[',','!','?',',','。','!','?'] #在字符串中,若遇到这些标点,换行
      for p in plist: #用p遍历plist
           line=line.replace(p,'\n')  #用换行符替代标点
      return line.split('\n')  #返回
def  linePrint(line) : #定义字符串输出形式
       global linewidth #声明全局变量
       print(line.center(linewidth,chr(12288))) #将分割好的字符串用空格隔开,居中显示。
newlines=lineSplit(txt) #定义变量newlines,调用lineSplit函数
for newline in newlines: #用变量newline遍历newlines
     linePrint(newline) #将newline传入linePrint函数

输出结果:

           月落乌啼霜满天            
           江枫渔火对愁眠            
                              
           姑苏城外寒山寺            
           夜半钟声到客船            

例2:

txt='''
三国演义 上卷
罗贯中

滚滚长江东逝水,浪花淘尽英雄。是非成败转头空。青山依旧在,几度夕阳红。
白发渔樵江渚上,惯看秋月春风。一壶浊酒喜相逢,古今多少事,都付笑谈中。
--调寄《临江仙》
第一回 宴桃源豪杰三结义 战黄巾英雄立首功
话说天下大事,分久必合,合久必分。周末齐国纷争,并入于秦。及秦灭之后,楚、汉纷争,有并入于汉。汉朝自高祖斩白蛇而起义,一统天下,后来光武中兴,传至献帝,遂分为三国。
'''
linewidth=30
def lineSplit(line):
      plist=[',','!','?',',','。','!','?']
      for p in plist:
            line=line.replace(p,'\n')
      return line.split('\n')
def linePrint(line):
       global linewidth
       print(line.center(linewidth,chr(12288)))
newlines=lineSplit(txt)
for newline in newlines:
     linePrint(newline)

运行结果:

           三国演义 上卷            
             罗贯中              
                              
           滚滚长江东逝水            
            浪花淘尽英雄            
           是非成败转头空            
            青山依旧在             
            几度夕阳红             
                              
           白发渔樵江渚上            
            惯看秋月春风            
           一壶浊酒喜相逢            
            古今多少事             
            都付笑谈中             
                              
          --调寄《临江仙》           
    第一回 宴桃源豪杰三结义 战黄巾英雄立首功     
            话说天下大事            
             分久必合             
             合久必分             
            周末齐国纷争            
             并入于秦             
            及秦灭之后             
            楚、汉纷争             
            有并入于汉             
         汉朝自高祖斩白蛇而起义          
             一统天下             
            后来光武中兴            
             传至献帝             
            遂分为三国             

例3:对长句子的处理:
当句子长度超过linewidth限制时,分行居中显示,修改函数linePrint()

txt='''
第一部 第一章 幸存的男孩

住在四号楼普里怀特街的杜斯李先生及夫人非常骄傲的宣称自己是非常正常的人。但是他们最不希望见到的就是任何奇怪或神秘故事中的人物因为他们对此总是嗤之以鼻。

杜斯李先生是一家叫做葛郎宁斯的钻机工厂的老板。他非常肥壮、结实几乎肥到没有颈根但却有一把大胡子。杜斯李夫人则非常苗条有一头金发。她的颈根有常人两倍长这使得她整天伸长脖子透过花园围栏去偷窥邻居家的动静变得非常容易。杜斯李夫妇有个儿子叫做达德利。在他们眼中这世上再也没有比达德利更棒的男孩了。
'''

linewidth=30
def lineSplit(line):
    plist = [',', '!', '?', ',', '。', '!', '?']
    for p in plist:
        line = line.replace(p, '\n')
    return line.split('\n')

def linePrint(line):
      global linewidth
      while len(line)>linewidth:
             print(line[0:linewidth])
             line=line[linewidth:]
      print(line.center(linewidth,chr(12288)))
newlines = lineSplit(txt)
for newline in newlines:
    linePrint(newline)


运行结果:

        第一部 第一章 幸存的男孩         
                              
住在四号楼普里怀特街的杜斯李先生及夫人非常骄傲的宣称自己是非
            常正常的人             
但是他们最不希望见到的就是任何奇怪或神秘故事中的人物因为他们
           对此总是嗤之以鼻           
                              
                              
    杜斯李先生是一家叫做葛郎宁斯的钻机工厂的老板    
   他非常肥壮、结实几乎肥到没有颈根但却有一把大胡子   
       杜斯李夫人则非常苗条有一头金发        
她的颈根有常人两倍长这使得她整天伸长脖子透过花园围栏去偷窥邻
         居家的动静变得非常容易          
        杜斯李夫妇有个儿子叫做达德利        
    在他们眼中这世上再也没有比达德利更棒的男孩了    

二、实现isNum函数,参数为一个字符串,如果这个字符串属于整数、浮点数或复数的表示,则返回True,否则返回False

def isNum(a):
    try:
       a=eval(a)
       return True
   except:
      return False
while True:
     print(isNum(input("输入:")))
     

三、实现isPrime()函数,参数为整数,要有异常处理。如果整数是质数,返回True,否则返回False

def isPrime(num):
# 质数大于 1
 try:
  if num > 1:
    # 查看因子
     for i in range(2, num):
         if (num % i) == 0:
            return False
     else:
         return True
  else:
      return "输入错误"
 except:
     return False

while True:
      print(isPrime(int(input("输入:"))))

四、编写一个函数计算传入字符串中数字、字母、空格、及其他字符的个数

import string
def count(pharse):
  alphaNum=0
  numbers=0
  spaceNum=0
  otherNum=0
  hanziNum=0
  for i in pharse:
      if i in string.ascii_letters:
         alphaNum +=1
      elif i.isnumeric():
         numbers +=1
      elif i.isspace():
         spaceNum +=1
      elif i.isalpha():
         hanziNum +=1
      else:
         otherNum +=1
  print ("字母的数目为", alphaNum)
  print ("数字的数目为", numbers)
  print ("空格的数目为", spaceNum)
  print ("汉字的数目为", hanziNum)
  print ("其他字符的数目为", otherNum)
  return (alphaNum,numbers,spaceNum,otherNum,hanziNum)
count(input("请输入一个字符串:"))

五、打印200以内的素数,以空格分隔

def sushu():
    l=[]
    for x in range(2,200):
        for y in range(2,x):
            if x%y==0:
                break
        else:
            l.append(x)
    return(" ".join(map(str, l)))
print(sushu())

5.编写一个函数,参数为一个整数n,利用递归获取斐波那契数列中的第n个数并返回。

def fibonacci(x):
    fibList = [1, 1]

    for i in range(2, x + 1):
        fibList.append(fibList[i - 2] + fibList[i - 1])

    return fibList[-1]

while True:
      num = int(input("Enter a numer:"))
      print(fibonacci(num))

你可能感兴趣的:(练习)