【Python全棧筆記】01 [模塊二] 14-15 Oct 運算符和字符串 4-1

編碼的問題python

 

中文版 Windows 終端是默認GBK編碼格式,python2默認爲ASCII編碼,雖然咱們註釋了須要用UTF-8,可是經過命令行運行的文件若是print中文內容仍是會出現亂碼。ubuntu

Unicode, UFT-8, GBK 分別是三種不一樣的編碼,Unicode在轉爲UTF-8或GBK時須要通過編碼的過程,而UTF-8或GBK變爲Unicode則須要通過解碼。所以UTF-8和GBK的轉化就須要通過一個解碼和編碼的過程。因此即便咱們在py文檔裏註明了使用utf-8編碼,在默認使用gbk的終端裏,出現的中文是會亂碼的。windows

所以,在中文windows終端運行python2文件,咱們須要對內容先解碼再編碼,以下: 這樣之後咱們在終端看到的就能夠是正確的中文字了 (使用decode()和encode()先將內容從utf-8解碼,而後再編碼爲gbk顯示)api

在python3裏,python編碼作了優化,自身轉化utf-8, unicode, gbk, 移除了python的utf-8類型python2.7

 

**Q: python3裏的文本均可以正常顯示在終端裏,在使用python2.7的Ubuntu裏,直接print的中文正常顯示,而decode再encode的中文字符反而亂碼了。TBD ide

naomi@ubuntu:~/Desktop$ cat test
#!/usr/bin/python
# -*- coding:utf-8 -*- 

val = '中文咯'
val_unicode = val.decode('utf-8')
val_gbk = val_unicode.encode('gbk')
print(val_gbk)

print('這也是中文')

 

運算符測試

'//' 取整 優化

使用PyCharm IDE來建立Python項目文件,設置默認模板(Files - Settings - Editor - File and Code Template 在python文件裏添加 #!/usr/bin/python 設置便可)this

python2裏的'/'除法不顯示小數的問題,能夠經過from __future__ import division 來獲得小數結果 編碼

PyCharm裏p2和p3的切換:files - settings - 目標project - interpreter 選擇p3便可 

 

成員運算符

in 

not in 

str1 = 'big brother is watching you'
text1 = 'big' in str1
text2 = ' ' in str1
text3 = 'isw' in str1
text4 = 'ther' in str1

print(text1) # True
print(text2) # True
print(text3) # False
print(text4) # True

list1 = ['big', 'brother', '1', 'watching', ' you']

text5 = 'big' in list1
text6 = ' ' in list1
text7 = 'ther' not in list1

print(text5) # True
print(text6) # False
print(text7) # True
View Code

身份運算 [TBD]

 

基本數據類型 [每一個數據類型的功能能夠經過在pycharm裏按ctrl點擊要further的內容找到reference] 

 

數字    int 

字符串 str

布爾值 bool

列表    list 

元組    tuple 

字典    dict  

查看對象的類,或對象所具有的功能 

.type() 能夠獲取每一個變量的數據類型

.dir() 能夠獲取某個變量所具有的全部功能

.help('類') 查看某個類的具體方法及其用法 

a = 'andy'

print(type(a))  # 獲得結果 <class 'str'>
print(dir(a))  # 獲得字符串 a 所具備的全部方法

b = help(a)  # 顯示'andy' 字符串並無python文檔 

c = help(type(a))  # 顯示 字符串 類 的全部信息(包括方法的解釋說明)

基本數據類型的經常使用功能 

1. 整數int型 

number1 = 1
number2 = 2

print(number1 + number2)  # 效果和下面一行同樣。本質是調用了number1的__add__()方法先進行了轉換
print(number1.__add__(number2))

# bit_length()表示某個整數的二進制至少佔幾位
# 以下面計算數字的二進制佔位

number3 = 4  # 00000100
number4 = 1024  # 10000000000
print(number3.bit_length())  # 結果3, 至少佔3位 
print(number4.bit_length())  # 結果11, 至少佔11位

2. 字符串str型 

s1 = 'andy'


# 字符串改成首字母大寫
print(s1.capitalize())
# Andy


# 將字符串按照指定長度居中,空白按需補足
print(s1.center(20,'*'))
# center()方法第一個參數是設置總字符串長度,第二個參數用於填充空白
# ********andy********


# 數出子字符串在字符串中出現的次數
s2 = 'andy dufresne stands for hope'
print(s2.count('a'))
print(s2.count('e'))
# 計算'a'在s2字符串裏出現的次數 結果爲 2
# 計算'e'在s2字符串裏出現的次數 結果爲 3
print(s2.count('d', 0, 4))
# 數出'd'在s2字符串從第1到第4位置出現的次數,結果爲 1


# 判斷字符串是否以某子字符串結尾
print(s2.endswith('e'))
print(s2.endswith('hope'))
print(s2.endswith('a'))
# 判斷是否以特定字符串結尾 結果分別爲True, True, False
print(s2.endswith('dy',0,4))
# 還能夠指定字符串的起始和終止位置,如上例,判斷s2字符串第一到第四位字符串是否以'dy'結尾,結果返回True


# 將tab轉爲8個空格
s3 = 'hello\tworld'
print(s3.expandtabs())
print(s3.expandtabs(20))
# expandtabs() 方法將字符串裏的tab自動轉爲空格,默認轉8個空格,在參數裏能夠指定空格數量
# 因爲編譯器可能會自動將鍵盤輸入的tab鍵轉爲空格,咱們能夠經過'\t'來肯定輸入的tab


# 在字符串裏找到子序列並返回位置
print(s3.find('he'))
print(s3.find('l'))
print(s3.find('n'))
# find()方法在s3字符串裏順序查找'he', 'l', 'n',一旦找到就返回起始位置,且僅返回第一個找到的字符串的位置。
# 若是說s3裏沒有想要查找的字符串,結果返回-1
# 上例結果分別爲0, 2, -1


# format()字符串格式化,動態參數
s4 = 'hello {0} from {1}'
s5 = s4.format('bender', 'futurama')
print(s5)
# s4裏的{0}, {1}至關因而一個placeholder,利用format能夠按序輸入參數
# 如上例結果就是 hello bender from futurama

# index() 找到子序列的位置,若是沒有找到,報錯
# 相似 find()功能
str1

查看源碼來看一個方法是否須要傳入參數,傳入幾個參數。若是源碼裏只有(self),則不須要傳參數
功能裏參數輸入的地方(self, arg0, arg1 = None, arg2 = None)以左爲例,最多傳3個參數,第一個參數arg0必傳, 第二個和第三個參數默認爲None,能夠不傳也能夠傳

s6 = 'andY56'
print(s6.isalnum())  # 判斷字符串是否全是字母和數字
print(s6.isnumeric())  # 判斷是否去哪是數字 False
print(s6.isalpha())  # 判斷是否全是字母 False


# isspace() 肯定是否全部都是空格
space1 = '    \t  \n '
print(space1.isspace())  # 判斷是否全部都是空格 True


# istitle() 肯定一個字符串是否爲標題
title1 = 'The School'
title2 = 'Old McDonald Has a Farm'
print(title1.istitle())  # 判斷是不是標題,全部單詞首字母大寫,且其餘字母小寫
print(title2.istitle())  # McDonald人名出現兩個大寫判斷爲False, 冠詞a首字母沒有大寫判斷False,因此其實這個方法並不能真實判斷一個字符串是否爲標題


# join方法將可迭代的參數經過指定的字符鏈接起來
# 以下,將一個list經過' '空格或者 '***'鏈接起來 一樣適用於元組
list1 = ['kenny', 'is', 'mysterion']
joint1 = ' '
joint2 = '***'
print(joint1.join(list1))  # kenny is mysterion
print(joint2.join(list1))  # 獲得結果kenny***is***mysterion

# ljust() 內容左對齊,能夠指定長度,右邊按需填充
str1 = '  well this is embarrassing'
print(str1.ljust(30), '---')
# 獲得結果   well this is embarrassing           ---
# 指定長度若是超過字符串長度,超過的部分爲空格,而後在後面再添加'---',若是指定寬度小於字符串,則將字符串輸出完畢後再加上添加的'---'
# 若是改成rjust, 則變爲右對齊


# strip(), lstrip(), rstrip() 分別去除字符串兩邊的空格,左邊的,右邊的
str2 = '  obviously this is a test   '
print(str2.strip())  # 結果爲'obviously this is a test'
print(str2.lstrip())  # 結果爲'obviously this is a test '
print(str2.rstrip())  # 結果爲'  obviously this is a test'


# partition() 將字符串分割爲前,中,後三個部分
str3 = 'knock knock knock '
print(str3.partition('ock'))
# 結果爲 ('kn', 'ock', ' knock knock ')

# replace() 輸入須要替換的內容,替換後的內容,替換的次數(不輸入默認所有替換)
print(str3.replace('kn', 'kk'))  # 結果 kkock kkock kkock
print(str3.replace('kn', 'kk', 2))  # 結果 kkock kkock knock
# 輸入數字超過3 以及負數,發現結果是所有都替換了
# 輸入數字0,則沒有替換

# split() rsplit() 將字符串按照要求分割
str4 = ' split this sentence '
print(str4.split())  # 不指定的時候,按照空格分隔 ['split', 'this', 'sentence']
print(str4.rsplit('i'))  # 出現'i' 就分割一次
print(str4.rsplit('e',2))  # 從右邊開始看到'e'分割,一共分割兩次

# 在stackoverflow 裏看到有人問split()和rsplit()的效率問題,經過timeit()測試得知這兩個方法的速度差很少(split()略快一點點能夠忽略不記),不過rsplit()還須要多打一個'r',因此看來若是知足一樣的需求採用split()便可


# splitlines() 根據換行符分割
str5 = '''remember
remember
the fifth of November\n hmm    \n not funny actually \nbummer'''
print(str5.splitlines())
# 獲得結果 ['remember', 'remember', 'the fifth of November', ' hmm    ', ' not funny actually ', 'bummer']


# swapcase() 改變大小寫
str6 = 'Ah.... The FrAy aNd ColdPlay'
print(str6.swapcase())  # 獲得結果 aH.... tHE fRaY AnD cOLDpLAY

# title() 自動變成title 格式
print(str6.title())  # 結果 Ah.... The Fray And Coldplay

字符串索引 

string[0], string[-3]

字符串切片

string[2:], string[2:12], string[-3:]

for 循環 

for item in string: 

  print(item)

依次輸出string裏的內容

for循環液能夠搭配break, continue 來使用 

# string的索引,切片
str7 = 'string_example'
print(str7[-3:])
print(str7[3:])
print(str7[:])

str8 = 'python'
for i in str8:
    print(i)
'''
獲得結果:
p
y
t
h
o
n
'''
相關文章
相關標籤/搜索