Python開發【第二篇】: 基本數據類型(一)

1. 整型

  整型即整數,用 int 表示,在 Python3 中整型沒有長度限制。python

1.1 內置函數

  1. int(num, base=None)git

  int( ) 函數用於將字符串轉換爲整型,默認轉換爲十進制。算法

>>> int('123')
123
>>> int('123', base=16)
291

  2. bit_length( num)api

  當前數字的二進制,至少用多少位表示。dom

>>> a = 5
>>> a.bit_length()
3

2. 浮點型

  浮點型即小數,用 float 表示,也能夠用科學計算法表示。函數

>>> a = 0.005
>>> a           # 科學計數法
5e-3

  類型轉換:this

>>> float(2)
2.0
>>> float('2')
2.0

3. 布爾型

  布爾型是一種特殊的整型,用 True 和 False 或 0 和 1 表示,Python 中是 False 的有:編碼

  • None、""、0、[ ]、()、{ }

  類型轉換:spa

>>> bool(None)
False

4. 字符串

  字符串是 Python 裏的文本,用 str 表示,建立一個字符串使用單引號【' '】或雙引號【" "】,引發便可。code

字符串一旦建立,不可修改,同時它也是可迭代對象

  若是字符串中的內容既有單引號,又有雙引號,有兩種辦法解決:

  • 使用轉義符號【】對字符串中的引號轉義
>>> 'Let\'s go'
"Let's go"
  • 使用不一樣的引號表示
>>> "Let's go"
"Let's go"

4.1 長字符串

  當字符串內容行數比較多時,咱們能夠使用 三重引號引發內容。

>>> print("""
... 從明天起,作一個幸福的人
... 餵馬,劈柴,周遊世界
... """)

從明天起,作一個幸福的人
餵馬,劈柴,周遊世界

4.2 內置方法

  PART 1:

# capitalize():將字符串內容首字母轉換爲大寫
>>> s = 'i am rose'
>>> s.capitalize()
'I am rose'

# casefold():將字符串的全部字符轉換爲小寫,與 lower()同樣,可是能夠轉換特殊字符

# lower():將字符串裏的全部字符都轉換爲小寫
>>> s = 'i love You'
>>> s.lower()
'i love you'

# upper():將字符串裏的全部字符都轉換爲大寫
>>> s.upper()
'I LOVE YOU'

# count(sub,start,end):統計字符串中某個字符出現的次數,可指定範圍
>>> s = 'i am Rose, age 18'
>>> s.count('a')
2
>>> s.count('a', 3, 5)
0

# startswith(suffix,start,end)、endswith(suffix,start,end)
# 查找這個字符串,判斷是以什麼字符開頭或結尾,返回布爾值,可指定範圍
>>> s = 'i am Rose, age 18'
>>> s.startswith('I')
True
>>> s.endswith('I')
False

# find(sub,start,end):查找某個字符,返回其下標,如有多個只返回第一個的下標,若不存在則返回 -1
>>> s = 'I am rose'         # 空格也佔位
>>> s.find('a')
2

# index(sub,start,end):與 find()同樣,可是不存在則拋出 ValueError

# format(*args,**kwargs):格式化字符串,將字符串中的佔位符替換爲指定值,不限參數(能夠是位置、關鍵字參數)
>>>'I am {0}, age {1}'.format('rose', 18)   # 位置參數
>>>'I am {name}, age {age}'.format(name='rose', age=18)     # 關鍵字參數

>>> d = {'name': 'rose', 'age': 18}     # 傳入字典(加 **)
>>>'I am {name}, age {age}'.format(**d)

>>> l = ['rose', 18]        # 傳入列表(加 *)
>>> 'I am {:s}, age {:d}'.format(*l)
'I am rose, age 18'

# format_map():格式化字符串,接收字典
>>> 'I am {name}, age {age}'.format_map({'name': 'rose', 'age': 18})
'I am rose, age 18'

# isalnum():判斷當前字符串是否只包含字母或數字,返回布爾值
>>> s1 = 'sda12'
>>> s.isalnum()
True
>>> s2 = '12'
>>> s2.isalnum()
True
>>> s3 = 's_'
>>> s3.isalnum()
False

# isalpha():判斷當前字符串全部字符是否都是字母,包括漢字,返回布爾值
>>> s1 = 'sda12'
>>> s1.isalpha()
False
>>> s2 = '漢字'
>>> s2.isalpha()
True

# isdecimal():判斷當前字符串全部字符是否都是數字,返回布爾值
>>> s = '123'
>>> s.isdecimal()
True
>>> s1 = '123s'
>>> s1.isdecimal()
False

# isdigit():判斷當前字符串全部字符是否都是數字,可識別 ②,返回布爾值
>>> s2 = '②'
>>> s2.isdigit()
True
>>> s3 = '二'
>>> s3.isdigit()
False

# isnumeric():判斷當前字符串全部字符是否都是數字,可識別 ②,和二,返回布爾值
>>> s3.isnumeric()
True

# isprintable():判斷字符串是否存在不可顯示的字符,如 \t、\n,空格等返回布爾值
>>> s6 = ''
>>> s6.isprintable()
True
>>> s6 = ' '
>>> s6.isprintable()
True

# isspace():判斷字符串是否都是空格,返回布爾值
>>> s5.isspace()
True
>>> s6 = ''
>>> s6.isspace()
False

# istitle():判斷字符串中每一個單詞首字母是否都是大寫,便是否是標題
>>> s = 'i love you'
>>> s.istitle()
False

# title():將字符串標題化
>>> s.title()
'I Love You'

  PART 2:

# join(iterable):以字符串爲分隔符,插入到序列的每一個字符間,傳入的列表、元組等,其中的元素必須是字符串不能是數字
>>> '-'.join('內置方法')        # 以 - 分隔符
'內-置-方-法'
>>> ' '.join('內置方法')
'內 置 方 法'
>>> '-'.join(['abd', '123'])
'abd-123'

# ljust(width,fillchar=None):將字符串居左,右邊以字符填充,默認以空格填充,能夠指定寬度
# rjust(width,fillchar=None):將字符串居右,左邊以字符填充,默認以空格填充,能夠指定寬度
# center(width,fillchar=None):將字符串居中,兩邊以字符填充,默認以空格填充,能夠指定寬度
>>> s = 'love'
>>> s.ljust(10, '*')
'love******'
>>> s.rjust(10, '*')
'******love'
>>> s.center(10, '*')
'***love***'

# zfill(width):返回長度爲 width 的字符串,原字符串右對齊,前面以 0 填充
>>> s = 'abc'
>>> s.zfill(10)
'0000000abc'

# islower()、isupper():判斷字符串全部字符是否都是小寫或大寫,返回布爾值
>>> s = 'i love you'
>>> s.islower()
True
>>> s.isupper()
False

# lstrip(chars=None):去掉字符串左邊全部空格,包括 \t、\n
# rstrip(chras=None):去掉字符串右邊全部空格,包括 \t、\n
# strip(chras=None):去掉字符串兩邊全部空格,包括 \t、\n
>>> s = '   123  '
>>> s.lstrip()
'123  '
>>> s.rstrip()
'   123'
>>> s.strip()
'123'

# partition(sep):separator 分隔符,從左邊開始分割字符串,只能分紅三份,多個時只返回第一個
>>> s = 'testsadsabc'
>>> s.partition('s')
('te', 's', 'tsadsabc')

# rpartition(sep):從右邊開始分割字符串,只能分紅三份,多個時只返回第一個
>>> s.rpartition('s')
('testsad', 's', 'abc')

# split(sep=None,maxsplit=-1):不帶參數,默認以空格分割字符串,可指定最大分割次數,返回分割後子串列表
>>> s = 'testlosve'     # 不包含分割字符
>>> s.split('s')
['te', 'tlo', 've']

# rsplit(sep=None,maxsplit=-1):從右邊分割字符串,與 split()相似
>>> s.rsplit('s')
['te', 'tlo', 've']

# splitlines([keepends]):以 \n 分割,返回一個列表,TRUE、False 表示是否保留換行符
>>> s = 'testab\ncd\nh'
>>> s.splitlines()
['testab', 'cd', 'h']
>>> s.splitlines(True)
['testab\n', 'cd\n', 'h']
>>> s.splitlines(False)
['testab', 'cd', 'h']

# swapcase():翻轉大小寫
>>> s = 'abc'
>>> s.swapcase()
'ABC'

# maketrans():用於建立字符映射的轉換表,兩個參數,第一個爲要轉換的字符,第二個爲轉換的目標,二者長度一致
# translate(table):根據 table規則(由 str.maketrans('a', 'b')制定),轉換字符串字符。
>>> s = 'this is string'
>>> s.translate(s.maketrans('aeiou', '12345'))      # aeiou 與 12345 一一對應
'th3s 3s str3ng'

# replace(old,new[,count]):把字符串中的 old 字符替換成 new 字符,count 爲替換次數,可選
>>> s = 'hello'
>>> s.replace('e', 'h')
'hhllo'
>>> s       # 不改變原始字符串
'hello'

# expandtabs([tabsize=8]):將字符串中的 \t 轉換爲空格,可指定長度,默認 tabsize = 8
>>> s = 'username\teamil\tpassword\nlixiang\tlixiang@qq.com\t123456'
>>> s.expandtabs(20)
username            eamil               password
lixiang             lixiang@qq.com      123456

# bit_length():返回一個 int 用二進制表示須要多少位,不包含前導數和符號
>>> n = 37
>>> n.bit_length()
6

# bin(number):返回一個 int 的二進制表示
>>> bin(37)
'0b100101'          # 37 用二進制表示,恰好 6 位

# encode(encoding='utf-8', errors='strict):以 encoding 方式編碼字符串,errors 指定不一樣的錯誤處理方案,返回編碼後的字符串,是一個 bytes 對象
# bytes.decode(encoding='utf-8', errors='strict):以指定的編碼格式解碼 bytes 對象,默認 utf-8
>>> s = '編碼解碼'
>>> s1 = s.encode('utf-8')
>>> s2 = s.encode('gbk')
>>> s1
b'\xe7\xbc\x96\xe7\xa0\x81\xe8\xa7\xa3\xe7\xa0\x81'
>>> s2
b'\xb1\xe0\xc2\xeb\xbd\xe2\xc2\xeb'

>>> s1.decode('utf-8', 'strict')        # 解碼,以什麼方式編碼就以什麼方式解碼
'編碼解碼'
>>> s2.decode('gbk', 'strict')
'編碼解碼'

4.3 索引

  獲取字符串中某個字符,只需傳入索引便可,索引從 0 開始,支持負數索引(最後一個爲 -1)

>>> s = 'hello'
>>> s[0]
'h'
>>> s[-1]
'o'

  字符串是可迭代對象,所以也支持切片:

>>> s = 'hello'
>>> s[0:2]
'he'
>>> s[-2:-1]
'l'

  一樣地 也支持 for 循環遍歷其中每個元素:

>>> for i in s:
...     print(i)
...
h
e
l
l
o

4.4 內置函數

  len()能夠獲取字符串長度

>>> len('hi')
2

4.5 字符串拼接

  爲了保證內存的連續性,字符串一旦建立,不容許被修改;一旦修改,將會產生新的字符串,使用鏈接符 + 能夠將兩個字符串拼接成一個新的字符串。

>>> myteacher = '李'
>>> yourteacher = '老師'
>>> ourteacher = myteacher + yourteacher
>>> ourteacher
'李老師'

  Python 中不一樣數據類型是不能拼接的,可是能夠使用別的方法實現:

>>> print('score' + ':' + str(95))  # 使用 + 鏈接符須要考慮是不是相同數據類型
score:95
>>> print('score:',95)         # 能夠不用考慮數據類型
score: 95

4.6 原始字符串

  全部的字符串都是按照字面的意思來使用,沒有轉義特殊和不能打印的字符。

  當字符串中有反斜槓  時,每每會被當成轉義字符處理,而有些時候咱們並不須要將反斜槓保存下來,有兩種方法,一是再加一個反斜槓將其保存下來,可是當反斜槓不少時候,就顯得很亂:

>>> s = 'c:\\now'
>>> s
'c:\\now'
>>> print(s)
c:\now

  另外一個方法就是使用原始字符串 raw,只須要在字符串前面加個 r 便可,它會自動在程序內部添加反斜槓,無需手動添加:

>>> s = r'c:\now'
>>> s               # 自動添加 \
'c:\\now'
>>> print(s)
c:\now

4.7 格式化字符串

  格式化字符串,即將字符串中的佔位符替換爲指定值。

  1. format()

  format()方法接收位置參數和關鍵字參數,分別使用位置、關鍵字佔位:

  語法:

format(*args,**kwargs)

  位置參數:

>>>'I am {0}, age {1}'.format('rose', 18)   # 位置參數
I am rose, age 18

  關鍵字參數:

>>>'I am {name}, age {age}'.format(name='rose', age=18)     # 關鍵字參數
I am rose, age 18

  也能夠接收列表和字典做爲參數傳入,只需在列表前面添加 *,字典前面添加 ** 便可:

>>> d = {'name': 'rose', 'age': 18}     # 傳入字典(加 **)
>>>'I am {name}, age {age}'.format(**d)

>>> l = ['rose', 18]        # 傳入列表(加 *)
>>> 'I am {:s}, age {:d}'.format(*l)
'I am rose, age 18'

  2. 格式化操做符 %

  Python 提供了一系列的格式化操做符,用於格式化字符串。

Python 常見格式化操做符及含義
符號 含義
%s 格式化字符串
%d 格式化整數
%c 格式化字符及 ASCII 碼
%o 格式化無符號八進制數
%x 格式化無符號十六進制數
%X 格式化無符號十六進制(大寫)
%f 格式化浮點數,可指定小數點後的精度
%e 用科學計數法格式化浮點數
%E 做用同 %e,用科學計數法格式化浮點數
%g 根據值的大小決定使用 %f 或 %e
%G z做用同 %g,根據值的大小決定使用 %f 或 %E

  示例:

>>> msg = 'I am %s, age %d' % ('rose', 18)                        
>>> msg                                                           
'I am rose, age 18'                                               

# 保留兩位有效小數(在 f 前面添加 .2)
>>> s = 'percent: %.2f' % 97.687                                  
>>> s                                                             
'percent: 97.69'

# 保留百分號(在 f 後面添加兩個 %)
>>> s1 = 'percent: %.2f%%' % 97.687                               
>>> s1                                                            
'percent: 97.69%' 

>>> s2 = 'I am %(name)s, age %(age)d' % {'name':'rose', 'age':18} 
>>> s2                                                            
'I am rose, age 18' 

>>> s3 = 'I am %(pp).2f' % {'pp':123.4567}                        
>>> s3                                                            
'I am 123.46'

5. 練習題

  1. Python 2 和 Python 3 中 range()區別?

  • Python 2:直接所有生成全部數字,xrange 與 Python 3 同樣
  • Python3:循環一次生成一個,節省內存

  2. 實現一個加法計算器(如 5 + 9)?

value = '5 + 9'
v1, v2 = value.split('+')
print(int(v1) + int(v2))

  3. int 和 二、str 和 ‘xx' 的關係?

  類和對象的關係

  4. 計算用戶輸入的內容有幾個數字,幾個字母?

n = input('請輸入內容:')     # input()接收的內容爲 字符串
a = 0, b = 0            # 統計數字、字母
for i in n:             # 對內容遍歷循環
    if i.isdecimal():   # 判斷是不是數字
        a += 1
    else:
        b +=1
print(a, b)

  5. 製做隨機驗證碼,不區分大小寫

  流程以下:

  • 用戶執行程序
  • 給用戶顯示要輸入的驗證碼
  • 用戶輸入驗證碼
  • 判斷用戶輸入的驗證碼是否和隨機生成的相同,相同則打印輸入正確,不然從新輸入
# 每次生成一個字符,循環四次,生成四個字符,即一個驗證碼
import random

verify_coe = ''
for i in range(4):
    current = random.randrange(0, 4)    #
    if current != i:
    # chr()能夠將數字轉換爲 ASCII 碼錶中所對應的字符,65~90 對應 A~Z,98~122 對應 a~z
    # 生成一個 65~90 的隨機整數,並將其轉換爲大寫字母
        temp = chr(random.randint(65, 90))
    else:
        temp = random.randint(0, 9)     # 生成一個 0~9 的隨機整數
    verify_code += str(temp)
    
while True:
    n = input('請輸入驗證碼:')
    if n.upper == verify_code:
        print('輸入正確')
        break
    else:
        print('輸入錯誤,請從新輸入')

  使用函數寫:

import random

def check_code():
    """
    生成隨機驗證碼
    :return: 驗證碼
    """
    verify_code = ''
    for i in range(4):
        current = random.randrange(0, 4)    #
        if current != i:
            # chr()能夠將數字轉換爲 ASCII 碼錶中所對應的字符,65~90 對應 A~Z,98~122 對應 a~z
            # 生成一個 65~90 的隨機整數,並將其轉換爲大寫字母
            temp = chr(random.randint(65, 90))
        else:
            temp = random.randint(0, 9)     # 生成一個 0~9 的隨機整數
        verify_code += str(temp)
    return verify_code


def verify(code):
    """
    驗證用戶輸入的驗證碼是否與隨機生成的一致
    :param code:
    :return:
    """
    while True:
        n = input('請輸入驗證碼:')
        if n.upper() == code:       # 不區分大小寫
            print('輸入正確')
            break
        else:
            print('輸入錯誤,請從新輸入!')


def main():
    code = check_code()
    print(code)
    verify(code)
main()

  6. 製做表格

  循環提示用戶輸入:用戶名、密碼和郵箱(不超過 20 個字符,超過只取前 20 個字符,)若輸入 q 或 Q 則退出,將內容以表格形式顯示:

s = ''
while True:
    user = input('請輸入用戶名:')
    if user == 'q' or user == 'Q':
        break
    psd = input('請輸入密碼:')
    email = input('請輸入郵箱:')
    user_one = user[0:20]
    psd_one = psd[0:20]
    email_one = email[0:20]
    
    temp1 = 'username\tpassword\temial\n'
    temp2 = '{0}\t{1}\t{2}\n'
    a = temp2.format(user_one, psd_one, email_one)
    s += a
    print(temp1.expandtabs(20), s.expandtabs(20))
請輸入用戶名:rose
請輸入密碼:123456
請輸入郵箱:123456@qq.com
username            password            emial
 rose                123456              123456@qq.com
相關文章
相關標籤/搜索