標籤:comm partition 變數 number max body 不同類 book 地址
字串介紹
想一想:
當打來瀏覽器登入某些網站的時候,需要輸入密碼,瀏覽器把密碼傳送到伺服器後,伺服器會對密碼進行驗證,其驗證過程是把之前儲存的密碼與本次傳遞過去的密碼進行對比,如果相等,那麼就認為密碼正確,否則就認為不對;伺服器既然想要儲存這些密碼可以用資料庫(比如MySQL),當然為了簡單起見,咱們可以先找個變數把密碼儲存起來即可;那麼怎樣儲存帶有字母的密碼呢?
答:
字串
python中字串的格式
如下定義的變數a,儲存的是數字類型的值
a = 100
如下定義的變數b,儲存的是字串類型的值
b = "hello itcast.cn" 或者 b = ‘hello itcast.cn‘
小總結:
字串輸出
demo
name = ‘xiaoming‘ position = ‘講師‘ address = ‘北京市昌平區建材城西路金燕龍辦公樓1層‘ print(‘--------------------------------------------------‘) print("姓名:%s"%name) print("職位:%s"%position) print("公司地址:%s"%address) print(‘--------------------------------------------------‘)
結果:
-------------------------------------------------- 姓名: xiaoming 職位: 講師 公司地址: 北京市昌平區建材城西路金燕龍辦公樓1層 --------------------------------------------------
字串輸入
之前在學習input的時候,通過它能夠完成從鍵盤擷取資料,然後儲存到指定的變數中;
注意:input擷取的資料,都以字串的方式進行儲存,即使輸入的是數字,那麼也是以字串方式儲存
demo:
userName = input(‘請輸入使用者名稱:‘) print("使用者名稱為:%s"%userName) password = input(‘請輸入密碼:‘) print("密碼為:%s"%password)
結果:(根據輸入的不同結果也不同)
請輸入使用者名稱:dongGe 使用者名稱為: dongGe 請輸入密碼:haohaoxuexitiantianxiangshang 密碼為: haohaoxuexitiantianxiangshang
下標和切片1. 下標索引
所謂“下標”,就是編號,就好比超市中的儲存櫃的編號,通過這個編號就能找到相應的儲存空間
生活中的 "下標"
超市儲物櫃
高鐵二等座
高鐵一等座
綠皮車
字串中"下標"的使用
列表與元組支援下標索引好理解,字串實際上就是字元的數組,所以也支援下標索引。
如果有字串:name = ‘abcdef‘,在記憶體中的實際儲存如下:
如果想取出部分字元,那麼可以通過下標的方法,(注意python中下標從 0 開始)
運行結果:
2. 切片
切片是指對操作的對象截取其中一部分的操作。字串、列表、元組都支援切片操作。
切片的文法:[起始:結束:步長]
注意:選取的區間屬於左閉右開型,即從"起始"位開始,到"結束"位的前一位結束(不包含結束位本身)。
我們以字串為例講解。
如果取出一部分,則可以在中括弧[]中,使用:
name = ‘abcdef‘ print(name[0:3]) # 取 下標0~2 的字元
運行結果:
name = ‘abcdef&aposapos; print(name[0:5]) # 取 下標為0~4 的字元
運行結果:
name = ‘abcdef‘ print(name[3:5]) # 取 下標為3、4 的字元
運行結果:
name = ‘abcdef‘ print(name[2:]) # 取 下標為2開始到最後的字元
運行結果:
name = ‘abcdef‘ print(name[1:-1]) # 取 下標為1開始 到 最後第2個 之間的字元
運行結果:
想一想
字串常見操作
如有字串mystr = ‘hello world itcast and itcastcpp‘,以下是常見的操作
find
檢測 str 是否包含在 mystr中,如果是返回開始的索引值,否則返回-1
mystr.find(str, start=0, end=len(mystr))
index
跟find()方法一樣,只不過如果str不在 mystr中會報一個異常.
mystr.index(str, start=0, end=len(mystr))
count
返回 str在start和end之間 在 mystr裡面出現的次數
mystr.count(str, start=0, end=len(mystr))
replace
把 mystr 中的 str1 替換成 str2,如果 count 指定,則替換不超過 count 次.
mystr.replace(str1, str2, mystr.count(str1))
split
以 str 為分隔字元切片 mystr,如果 maxsplit有指定值,則僅分隔 maxsplit 個子字串
mystr.split(str=" ", 2)
capitalize
把字串的第一個字元大寫
mystr.capitalize()
title
把字串的每個單字首大寫
>>> a = <spanclass="hljs-string">"hello itcast">>> a.title()‘Hello Itcast‘
startswith
檢查字串是否是以 obj 開頭, 是則返回 True,否則返回 False
mystr.startswith(obj)
endswith
檢查字串是否以obj結束,如果是返回True,否則返回 False.
mystr.endswith(obj)
lower
轉換 mystr 中所有大寫字元為小寫
mystr.lower()
upper
轉換 mystr 中的小寫字母為大寫
mystr.upper()
ljust
返回一個原字串靠左對齊,並使用空格填充至長度 width 的新字串
mystr.ljust(width)
rjust
返回一個原字串靠右對齊,並使用空格填充至長度 width 的新字串
mystr.rjust(width)
center
返回一個原字串置中,並使用空格填充至長度 width 的新字串
mystr.center(width)
lstrip
刪除 mystr 左邊的空白字元
mystr.lstrip()
rstrip
刪除 mystr 字串末尾的空白字元
mystr.rstrip()
strip
刪除mystr字串兩端的空白字元
>>> a = "\n\t itcast \t\n">>> a.strip()‘itcast‘
rfind
類似於 find()函數,不過是從右邊開始尋找.
mystr.rfind(str, start=0,end=len(mystr) )
rindex
類似於 index(),不過是從右邊開始.
mystr.rindex( str, start=0,end=len(mystr))
partition
把mystr以str分割成三部分,str前,str和str後
mystr.partition(str)
rpartition
類似於 partition()函數,不過是從右邊開始.
mystr.rpartition(str)
splitlines
按照行分隔,返回一個包含各行作為元素的列表
mystr.splitlines()
isalpha
如果 mystr 所有字元都是字母 則返回 True,否則返回 False
mystr.isalpha()
isdigit
如果 mystr 只包含數字則返回 True 否則返回 False.
mystr.isdigit()
isalnum
如果 mystr 所有字元都是字母或數字則返回 True,否則返回 False
mystr.isalnum()
isspace
如果 mystr 中只包含空格,則返回 True,否則返回 False.
mystr.isspace()
join
mystr 中每個字元後面插入str,構造出一個新的字串
mystr.join(str)
想一想
- (面試題)給定一個字串aStr,返回使用空格或者‘\t‘分割後的倒數第二個子串
列表介紹
想一想:
前面學習的字串可以用來儲存一串資訊,那麼想一想,怎樣儲存咱們班所有同學的名字呢?
定義100個變數,每個變數存放一個學生的姓名可行嗎?有更好的辦法嗎?
答:
列表
列表的格式
變數A的類型為列表
namesList = [‘xiaoWang‘,‘xiaoZhang‘,‘xiaoHua‘]
比C語言的數組強大的地方在於列表中的元素可以是不同類型的
testList = [1, ‘a‘]
列印列表
demo:
結果:
xiaoWang xiaoZhang xiaoHua
列表的迴圈遍曆1. 使用for迴圈
為了更有效率的輸出資料行表的每個資料,可以使用迴圈來完成
demo:
namesList = [‘xiaoWang‘,‘xiaoZhang‘,‘xiaoHua‘] for name in namesList: print(name)
結果:
xiaoWang xiaoZhang xiaoHua
2. 使用while迴圈
為了更有效率的輸出資料行表的每個資料,可以使用迴圈來完成
demo:
namesList = [‘xiaoWang‘,‘xiaoZhang‘,‘xiaoHua‘] length = len(namesList) i = 0 while i<length: print(namesList[i]) i+=1
結果:
xiaoWang xiaoZhang xiaoHua
列表的相關操作
列表中存放的資料是可以進行修改的,比如"增"、"刪"、"改""
添加元素("增"append, extend, insert)append
通過append可以向列表添加元素
demo:
#定義變數A,預設有3個元素 A = [‘xiaoWang‘,‘xiaoZhang‘,‘xiaoHua‘] print("-----添加之前,列表A的資料-----") for tempName in A: print(tempName) #提示、並添加元素 temp = input(‘請輸入要添加的學生姓名:‘) A.append(temp) print("-----添加之後,列表A的資料-----") for tempName in A: print(tempName)
結果:
extend
通過extend可以將另一個集合中的元素逐一添加到列表中
insert
insert(index, object) 在指定位置index前插入元素object
修改元素("改")
修改元素的時候,要通過下標來確定要修改的是哪個元素,然後才能進行修改
demo:
#定義變數A,預設有3個元素 A = [‘xiaoWang‘,‘xiaoZhang‘,‘xiaoHua‘] print("-----修改之前,列表A的資料-----") for tempName in A: print(tempName) #修改元素 A[1] = ‘xiaoLu‘ print("-----修改之後,列表A的資料-----") for tempName in A: print(tempName)
結果:
-----修改之前,列表A的資料----- xiaoWang xiaoZhang xiaoHua -----修改之後,列表A的資料----- xiaoWang xiaoLu xiaoHua
尋找元素("查"in, not in, index, count)
所謂的尋找,就是看看指定的元素是否存在
in, not in
python中尋找的常用方法為:
- in(存在),如果存在那麼結果為true,否則為false
- not in(不存在),如果不存在那麼結果為true,否則false
demo
#待尋找的列表 nameList = [‘xiaoWang‘,‘xiaoZhang‘,‘xiaoHua‘] #擷取使用者要尋找的名字 findName = input(‘請輸入要尋找的姓名:‘) #尋找是否存在 if findName in nameList: print(‘在字典中找到了相同的名字‘) else: print(‘沒有找到‘)
結果1:(找到)
結果2:(沒有找到)
說明:
in的方法只要會用了,那麼not in也是同樣的用法,只不過not in判斷的是不存在
index, count
index和count與字串中的用法相同
>>> a = [‘a‘, ‘b‘, ‘c‘, ‘a‘, ‘b‘]>>> a.index(‘a‘, 1, 3) # 注意是左閉右開區間
刪除元素("刪"del, pop, remove)
類比現實生活中,如果某位同學調班了,那麼就應該把這個條走後的學生的姓名刪除掉;在開發中經常會用到刪除這種功能。
列表元素的常用刪除方法有:
- del:根據下標進行刪除
- pop:刪除最後一個元素
- remove:根據元素的值進行刪除
demo:(del)
movieName = [‘加勒比海盜‘,‘駭客帝國‘,‘第一滴血‘,‘指環王‘,‘霍位元人‘,‘速度與激情‘] print(‘------刪除之前------‘) for tempName in movieName: print(tempName) del movieName[2] print(‘------刪除之後------‘) for tempName in movieName: print(tempName)
結果:
------刪除之前------ 加勒比海盜 駭客帝國 第一滴血 指環王 霍位元人 速度與激情 ------刪除之後------ 加勒比海盜 駭客帝國 指環王 霍位元人 速度與激情
demo:(pop)
movieName = [‘加勒比海盜‘,‘駭客帝國‘,‘第一滴血‘,‘指環王‘,‘霍位元人‘,‘速度與激情‘] print(‘------刪除之前------‘) for tempName in movieName: print(tempName) movieName.pop() print(‘------刪除之後------‘) for tempName in movieName: print(tempName)
結果:
------刪除之前------ 加勒比海盜 駭客帝國 第一滴血 指環王 霍位元人 速度與激情 ------刪除之後------ 加勒比海盜 駭客帝國 第一滴血 指環王 霍位元人
demo:(remove)
movieName = [‘加勒比海盜‘,‘駭客帝國‘,‘第一滴血‘,‘指環王‘,‘霍位元人‘,‘速度與激情‘] print(‘------刪除之前------‘) for tempName in movieName: print(tempName) movieName.remove(‘指環王‘) print(‘------刪除之後------‘) for tempName in movieName: print(tempName)
結果:
------刪除之前------ 加勒比海盜 駭客帝國 第一滴血 指環王 霍位元人 速度與激情 ------刪除之後------ 加勒比海盜 駭客帝國 第一滴血 霍位元人 速度與激情
排序(sort, reverse)
sort方法是將list按特定順序重新排列,預設為由小到大,參數reverse=True可改為倒序,由大到小。
reverse方法是將list逆置。
列表的嵌套1. 列表嵌套
類似while迴圈的嵌套,列表也是支援嵌套的
一個列表中的元素又是一個列表,那麼這就是列表的嵌套
schoolNames = [[‘北京大學‘,‘清華大學‘], [‘南開大學‘,‘天津大學‘,‘天津師範大學‘], [‘山東大學‘,‘中國海洋大學‘]]
2. 應用
一個學校,有3個辦公室,現在有8位老師等待工位的分配,請編寫程式,完成隨機的分配
#encoding=utf-8import random# 定義一個列表用來儲存3個辦公室offices = [[],[],[]]# 定義一個列表用來儲存8位老師的名字names = [‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘,‘H‘]i = 0for name in names: index = random.randint(0,2) offices[index].append(name)i = 1for tempNames in offices: print(‘辦公室%d的人數為:%d‘%(i,len(tempNames))) i+=1 for name in tempNames: print("%s"%name,end=‘‘) print("\n") print("-"*20)
運行結果如下:
python基礎2