整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          「Python從零到壹」 二.語(yǔ)法基礎(chǔ)之條件語(yǔ)句、循

          「Python從零到壹」 二.語(yǔ)法基礎(chǔ)之條件語(yǔ)句、循環(huán)語(yǔ)句和函數(shù)

          .條件語(yǔ)句

          在講訴條件語(yǔ)句之前,需要先補(bǔ)充語(yǔ)句塊的知識(shí)。語(yǔ)句塊并非一種語(yǔ)句,它是在條件為真時(shí)執(zhí)行一次或執(zhí)行多次的一組語(yǔ)句,在代碼前放置空格縮進(jìn)即可創(chuàng)建語(yǔ)句塊。它類似于C、C++、Java等語(yǔ)言的大括號(hào)({ })來表示一個(gè)語(yǔ)句塊的開始和結(jié)束。

          在Python中使用冒號(hào)(:)來標(biāo)識(shí)語(yǔ)句塊的開始,塊中每一條語(yǔ)句都有縮進(jìn)并且縮進(jìn)量相同,當(dāng)回退到上一層縮進(jìn)量時(shí),就表示當(dāng)前語(yǔ)句塊已經(jīng)結(jié)束。 下面開始詳細(xì)講解條件語(yǔ)句。

          1.單分支

          單分支語(yǔ)法如下:

          if <condition>:
          	<statement>
          	<statement>


          < condition > 是條件表達(dá)式,基本格式為< expr >< relop >< expr >;< statement >是語(yǔ)句主體。判斷條件如果為真(True)就執(zhí)行語(yǔ)句,如果為假(False)就跳過語(yǔ)句,執(zhí)行下一條語(yǔ)句。條件判斷通常有布爾表達(dá)式(True、False)、關(guān)系表達(dá)式(>、<、>=、<=、==、!=)和邏輯運(yùn)算表達(dá)式(and、or、not,其優(yōu)先級(jí)從高到低是not、and、or)等。

          注意:在Python2.x版本中,條件表達(dá)式是不強(qiáng)制要求用括號(hào)括起來的,但條件表達(dá)式后面一定要添加英文冒號(hào)字符。

          a=10
          if a==10:
              print('變量a等于10')
              print(a)


          輸出結(jié)果如下:

          2.二分支

          二分支語(yǔ)法如下:

          if <condition>:
          	<statement>
          	<statement>
          else:
          	<statement>
          	<statement>


          執(zhí)行過程如下圖所示:

          如果條件語(yǔ)句< condition >為真,if后面的語(yǔ)句就被執(zhí)行,如果為假,則執(zhí)行else下面的語(yǔ)句塊。條件語(yǔ)句的格式為:< expr >< relop >< expr >,其中< expr >為表達(dá)式、為關(guān)系操作符。例如:a >=10、b !=5等。

          a=10
          if a >=5:
              print('變量a大于等于5')
              print(a)
          else:
              print('變量a小于5')
              print(a)


          輸出結(jié)果如下,由于變量a為10,大于5執(zhí)行if中的語(yǔ)句。

          3.多分支

          if多分支由if-elif-else組成,其中elif相當(dāng)于else if,同時(shí)它可以使用多個(gè)if的嵌套。具體語(yǔ)法如下所示:

          if <condition1>:
          	<case1 statements>
          elif<condition2>:
          	<case2 statements>
          elif<condition3>:
          	<case3 statements>
          ...
          else:
          	<default statements>


          該語(yǔ)句是順序評(píng)估每個(gè)條件,如果當(dāng)前條件分支為True,則執(zhí)行對(duì)應(yīng)分支下的語(yǔ)句塊,如果沒有任何條件成立,則執(zhí)行else中的語(yǔ)句塊,其中else是可以省略的。代碼如下:

          num=input("please input:")
          num=int(num)
          print(num)
          if num >=90:
              print('A Class')
          elif num >=80:
              print('B Class')
          elif num >=70:
              print('C Class')
          elif num >=60:
              print('D Class')
          else:
              print('No Pass')


          輸出值為76,則在80到70之間,成績(jī)?yōu)镃等級(jí),輸出結(jié)果如下圖所示。

          注意:由于Python不支持switch語(yǔ)句,所以多個(gè)條件判斷,只能用elif來實(shí)現(xiàn),如果判斷需要多個(gè)條件需同時(shí)判斷時(shí),可以:

          • 使用or (或),表示兩個(gè)條件有一個(gè)成立時(shí)判斷條件成功
          • 使用and (與),表示只有兩個(gè)條件同時(shí)成立的情況下,判斷條件才成功
          # 判斷值是否在小于0或大于10
          num=10
          if num < 0 or num > 10:    
              print('hello')
          else:
              print('undefine')
          # 輸出結(jié)果: undefine
          # 判斷值是否在0~5或者10~15之間
          num=8
          if (num >=0 and num <=5) or (num >=10 and num <=15):    
              print('hello')
          else:
              print('undefine')


          輸出結(jié)果如下圖所示:

          當(dāng)if有多個(gè)條件時(shí)可使用括號(hào)來區(qū)分判斷的先后順序,括號(hào)中的判斷優(yōu)先執(zhí)行,此外and和or的優(yōu)先級(jí)低于>(大于)、<(小于)等判斷符號(hào),即大于和小于在沒有括號(hào)的情況下會(huì)比與或要優(yōu)先判斷。

          同時(shí),你也可以在同一行的位置上使用if條件判斷語(yǔ)句,如下實(shí)例。但不見大家使用類似的語(yǔ)法,在我們編寫項(xiàng)目或?qū)崙?zhàn)中,很可能你的代碼會(huì)供別人學(xué)習(xí),有時(shí)你只負(fù)責(zé)其中一部分,良好的代碼格式及注釋是非常必要的。

          var=520
          if (var==520): print("感謝您關(guān)注娜璋AI安全之家")


          二.循環(huán)語(yǔ)句

          Python循環(huán)語(yǔ)句主要分為while循環(huán)和for循環(huán),它允許我們執(zhí)行一個(gè)語(yǔ)句或語(yǔ)句組多次。

          1.while循環(huán)

          while循環(huán)語(yǔ)句的基本格式如下:

          while <condition>:
          	<statement>
          else:
          	<statement>


          執(zhí)行流程如下圖所示:

          條件表達(dá)式< condition >如果為真時(shí),則循環(huán)體重復(fù)執(zhí)行,直到條件判斷為假,循環(huán)體終止,如果第一次判斷條件就為假,則直接跳出循環(huán)執(zhí)行else語(yǔ)句,注意else語(yǔ)句可以省略,同時(shí)冒號(hào)(:)開始進(jìn)入循環(huán)體,縮進(jìn)區(qū)分語(yǔ)句塊。條件語(yǔ)句condition包括布爾表達(dá)式(True、False)、關(guān)系表達(dá)式(>、<、>=、<=、==、!=)和邏輯運(yùn)算表達(dá)式(and、or、not)等。

          案例1:1+2+…+100

          i=1  
          s=0  
          while i <=100:  
              s=s+i  
              i=i+1  
          else:  
              print('over')
          print('sum=', s)


          這段代碼是作者寫博客或授課時(shí),講述循環(huán)語(yǔ)句最常用的例子,求1+2+3+…+100的結(jié)果,答案是5050。該段代碼反復(fù)執(zhí)行“i<=100”判斷,當(dāng)i加到101時(shí),判斷i>100為假則結(jié)束循環(huán)執(zhí)行else語(yǔ)句。

          案例2:循環(huán)打開網(wǎng)站

          再舉一個(gè)實(shí)例,通過定義一個(gè)while循環(huán),調(diào)用webbrowser庫(kù)的open_new_tab()函數(shù)循環(huán)打開百度首頁(yè)網(wǎng)址,下面代碼反復(fù)打開了百度首頁(yè)5次。完整代碼如下:

          import webbrowser as web  
          import time  
          import os
          i=0  
          while i<5:  
              web.open_new_tab('http://www.baidu.com')  
              i=i+1  
              time.sleep(0.8)  
          else:  
              os.system('taskkill /F /IM iexplore.exe')  
          print('close IE')


          代碼是調(diào)用webbrowser庫(kù)中open_new_tab()函數(shù)打開窗口(百度鏈接)5次。

          最后循環(huán)結(jié)束執(zhí)行os.system()操作系統(tǒng)函數(shù),調(diào)用taskkill命令結(jié)束IE瀏覽器進(jìn)程(Iexplore.exe),其他瀏覽器程序修改為chrome.exe、qq.exe或firefox.exe即可。其中參數(shù)“/F”表示強(qiáng)行終止程序,“/IM”表示圖像,如下圖所示。

          注意:上述代碼實(shí)現(xiàn)了循環(huán)打開某個(gè)網(wǎng)站,可以應(yīng)用于刷取網(wǎng)頁(yè)瀏覽量或Web開發(fā)測(cè)試等功能。比如新浪博客等部分網(wǎng)頁(yè)打開一次瀏覽器會(huì)計(jì)算一次瀏覽次數(shù),通過上面這段代碼可以循環(huán)增加閱讀量,部分網(wǎng)站又是通過瀏覽量進(jìn)行排序的,不妨試試看。作者引入該代碼僅為讀者了解循環(huán),也為后面的爬蟲知識(shí)埋下伏筆。

          案例3:奇數(shù)和偶數(shù)計(jì)算

          最后補(bǔ)充一個(gè)奇數(shù)和偶數(shù)計(jì)算的案例,其基本流程如下圖所示:

          代碼如下:

          numbers=[12, 37, 5, 42, 8, 3]
          even=[]
          odd=[]
          while len(numbers) > 0:
              number=numbers.pop()
              if(number % 2==0):      #偶數(shù)判斷
                  even.append(number)
              else:
                  odd.append(number)
          #輸出結(jié)果
          print(even)
          print(odd)


          輸出結(jié)果如下:

          [8, 42, 12]
          [3, 5, 37]


          2.for循環(huán)

          for循環(huán)語(yǔ)句的基本格式如下:

          for <var> in <sequence>:
          	<statement>
          	<statement>


          流程圖如下:

          自定義循環(huán)變量var遍歷sequence序列中的每一個(gè)值,每個(gè)值執(zhí)行一次循環(huán)的語(yǔ)句塊。sequences表示序列,常見類型有l(wèi)ist(列表)、tuple(元組)、strings(字符串)和files(文件)。下面的代碼是計(jì)算1到100的求和,輸出三角形星號(hào)的示例。

          #元組循環(huán)
          tup=(1,2,3,4,5)  
          for n in tup:  
              print(n)  
          else:  
              print('End for\n')
              
          #計(jì)算1+2+...+100
          s=0
          for i in range(101):
              s=s + i
          print('sum=', s)
          #輸出三角形星號(hào)
          for i in range(10):
              print("*"*i)


          輸出結(jié)果如下圖所示,循環(huán)遍歷元組tup變量中的值,依次獲取并輸出;然后計(jì)算1累加到100,range(101)表示依次獲取101范圍內(nèi)的100個(gè)數(shù)字,其累加結(jié)果為5050;最后輸出星號(hào)三角形,print “ * ” * i 代碼中,第一個(gè)星號(hào)表示輸出星號(hào)字符串,第二個(gè)星號(hào)是乘法,表示輸出5個(gè)星號(hào),終輸出三角形。打印圖形是編程基礎(chǔ),使用Python實(shí)現(xiàn)要比C語(yǔ)言容易很多,但原理邏輯是一樣的。

          3.Break、Continue和Pass語(yǔ)句

          Break和Continue是兩個(gè)常用的跳出循環(huán)語(yǔ)句。

          • Break語(yǔ)句

          跳出最內(nèi)層while、for循環(huán),在語(yǔ)句塊執(zhí)行過程中終止循環(huán),并且跳出整個(gè)循環(huán)。

          s=0
          num=0
          while num<20:
              num +=1
              s +=num
              if s > 100:
                  break
          print("The sum is", s)
          # The sum is 105


          當(dāng)求和變量s大于100的時(shí)候,進(jìn)入if判斷,執(zhí)行break跳出循環(huán),最后輸出105。

          • Continue語(yǔ)句

          在語(yǔ)句塊執(zhí)行過程中終止當(dāng)前循環(huán),跳出該次循環(huán),執(zhí)行下一次循環(huán)。

          for num in range(10):
              if num % 2==0:
                  print("even number:", num)
                  continue
              print("number:",num)


          輸出結(jié)果如下,當(dāng)為偶數(shù)的時(shí)候continue跳出當(dāng)前循環(huán),for循環(huán)中只輸出偶數(shù)。

          >>> 
          even number: 0
          number: 1
          even number: 2
          number: 3
          even number: 4
          number: 5
          even number: 6
          number: 7
          even number: 8
          number: 9
          >>> 


          • pass語(yǔ)句

          pass語(yǔ)句是空語(yǔ)句,為了保持程序結(jié)構(gòu)的完整性所使用的。

          # 輸出 Python 的每個(gè)字母
          for letter in 'Python':
             if letter=='h':
                pass
                print('這是 pass 塊')
             print('當(dāng)前字母 :', letter)
          print("Good bye!")


          輸出結(jié)果如下圖所示:

          4.嵌套循環(huán)

          while基本語(yǔ)法如下:

          while expression:
             while expression:
                statement(s)
             statement(s)


          for基本語(yǔ)法如下:

          for iterating_var in sequence:
             for iterating_var in sequence:
                statements(s)
             statements(s)


          下面以最簡(jiǎn)單的冒泡排序算法來補(bǔ)充循環(huán)嵌套知識(shí)。冒泡排序是最常見到的排序算法,也是很基礎(chǔ)的一種排序算法。它的實(shí)現(xiàn)思想是:

          相鄰的兩個(gè)元素進(jìn)行比較,然后把較大的元素放到后面(正向排序),在一輪比較完后最大的元素就放在了最后一個(gè)位置,像魚兒在水中吐的氣泡在上升的過程中不斷變大。

          def bubble_sort(list):
              count=len(list)
              for i in range(count):
                  for j in range(i + 1, count):
                      if list[i] > list[j]:
                          list[i], list[j]=list[j], list[i]
              return list
          #排序算法
          list=[3, 91, 23, 14, 56, 9]
          print("排序前:", list)
          res=bubble_sort(list)
          print("排序后:", res)


          輸出結(jié)果如下:

          你可能會(huì)疑惑bubble_sort()是什么?其實(shí)它是一個(gè)自定義函數(shù),下面我們馬上講解。

          三.函數(shù)

          當(dāng)讀者需要完成特定功能的語(yǔ)句塊時(shí),需要通過調(diào)用函數(shù)來完成對(duì)應(yīng)的功能。函數(shù)分為無參數(shù)函數(shù)和有參數(shù)函數(shù),當(dāng)函數(shù)提供不同的參數(shù)時(shí),可以實(shí)現(xiàn)對(duì)不同數(shù)據(jù)的處理。下面從自定義函數(shù)、系統(tǒng)自帶函數(shù)、第三方庫(kù)函數(shù)三個(gè)方面進(jìn)行講解。

          1.自定義函數(shù)

          (1) 定義方法

          為了簡(jiǎn)化編程,提高代碼的復(fù)用性,可以自定義函數(shù),函數(shù)定義如下:

          def funtion_name([para1,para2...paraN]):
          	statement1
              statement2
                ....
              [return value1,value2...valueN]


          其中:

          • 定義函數(shù)需要使用def關(guān)鍵詞
          • function_name表示函數(shù)名,后面的冒號(hào)(:)不要忘記,并且縮進(jìn)
          • [para1,para2…paraN]表示參數(shù),可以省略,也可以多個(gè)參數(shù)
          • [return value1,value2…valueN]表示返回值,可以無返回值,也可以多個(gè)返回值
          • 需要注意的是自定義函數(shù)有返回值,主調(diào)函數(shù)就需要接受返回的結(jié)果

          函數(shù)調(diào)用時(shí),形參被賦予真實(shí)的參數(shù),然后執(zhí)行函數(shù)體,并在函數(shù)結(jié)束調(diào)用時(shí)返回結(jié)果。Return語(yǔ)句表示退出函數(shù)并返回到函數(shù)被調(diào)用的地方,返回值傳遞給調(diào)用程序。

          首先來看一個(gè)無返回值的求和函數(shù)fun1(),代碼如下:

          #函數(shù)定義
          def fun1(a,b):
              print(a,b)
              c=a + b
              print('sum=',c)
          #函數(shù)調(diào)用
          fun1(3,4)
          # 3 4
          # sum=7


          再來看一個(gè)包含多個(gè)參數(shù)返回的計(jì)算器函數(shù)fun2(),代碼如下,return返回五個(gè)結(jié)果。

          #函數(shù)定義
          def fun2(a,b):  
              print(a,b)
              X=a + b  
              Y=a - b  
              Z=a * b  
              M=a / b  
              N=a ** b  
              return X,Y,Z,M,N
          #函數(shù)調(diào)用
          a,b,c,d,e=fun2(4,3)  
          print('the result are ',a,b,c,d,e)
          re=fun2(2,10)  
          print(re)


          輸出結(jié)果如下,依次返回加法、減法、乘法、除法、冪運(yùn)算結(jié)果。

          >>> 
          4 3
          the result are  7 1 12 1.3333333333333333 64
          2 10
          (12, -8, 20, 0.2, 1024)
          >>> 


          (2) 自定義函數(shù)參數(shù)含預(yù)定義

          預(yù)設(shè)值是在自定義函數(shù)基礎(chǔ)上,對(duì)某些參數(shù)賦予預(yù)定義值。例如:

          def fun3(a,b,c=10):
              print(a,b,c)
              n=a + b + c
              return n
            
          print('result1=',fun3(2,3))
          print('result2=',fun3(2,3,5))


          第一次調(diào)用a為2,b為3,c為預(yù)定義值10,求和輸出15;第二次調(diào)用修改了預(yù)定義值c,賦值為5,求和即為2+3+5=10。

          注意:預(yù)定義值得參數(shù)不能先于無預(yù)定義值參數(shù);同時(shí),函數(shù)調(diào)用時(shí),建議采用一對(duì)一賦值,也可以在函數(shù)調(diào)用中給出具體形參進(jìn)行賦值,但需要注意的是在函數(shù)調(diào)用過程中(使用函數(shù)時(shí)),有預(yù)定義值的參數(shù)不能先于無預(yù)定義值參數(shù)被賦值。

          2.常見內(nèi)部庫(kù)函數(shù)

          Python系統(tǒng)內(nèi)部提供了一些庫(kù)函數(shù)供大家使用,這里主要介紹最常見的四個(gè)庫(kù)函數(shù),即str字符串庫(kù)函數(shù)、math數(shù)據(jù)庫(kù)函數(shù)、os操作系統(tǒng)庫(kù)函數(shù)、socket網(wǎng)絡(luò)套接字庫(kù)函數(shù)。Python常見內(nèi)部庫(kù)函數(shù)如下:

          下面代碼是這四個(gè)常見內(nèi)部庫(kù)函數(shù)的具體用法,代碼如下:

          # -*- coding:utf-8 -*-
          #字符串庫(kù)函數(shù)
          str1="hello world"
          print('計(jì)算字符串長(zhǎng)度:', len(str1))
          str2=str1.title()
          print('首字母大寫標(biāo)題轉(zhuǎn)換:', str2)
          str3='12ab34ab56ab78ab'
          print('字符串替換:', str3.replace('ab',' '))
          #數(shù)學(xué)庫(kù)函數(shù)
          import math
          print(math.pi)
          num1=math.cos(math.pi/3)
          print('余弦定律:', num1)
          num2=pow(2,10)
          print('冪次運(yùn)算:', num2)
          num3=math.log10(1000)
          print('求以10為底的對(duì)數(shù):', num3)
          #操作系統(tǒng)庫(kù)函數(shù)
          import os
          print('輸出當(dāng)前使用平臺(tái):', os.name)
          path=os.getcwd()
          print('獲取當(dāng)前工作目錄', path)
          os.system('taskkill /F /IM iexplore.exe') #關(guān)閉瀏覽器進(jìn)程
          #網(wǎng)絡(luò)套接字庫(kù)函數(shù)
          import socket
          ip=socket.gethostbyname('www.baidu.com')
          print('獲取百度ip地址', ip)


          輸出結(jié)果如下圖所示。

          3.第三方庫(kù)函數(shù)

          Python作為一門開源語(yǔ)言,它支持各種第三方提供的開源庫(kù)供我們使用。其使用第三方函數(shù)庫(kù)時(shí)的具體格式為:

          • module_name.method(parametes)

          表示“第三方函數(shù)名.方法(參數(shù))”。例如httplib\httplib2庫(kù)是針對(duì)HTTP和HTTPS的客戶端協(xié)議,使用httplib2庫(kù)函數(shù)之前,如果沒有安裝httplib2庫(kù)會(huì)報(bào)錯(cuò)“ImportError: No module named httplib2”,如圖2.18所示。

          在Linux環(huán)境中,輸入命令“easy_install httplib2”可以實(shí)現(xiàn)自動(dòng)安裝擴(kuò)展包,Windows環(huán)境下需要安裝pip或easy_install工具,再調(diào)用命令執(zhí)行安裝。在后續(xù)文章會(huì)講解pip安裝工具及用法,后面章節(jié)也會(huì)介紹各種第三方庫(kù)函數(shù)實(shí)現(xiàn)數(shù)據(jù)爬取和分析操作。

          四.總結(jié)

          無論如何,作者都希望這篇文章能給您普及一些Python知識(shí),更希望您能跟著我一起寫代碼,一起進(jìn)步。如果文章能給您的研究或項(xiàng)目提供一些微不足道的思路和幫助,就更欣慰了。作者最大的期望就是文章中的一些故事、話語(yǔ)、代碼或案例對(duì)您有所幫助,致那些努力奮斗的人。

          遺憾,讓我們懂得完美。

          逝去,讓我們不斷前行。

          她夜色中的身姿是那么的美。

          ————————————————

          版權(quán)聲明:本文為CSDN博主「Eastmount」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

          原文鏈接:https://blog.csdn.net/Eastmount/article/details/108479670

          習(xí)目標(biāo)

          將指定的純文本文檔轉(zhuǎn)換為HTML文件。

          實(shí)現(xiàn)目標(biāo)

          在瀏覽器中打開最終生成的HMTL文件,呈現(xiàn)下圖的樣式。

          關(guān)鍵內(nèi)容

          python數(shù)據(jù)挖掘,python爬蟲

          練習(xí)這個(gè)項(xiàng)目,最好具備一些HTML基礎(chǔ)。

          如果沒有接觸過,這里我做一下簡(jiǎn)單的介紹。

          HTML文件是我們常見的網(wǎng)頁(yè)文件,其中包含HTML源代碼。

          HTML源代碼由HTML標(biāo)簽組成,這些標(biāo)簽往往是成對(duì)出現(xiàn)(個(gè)別除外)。

          一個(gè)簡(jiǎn)單的HTML示例代碼:

          <html>

          <head>

          <meta charset="gbk">

          <title>...</title>

          </head>

          <body>

          <h1>一級(jí)標(biāo)題</h1>

          <p>我是段落內(nèi)容。</p>

          </body>

          </html>

          上方的代碼復(fù)制到一個(gè)文本文檔中,并將文件后綴改為“.html”,在瀏覽器中打開即可看到效果。

          這里我們看到了一些標(biāo)簽:

          • <html> 和</html> 之間是描述網(wǎng)頁(yè)的內(nèi)容<head>和</head>之間是描述頁(yè)面頭部?jī)?nèi)容<meta>包含有關(guān)頁(yè)面的元信息<title>和</title>之間是顯示在瀏覽器標(biāo)簽上的頁(yè)面標(biāo)題<body> 和</body> 之間是描述可見的頁(yè)面主體內(nèi)容<h1> 和</h1> 之間的文本內(nèi)容被顯示為一級(jí)標(biāo)題<p> 和</p> 之間的文本內(nèi)容被顯示為文本段落

          另外,在這個(gè)案例中我們還會(huì)用到一些標(biāo)簽。

          • <a>和</a>可以為標(biāo)簽之間的文本添加鏈接<ul>和</ul>之間是內(nèi)容列表<li>和</li>之間是列表項(xiàng)<strong>和</strong>之間是加重的文本內(nèi)容</br>是可以對(duì)內(nèi)容進(jìn)行換行的換行標(biāo)簽

          案例分析

          當(dāng)我們了解了HTML的結(jié)構(gòu)和各種標(biāo)簽的作用,接下來,我們分析一下,如何進(jìn)行文檔與HTML的轉(zhuǎn)換。

          1、原始文檔中的標(biāo)題都是大寫英文字母開頭和英文字母結(jié)尾。

          2、文檔中除了標(biāo)題,就是段落和列表,段落和列表的區(qū)別是:列表中包含列表項(xiàng)。

          3、段落中存在換行。

          4、列表項(xiàng)(以“●”開頭)需要放置于列表中。

          3、文檔中“*”之間的內(nèi)容需要加重顯示。

          實(shí)現(xiàn)過程

          一、定義處理原始文檔內(nèi)容的模塊(util.py)

          1、定義一個(gè)生成器“l(fā)ines”,能夠?yàn)樵嘉臋n結(jié)尾添加空行。

          def lines(file):

          for line in file:

          yield line # 生成文件的每一行內(nèi)容

          yield '\n' # 為文件末尾添加空行,保證最后添加到block的行能夠被生成。

          為什么需要在文檔末尾添加空行,可以看下方生成器“blocks”代碼中的注釋進(jìn)行理解。

          2、定義一個(gè)生成器“blocks”,對(duì)原始文檔內(nèi)容進(jìn)行讀取,當(dāng)讀取到空行,將已讀取的內(nèi)容連接為內(nèi)容塊并生成。

          def blocks(file):

          block=[]

          for line in lines(file):

          if line.strip(): # 如果讀取的行不是空行

          block.append(line) # 添加行內(nèi)容到列表

          elif block: # 如果讀取空行(如果文件末尾不是空行,則不會(huì)執(zhí)行下方語(yǔ)句塊,導(dǎo)致上方語(yǔ)句塊最后一次添加的內(nèi)容無法生成。)

          yield ''.join(block).strip() # 連接列表中所有的行內(nèi)容

          block=[]

          二、定義處理文檔的主程序模塊(main01.py)

          在這個(gè)模塊中,我們需要導(dǎo)入一些需要使用的內(nèi)置模塊。

          • sys:用于獲取命令行終端的輸入re:通過正則表達(dá)式模塊對(duì)原始文檔內(nèi)容進(jìn)行替換。

          以下是主程序的具體代碼,大家可以通過注釋理解整個(gè)處理過程。

          import sys, re

          from util import *

          print('<html><head><meta charset="gbk"><title>doc.txt</title></head><body>') # 添加HTML基本標(biāo)簽

          blocks=blocks(sys.stdin) # 獲取系統(tǒng)標(biāo)準(zhǔn)輸入

          for block in blocks: # 遍歷文件內(nèi)容

          block=re.sub('\*(.+)\*', '<strong>\1</strong>', block) # 替換內(nèi)容塊中兩個(gè)星號(hào)間的內(nèi)容為加重樣式

          block=re.sub(r'\n *- *(.+)', '\n<li>\1</li>', block) # 替換內(nèi)容塊中以“-”開頭的內(nèi)容為列表項(xiàng)

          block=re.sub(r'([^:>])\n', '\1<br/>\n', block) # 替換內(nèi)容塊中換行符“\n”為換行標(biāo)簽

          if re.match(r'(^[A-Z][\w ]+[A-Za-z]$)', block): # 匹配大寫字母開頭和以字母結(jié)尾的內(nèi)容

          print('<h1>' + block + '</h1>') # 添加一級(jí)標(biāo)題標(biāo)簽

          elif '<li>' in block: # 如果內(nèi)容塊包含列表項(xiàng)

          print('<ul>' + block + '</ul>') # 添加項(xiàng)目列表標(biāo)簽

          else:

          print('<p>' + block + '</p>') # 添加段落標(biāo)簽

          print('</body></html>') # 添加HTML結(jié)束標(biāo)簽

          當(dāng)我們完成以上代碼的編寫,就可以通過命令行終端執(zhí)行代碼。

          python main01.py <doc.txt> doc.html

          通過以上命令就能夠讓主程序讀取項(xiàng)目文件夾下的“doc.txt”,并且經(jīng)過處理后輸出文件“doc.html”。

          這個(gè)文件會(huì)自動(dòng)出現(xiàn)在PyCharm左側(cè)文件列表中,在文件名稱上點(diǎn)擊鼠標(biāo)右鍵,選擇瀏覽器中打開(Open in Browser),就能夠使用指定的瀏覽器進(jìn)行瀏覽了。

          在下一篇練習(xí)項(xiàng)目的教程中,我們將通過另外一種復(fù)雜的,但是具有很好擴(kuò)展性的方式重新實(shí)現(xiàn)這個(gè)項(xiàng)目。

          TML是一種用來描述網(wǎng)頁(yè)的標(biāo)記性語(yǔ)言。學(xué)習(xí)HTML可能并不難,主要是要記一些HTML標(biāo)簽和標(biāo)簽代表的含義。下面PHP程序員雷雪松根據(jù)使用的情況,整理出平時(shí)常用的HTML標(biāo)簽。

          HTML基礎(chǔ)之HTML常用標(biāo)簽-PHP程序員雷雪松的博客

          1、最基本的HTML結(jié)構(gòu)

          <!--<!DOCTYPE> 是HTML5聲明,<!DOCTYPE> 必須是 HTML 文檔的第一行,位于 <html> 標(biāo)簽之前。<!DOCTYPE>是指示 web 瀏覽器關(guān)于頁(yè)面使用哪個(gè) HTML 版本進(jìn)行編寫的指令。-->

          <!DOCTYPE html>

          <html>

          <!-- head標(biāo)簽是所有頭部元素的容器。head標(biāo)簽內(nèi)的元素可包含腳本、樣式表和提供頁(yè)面的元信息等等。以下標(biāo)簽都可以添加到 head 部分:title、base、link、meta、script 以及style。頭部的內(nèi)容不會(huì)顯示在瀏覽器的。 -->

          <head>

          <!-- 設(shè)置字符集,如果字符集不對(duì),可能導(dǎo)致亂碼。一般建議utf-8國(guó)際編碼 -->

          <meta http-equiv="Content-Type" content="text/html; charset=gb2312或utf-8或gbk" />

          <!-- SEO相關(guān)標(biāo)簽,title定義文檔的標(biāo)題,百度建議一般不要超過32位,meta定義頁(yè)面關(guān)鍵詞和頁(yè)面的描述-->

          <title>網(wǎng)頁(yè)標(biāo)題</title>

          <meta name="keywords" content="PHP程序員,技術(shù)博客,個(gè)人博客,雷雪松" />

          <meta name="description" content="PHP程序員,雷雪松(Raykaeso)的博客是一個(gè)優(yōu)秀的個(gè)人技術(shù)博客。PHP程序員雷雪松的博客記錄了Linux學(xué)習(xí),PHP開發(fā)與編程,Web前端開發(fā),MySQL學(xué)習(xí)和教程,NoSQL數(shù)據(jù)庫(kù)教程以及個(gè)人的人生經(jīng)歷和觀點(diǎn)。" />

          <link rel="stylesheet" type="text/css" href="main.css" />

          <script type="text/javascript" src="main.js"></script>

          </head>

          <!-- 正文部分,所有在瀏覽器上可見的內(nèi)容必須寫在body標(biāo)簽內(nèi)部 -->

          <body>

          </body>

          </html>

          2、最常用的HTML標(biāo)簽

          a、布局標(biāo)簽

          div標(biāo)簽定義文檔中的分區(qū)或節(jié)(division/section),可以把文檔分割為獨(dú)立的、不同的部分,主要用于布局。

          aside標(biāo)簽的內(nèi)容可用作文章的側(cè)欄,<span style="color: #ff0000;">html5新增標(biāo)簽</span>。

          header標(biāo)簽定義頁(yè)面的頭部(介紹信息),<span style="color: #ff0000;">html5新增標(biāo)簽</span>。

          section標(biāo)簽定義文檔中的節(jié)(section、區(qū)段)。比如章節(jié)、頁(yè)眉、頁(yè)腳或文檔中的其他部分,<span style="color: #ff0000;">html5新增標(biāo)簽</span>。

          footer 標(biāo)簽定義文檔或節(jié)的頁(yè)腳,通常包含文檔的作者、版權(quán)信息、使用條款鏈接、聯(lián)系信息等等,<span style="color: #ff0000;">html5新增標(biāo)簽</span>。

          article標(biāo)簽規(guī)定文章獨(dú)立的其他內(nèi)容,比如:標(biāo)題、內(nèi)容、評(píng)論,<span style="color: #ff0000;">html5新增標(biāo)簽</span>。

          b、文本標(biāo)簽

          h1-h6標(biāo)簽可定義標(biāo)題

          p標(biāo)簽定義段落

          b/strong標(biāo)簽加粗

          em標(biāo)簽來表示強(qiáng)調(diào)的文本,斜體

          strong標(biāo)簽表示重要文本

          u標(biāo)簽下劃線

          s標(biāo)簽刪除線

          br標(biāo)簽表示回車換行

          hr標(biāo)簽表示水平線

          span標(biāo)簽被用來組合文檔中的行內(nèi)元素。

          blockquote標(biāo)簽表示塊引用

          pre標(biāo)簽可定義預(yù)格式化的文本,保持原有格式的一種標(biāo)簽。

          sub標(biāo)簽下標(biāo),

          sup>標(biāo)簽上標(biāo)

          &nbsp;表示一個(gè)空格

          &copy;表示版權(quán)符

          &lt;表示<

          &gt;表示>

          c、a標(biāo)簽定義超鏈接,指定頁(yè)面間的跳轉(zhuǎn)。鏈接可以指向外部鏈接或者頁(yè)面內(nèi)部id錨點(diǎn),可以在當(dāng)前頁(yè)面打開,新開窗口。

          <a href="指向的鏈接地址或者網(wǎng)址#ID名" target="_blank|_self|_top|_parent">百度</a>

          d、多媒體標(biāo)簽

          img標(biāo)簽主要在網(wǎng)頁(yè)中插入圖像,可以定義圖片替換文本、顯示寬度和高度、是否帶邊框,建議等比例設(shè)置,否則圖像會(huì)變形。

          <img src="圖片地址" alt="替換文本,圖片打不開的時(shí)候顯示" width="圖片寬度" height="高度" border="0" />

          audio標(biāo)簽定義聲音,比如音樂或其他音頻流。<span style="color: #ff0000;">html5新增標(biāo)簽</span>。

          <audio src="someaudio.wav">您的瀏覽器不支持 audio 標(biāo)簽。</audio>

          video標(biāo)簽定義視頻,比如電影片段或其他視頻流。<span style="color: #ff0000;">html5新增標(biāo)簽</span>。

          <video src="movie.ogg" controls="controls">您的瀏覽器不支持 video 標(biāo)簽。</video>

          e、序列化標(biāo)簽

          ul和li無序列表標(biāo)簽

          <ul>

          <li>HTML</li>

          <li>JS</li>

          <li>PHP</li>

          </ul>

          ol和li有序列表標(biāo)簽,可以使用type屬性規(guī)定有序列表符號(hào)的類型。1 按數(shù)字有序排列,為默認(rèn)值,(1、2、3、4);a 按小寫字母有序排列,(a、b、c、d);A 按字母大寫有序排列,(A、B、C、D)。i 按小寫羅馬字母有序,(i, ii, iii, iv);I 按小寫羅馬字母有序,(I, II, III, IV)。

          <ol>

          <li>HTML</li>

          <li>JS</li>

          <li>PHP</li>

          </ol>

          dl標(biāo)簽定義了定義列表(definition list),dl標(biāo)簽用于結(jié)合 dt(定義列表中的項(xiàng)目)和 dd(描述列表中的項(xiàng)目)。

          <dl>

          <dt>計(jì)算機(jī)</dt>

          <dd>用來計(jì)算的儀器 ... ...</dd>

          </dl>

          f、表格標(biāo)簽

          table標(biāo)簽和tr標(biāo)簽,th標(biāo)簽和td標(biāo)簽,合并單元格。

          <table width="100%" height="193" border="1" cellpadding="0" cellspacing="0" bordercolor="#FF0000" bgcolor="#000000" background="">

          <tr>

          <th>標(biāo)題</th>

          <th>標(biāo)題</th>

          </tr>

          <tr>

          <!-- 合并橫向單元格 -->

          <td colspan="2" nowrap="nowrap">&amp;nbsp;</td>

          </tr>

          <tr>

          <td></td>

          <!-- 合并縱向單元格 -->

          <td rowspan="2"> </td>

          </tr>

          <tr>

          <td height="16"> </td>

          </tr>

          </table>

          g、表單標(biāo)簽

          form標(biāo)簽定義提交方式、提交地址、表單字符集以及如何對(duì)其進(jìn)行編碼,需要提交的表單一定要放在form標(biāo)簽內(nèi)。

          <form id="form1" name="form1" method="post|get" enctype="multipart/form-data" action="提交到的地址"></form>

          input標(biāo)簽用于搜集用戶信息

          <input name="userName" type="text" maxlength="5" size="100" value="asdfasdfasfd" />

          密碼,輸入的字符會(huì)被掩碼(顯示為星號(hào)或原點(diǎn))

          <input name="pwd" type="password" maxlength="5" size="100" value="" />

          文件類型的表單,上傳文件時(shí),form表單一定要設(shè)置為enctype="multipart/form-data"

          <input type="file" name="file" />

          隱藏表單

          <input type="hidden" name="country" value="China" />

          提交

          <input type="submit" name="Submit" value="提交" disabled="disabled" />

          重置

          <input type="reset" name="Submit2" value="重置" />

          radio單選

          <input name="sex" type="radio" value="1" />男

          <input name="sex" type="radio" value="2" checked="checked" />女

          checkbox多選

          <input name="skill" type="checkbox" value="1" checked="checked" />PHP

          <input name="skill" type="checkbox" value="2" />前端

          <input name="skill" type="checkbox" value="2" />數(shù)據(jù)庫(kù)

          <span style="color: #ff0000;">注:checked="checked"可以簡(jiǎn)寫成checked</span>

          label標(biāo)簽為input元素定義標(biāo)注,如果您點(diǎn)擊label元素文本,就會(huì)觸發(fā)此input控件。

          textarea標(biāo)簽,設(shè)置文本區(qū)內(nèi)的可見行數(shù)和寬度

          <textarea name="content" cols="30" rows="10">大段文本輸入框</textarea>

          button標(biāo)簽定義一個(gè)按鈕

          提交按鈕

          <button type="submit" value="提交">提交</button>

          重置按鈕

          <button type="reset" value="重置">重置</button>

          select標(biāo)簽和option標(biāo)簽下拉列表

          單選菜單列表框

          <select name="user">

          <option value="1">ray</option>

          <option value="2" selected="selected">raykaeso</option>

          </select>

          多選列表下拉框,shift加鼠標(biāo)單擊,可以連續(xù)選擇多個(gè)選擇,CTRL+鼠標(biāo)點(diǎn)擊,可以點(diǎn)擊多個(gè)。

          <select name="user" size="10" multiple="multiple">

          <option value="1">雷雪松</option>

          <option value="2" selected="selected">ray</option>

          <option value="3">raykaeso</option>

          </select>

          注:selected="selected"可簡(jiǎn)寫成selected,表示選中

          3、其他HTML事項(xiàng)

          a、HTML標(biāo)簽和屬性是不區(qū)分大小寫的,建議HTML標(biāo)簽和屬性都小寫,屬性值必須用雙引號(hào)包圍。

          b、HTML標(biāo)簽都是以開始標(biāo)簽起始,以結(jié)束標(biāo)簽終止。大部分HTML標(biāo)簽都是成對(duì)出現(xiàn)的,稱為雙標(biāo)簽,比如:p標(biāo)簽、div標(biāo)簽,也有的HTML標(biāo)簽在開始標(biāo)簽中結(jié)束的標(biāo)簽,稱為單標(biāo)簽,比如:hr標(biāo)簽、br標(biāo)簽。大多數(shù) HTML 元素可擁有屬性,文本內(nèi)容都是寫在開始標(biāo)簽與結(jié)束標(biāo)簽之間。

          c、HTML標(biāo)簽之間盡量縮進(jìn)與換行,每行代碼不要過長(zhǎng),方便閱讀和維護(hù)。

          d、HTML標(biāo)簽使用必須符合標(biāo)簽嵌套規(guī)則。禁止a標(biāo)簽嵌套a標(biāo)簽,p標(biāo)簽嵌套div標(biāo)簽。

          e、建議不使用HTML已經(jīng)廢棄的或者不贊成使用的標(biāo)簽,少使用table布局、iframe框架嵌套以及flash播放器。

          來源:PHP程序員雷雪松的博客 -HTML基礎(chǔ)之HTML常用標(biāo)簽(http://www.leixuesong.cn/2045)


          主站蜘蛛池模板: 国产人妖视频一区二区| 亚洲bt加勒比一区二区| 亚洲一区二区久久| 亚洲AV美女一区二区三区| 亚洲AV无码第一区二区三区| 日本一区二区在线| 国产日韩精品一区二区三区| 日本一区二区三区在线视频观看免费 | 韩国一区二区三区| 久久精品综合一区二区三区| 高清一区二区三区日本久| 亚洲av乱码一区二区三区按摩| 精品国产一区二区三区久久蜜臀| 国产乱码精品一区二区三区中文| 免费一本色道久久一区| 色狠狠一区二区三区香蕉蜜桃 | 午夜天堂一区人妻| 精品一区中文字幕| 在线精品一区二区三区| 久久毛片免费看一区二区三区| 亚洲无圣光一区二区| 久久国产午夜精品一区二区三区| 夜夜精品视频一区二区| 久久伊人精品一区二区三区| 国产免费一区二区三区在线观看| 国产精品美女一区二区三区| 亚洲图片一区二区| 无码人妻久久久一区二区三区| 亚洲男人的天堂一区二区| 国产剧情一区二区| 日韩熟女精品一区二区三区| 国产精品一区二区三区高清在线 | 中文字幕日韩一区| 亚洲国产美国国产综合一区二区| 激情内射日本一区二区三区| 午夜视频久久久久一区 | 久久久精品人妻一区二区三区蜜桃| 亚洲片一区二区三区| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 精品国产一区二区三区四区| 久久久久久人妻一区精品|