【python】五、字符串(一)

字符串基礎知識

  1. 定義字符串:

s1 = ‘Hello World!’

  1. 利用下標訪問字符串,利用“:"可以訪問一定區間的字符串。

s1[0]=H
s1[0:1]=He //訪問0到1號下標的字符串
s1[:4]=Hello//表示從0到4號位置的字符串

  1. 連接字符串用+即可。

s1+qq=Hello World!qq

  1. 生成小寫字母a~z:

string.ascii_lowercase 小寫字母 ‘abcdefghijklmnopqrstuvwxyz’。

  1. 生成大寫字母 A~Z

string.ascii_uppercase 大寫字母 ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’。

  1. 生成所有字母:

string.ascii_letters 生成所有字母
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 從a-z和A-Z

  1. 生成所有數字:

string.digits是生成所有數字0-9
0123456789

  1. 隨機生成字符:

print( random.choice(‘tomorrow’) ) # 從序列tomorrow中隨機選取一個元素

  1. 隨機生成字母:

a_str = string.ascii_letters random_letter = random.choice(a_str)

  1. 檢查字符串是否以 obj 結束,如果beg 或者 end 指定則檢查指定的範圍內是否以 obj 結束,如果是,返回 True,否則返回 False.

string.endswith(obj, beg=0, end=len(string))

  1. 檢查字符串是否是以 obj 開頭,是則返回 True,否則返回 False。如果beg 和 end 指定值,則在指定範圍內檢查.

string.startswith(obj, beg=0,end=len(string))

例題

1. 組成新字符串

題目: 輸入一個字符串,將該字符串中下標爲偶數的字符組成新串並通過字符串格式化方式顯示。
思路: 循環字符串,用+連接偶數即可。

def main():
    print("請輸入字符串:")
    s1=input()
    snew=""
    for i in range(len(s1)):
        if(i%2==0):  #偶數下標
            snew+=s1[i] #連接
    print("新的字符串爲:%s" %(snew)) #格式化輸出

main()

在這裏插入圖片描述

2. 生成包含15個字母的列表

題目: 編寫程序,生成一個15個不重複的大小寫字母組成的列表。
思路: 最開始我想着先生成字母的隨機ASCII,再轉換爲字符,但是發現python提供了可以生成字母的函數,所以就用了庫函數。

  • 先用庫函數asciii_letters()生成a~z和A~Z的字符,用字符串str保存。
  • 再利用庫函數random.choice(str)生成a~z,A~Z的隨機字符。
  • 判斷列表中是否存在這個字符,存在則跳過,不存在就放到列表中,最後打印即可。
import string
import random

def main():
    ranletter=[] #列表保存15個隨機字母
    i=15
    while(i>0):
        str=string.ascii_letters #生成a~z,A~Z字符串
        randomle=random.choice(str) #生成隨機字母
        if(randomle not in ranletter):#判斷列表中已經有了這個字符
            ranletter.append(randomle) #沒有就加入列表
            i-=1
        else:
            continue  #有就繼續
        
    print("包含15個不重複大小寫字母的列表:\n",ranletter) #輸出列表

main()

在這裏插入圖片描述

3. 生成10位字符密碼

題目: 生成15 個包括10 個字符的隨機密碼,密碼中的字符只能是大小寫字母、數字和特殊字符“@” 、“$” 、“#” 、“&” 、“_” 、“~” 構成。
思路: 這個是第二題的一個拓展,主要思路一樣,注意細節就可以。

  • 兩次循環,一次控制15,一次控制10。
  • 我們先生成密碼範圍字符串,再隨機在這裏面生成任意字符串。
  • [str,str,str……]我們這樣保存密碼,內循環每次生成一個字符,連接爲10位字符串res,在外循環把res存入列表,再初始化字符串res。
  • 最後循環輸出列表即可。
import string
import random

def main():
    ranpass=[] #列表保存15個隨機密碼
    i=15
    stre="@$#&_~"
    str=string.ascii_letters+string.digits+stre #生成a~z,A~Z字符串,數字0~9,特殊字符
    while(i>0):#15個密碼
        res="" #一定在開頭初始化,否則無法形成字符串
        j=10 #不能放到外面,每次都要10次
        while(j>0): #10個字符,用字符串保存
            randomle=random.choice(str) #生成隨機字母
            if(randomle not in res):#判斷字符串中是否已經有了這個字符
                res+=randomle #添加字符
                j-=1
            else:
                continue  #有就繼續
        ranpass.append(res) #把字符串加入列表
        i-=1
    print("15個包含10個字符的密碼:\n") #輸出列表
    for x in range(len(ranpass)):
        
        print("第%d個密碼:"%(x+1),end=" ")
        print(ranpass[x])
main()

在這裏插入圖片描述

4. 尋找特定字符

題目: 給定字符串"site sea suede sweet see kase sse ssee loses" ,匹配出所s開頭,e 結尾的單詞。應該輸出:site suede see sse ssee
思路: 分割爲單詞,然後利用庫函數判斷。

  • 我們res保存符合條件的單詞,tmp保存每一個單詞,利用index保存初始位置,i保存空格位置。
  • str[i]不等於空格,就i++,等於空格,tmp=[index:i]我們得到了一個單詞,對index進行重置,注意此時i指向空格,所以index=i+1。
  • 每次對tmp進行判斷,startswith(‘s’)和endswith(‘e’)判斷開頭和結尾是否符合條件,符合條件就res+=tmp,進行保存,res+=’ ',單詞之間用空格分開。
  • 要注意最後一個單詞我們在循環中無法處理,它到末尾會跳出,所以無法得到最後一個單詞,故我們要單獨處理一次,做上面的處理即可。
import string

def main():
    print("請輸入一串字符,單詞用空格隔開")
    str=input()
    res="" #保存最終結果的字符串
    index=0; #保存單詞開始位置
    for i in range(len(str)):
        tmp="" #每次要初始化,保存每一個單詞
        if(str[i]!=' '):
            continue
        elif(str[i]==' '):#空格,表示一個單詞
            tmp=str[index:i] #得到每一個單詞
            index=i+1 #重置開始位置,i在空格位置上,所以需要加一,單詞前面無空格
            if(tmp.startswith('s') and tmp.endswith('e')):#判斷單詞是否符合要求
                res+=tmp #連接
                res+=' '
    tmp=str[index:len(str)] #處理最後一個單詞
    if(tmp.startswith('s') and tmp.endswith('e')):#判斷單詞是否符合要求
        res+=tmp #連接
        
    print("匹配的字符爲:%s"%res)

main()

在這裏插入圖片描述
加油哦!💪。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章