數據類型-----字符串、字節


 

 

一、字符串

是一組由字符組成的序列,每一個字符都是字符串中的一個元素。

注意:不存在字符str,最小單位為字符串

字符串是不可修改類型(基本數據類型)

1. 字符串的創建-----單引號、雙引號、三引號

  • 單引號和雙引號交替使用可以到輸出雙引號的和單引號的作用
  • 三引號----自帶換行
  • 續行符"\"可以換行
  • 空字符串 strnull = '

2. 字符轉義----(可以轉義的字符由' " \

在需要轉義的字符前面添加"\",對特殊字符進行轉義

   

# 換行\n, \t, \r----換行,制表符,回車

b = 'nnnnn\n'

   

   

3. 字符串的操作(運算符、索引、切片)

(1)        運算符 ---- + * in is < >

+

合並的字符串(新創建字符串)

print('a'+'b')

*         

重復

in/not in

值判斷        

print('a' in 'asdasda')

is/is not

對象判斷

eg:

a = 'asd'

b = 'asd'

print(a is b)

< > <= >=

比較運算

print('a' < 'b')                 # 比較ASCII

*****

print('absdc' < 'abd')          # 按照元素順序,依次比較

(2)        索引----獲取單個元素

格式: 變量名[index]

  • index的第一個元素是0,最后一個元素是-1
  • index 為正數從左往右,負數從右往左
  • index范圍(-len() len()-1
  • 字符串長度可以通過len()獲得

   

(3)        切片----獲得字符串中的多個元素

格式: 變量名[start:end:step],三個參數都可以省略

注意start方向問題

注意start對應字符輸出end對應字符不輸出

[:]

提取從開頭(默認位置0)到結尾(默認位置-1)的整個字符串

[start:]

start 提取到結尾

[:end]

從開頭提取到end - 1

[start:end]

start 提取到end - 1

[start:end:step]

start 提取到end - 1,每step 個字符提取一個左側第一個字符的位置/偏移量為0,右側最后一個字符的位置/偏移量為-1

   

Example:

a[:]                         # 整切片

a[0:]

a[-4:]                        # 切片索引可以越界

a[:4]

a[-5:-1]

a[-1:-5:-1]

a[::-1]                        # 顛倒

   

局部切片新創建對象,整體切片不新建對象

print(a is a[:]) ------ True

print(id(a), id(a[:]), id(a[1:4]) )        

   

Practice:

使用切片工具,截取data中的年月日,data = '2018-06-28'

4. 字符串的相關方法

定義的字符串,相當於創建的一個str對象

s = 'fssdfgsdfg'

print(tpye(s))

   

   

  1. count()統計一個字符在字符串中的數量

    x                待統計自字符串

    start        起始位置

    end                結束為止默認從頭到尾

    # 幾乎在所有包含startend的地方都是包含start,不包含end

       

  2. index() 返回查找字串的位置,默認輸出第一次子串出現為止

    當查不到查找字串時報錯

    index(sub, start, end)

    sub 為查找字串

       

  3. find() 如果找不到,返回 -1
  4. join() 將序列中的每一個元素,使用字符串拼接起來

    # 填充元素在前,被填充序列在括號中

    s = '123'

    b = '-'

    print(b.join(s))

  5. replace(old new, count)

    old         待替換字符串

    new         要替換的字符串

    count        不寫全部替換,指定后從左往右替換,可以超出實際次數

       

    # replace不修改原數據,而是新創建字符串存儲

       

  6. strip(chr) 剪切,按照傳入的參數,去掉兩端的對應字符串

    chr        默認空格

    剪切時按照剪切字符的所有單子符,從兩端一直剪切到不存在符合字符為止

       

    s = ' adasdferasda '

    print(s.strip('ad'))

       

    # 左剪切        lstrip()

    # 右剪切        rstrip()

  7. split(sep, max)        切割:被切割的字符會去掉

    sep        切割字符

    max        最大切割次數

    # 默認按照空格切割,返回值為列表類型

       

    s = ' adasdferasda '

    print(s.split('er'))

       

    對字符串的所有操作都不會原地去做(修改字符串),而是新建。

  • upper() / lower() 變成大寫或小寫
  • capitalize()        首字母大寫
  • isnumeric()         判斷字符串是否完全是數字[漢字數字返回True]
    • 數字包括羅馬數字、中文數字、Unicode數字、byte數字(單字節)、全角數字(雙字節)

    isdigit()                判斷字符串是否完全是數字[漢字數字返回Flase]

    isdecimal()

  1. isalpha()         判斷是否完全都是字符[中文/英文]
  2. isidentifier()        判斷字符串是否是合法標識符[變量名[字符、數字、下划線]]
  3. isupper()        判斷是字符串內字母否完全是大寫

    islower() 判斷是字符串內字母否完全是小寫

    isspace()        判斷是否完全是空格

  4. center(width, fillchar)                向兩端填充字符,先左后右

    width 填充完畢后的寬度

    fillchar 填充字符

     

    二、字節

字節是一系列單字節的組合,每一個字節都是[0, 255](無符號)范圍內組成。

單字節:一個字節8個數據位

字節也不支持修改(類似字符串、簡單變量)

   

1. 字節的創建

b = b'abc'

c = b'' --------- 漢字報錯,因為漢字不能以字節形式報錯

8個數據位,最多存儲256不同內容

2. 字節的操作        運算符、索引、切片

(1) 運算符         + - * / is in >

eg:

print(b'abc' in b'abcsd')

print(b'abc' >= b'abcsd')

(2)        索引         索引顯示ASCII

eg:        

print(b'b')

(3)        切片        切片顯示字節

三、格式化 format:

方便打印輸出的時候顯示

   

# 將數字格式化成字符串

方法1 %

s% == str()

print('jj %s' % 1)

print('jj %s %s' % (1, 3))

   

方法2:format

print("'jj', 'java', {}, {}".format(1,2,4))

 

# 1.輸出如下內容:分別使用雙引號,和三引號

# Aare you "tom"

# Bno

   

a = ''''

Aare you "tom"

Bno

'''

b = "Aare you \"tom\"\n" \

"Bno"

   

print(a , b)

   

   

print('第二題=========================\n')

# 2.定義兩個字符串,a="hello" b="hello",令c=a

# 思考:是否能對a中的h進行修改

# 輸出abc三個變量的值

# 使用is==判斷abc之間的關系,並畫出內存圖

   

m = 'hello'

n = 'hello'

t = m

   

idx = m.index('h')

chang = input('To change \'h\' as what:\n')

m_new = chang + m[idx:]

print('m修改后的結果是:',m_new)

############################

# def namestr(obj, namespace = globals()):

# return [name for name in namespace if namespace[name] is obj]

# import inspect

# import re

#

# def get_variable_name(variable):

# loc = locals()#locals()方法移到函數內

# for key in loc:

# if loc[key] == variable:

# return loc

###############################

def judge(a, b):

if a is b:

return '{}{}同一對象'.format(a, b)

elif a == b:

return '{}{}是同一值'.format(a, b)

else:

return '{}{}沒半毛錢關系'.format(a, b)

   

print(judge(m, n))

print(judge(m, t))

print(judge(n, t))

print(judge(m_new, t))

   

   

print('第三題=========================\n')

# 3.分別輸入3個愛好,打印出來"我的愛好是******"

# 使用格式化輸出

hobby1 = 'hiking'

hobby2 = 'biking'

hobby3 = 'computer'

   

print('Method1\n My hobby is {}, {} and {}'\

.format(hobby1, hobby2, hobby3))

print('Method2\n My hobby is %s %s and %s' % (hobby1, hobby2, hobby3))

   

   

print('第四題=========================\n')

# 4.這是一個地址,http://news.gzcc.cn/html/2017/xiaoyuanxinwen_1027/8443.html

# 其中1027/8443是新聞編號,想辦法獲得新聞編號。至少兩種方法。

website = 'http://news.gzcc.cn/html/2017/xiaoyuanxinwen_1027/8443.html'

   

# 第一種方案:split

cut1 = website.split('_')

cut1 = cut1[1].split('.')

print('采用split方法:', cut1[0])

   

# 第二種方案,切片(已知數字位數)

cut_back = website[-13: -5]

print('倒數位置固定的話,采用位數:', cut1[0])

# 第三種方案,切片(倒數第一個反斜杠)

lens = len(website)

website_back = website[::-1]

slash = website_back.index('/')

result = website_back[slash-4 : slash+4]

result = result[::-1]

print('采用尋找倒數第一個'/'方法:', cut1[0])

   

   

print('第五題=========================\n')

# 5.做如下練習:

# # 1.輸入一種水果,如葡萄

# # 2.打印類似"吃葡萄不吐葡萄皮,不吃葡萄倒吐葡萄皮"的效果

# # 3.使用切片,切出自己輸入的水果

# # 4.使用strip,剪切到自己輸入的水果

# # 5.統計打印的的文本中,水果出現的次數

   

fruit = input('>>>>>>step1\nPlease input a fruit name\n')

   

   

# 替換

lyric = '吃葡萄不吐葡萄皮,不吃葡萄倒吐葡萄皮'

lyric_new = lyric.replace('葡萄', fruit)

print('>>>>>>step2\nreplace方案:'+ lyric_new)

   

# 格式化輸出

print('>>>>>>step2\nformat方案:'+'{}不吐{}皮,不吃{}倒吐{}'.format(fruit, fruit, fruit, fruit))

   

# step3,切出水果

   

# 模擬索引index()函數,尋找第一個相符點

def my_index(lyric_new, fruit):

index_list = []

count= 0

   

# 遍歷句子,判斷和水果名的比較

for stri in range(len(lyric_new)-len(fruit)+1):

for dexi in range(0, len(fruit)):

# print(stri, lyric_new[stri + dexi], fruit[dexi],lyric_new[stri + dexi] == fruit[dexi])

if lyric_new[stri + dexi] == fruit[dexi]:

count += 1

index_list.append(stri)

   

# 計算出現次數

# print(count, len(fruit))

count_total = count // len(fruit)

# 修改出現位置列表

index_list = index_list[::len(fruit)]

   

# 切片獲得隨機一個fruit

import random

dex_redom = random.randint(0, len(index_list)-1)

fruit_cut = lyric_new[index_list[dex_redom]:index_list[dex_redom] + len(fruit)]

   

print('>>>>>>step3\n使用切片法獲得的第{}fruit為:{}'.format(dex_redom,fruit_cut))

   

# 使用strip獲得fruit名稱

lyric_new_split = lyric_new.split('不吐', 1)

lyric_new_split = lyric_new_split[0].strip('')

print('>>>>>>step4\n采用split方法獲得的fruit名稱:' + lyric_new_split)

   

#輸出

print('>>>>>>step5\n在第{} / {} / {} / {}位置出現fruit'.format(index_list[0],\

index_list[1], index_list[2], index_list[3]))

print('出現次數: {}'.format(len(index_list)))

return index_list, count_total, fruit_cut

   

(my_index(lyric_new, fruit))

   

# print('尋找+切片,得出結果:'+my_index(lyric_new, fruit)[1])

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM