python 基礎(chǔ) 02

函數(shù)

我們可以把程序中相對(duì)獨(dú)立的功能模塊抽取出來(lái)這樣做的好處一是減少重復(fù)代碼的編寫
二是將來(lái)可以重復(fù)的使用這些功能模塊python中的函數(shù)就是代表了這樣的功能模塊
y = f(x) f 是函數(shù)名 x 是自變量 y 是因變量

注意

  1. 如果定義的函數(shù)名重復(fù)了筋蓖,則后面定義的函數(shù)將更新前面定義的函數(shù)

  2. A and B 如果A False背亥,B被短路绝页,B不被執(zhí)行
    A or B 如果A True土浸,B被短路浓恳,B不被執(zhí)行
    所以A 和 B 位置的不同可能會(huì)對(duì)執(zhí)行效率產(chǎn)生明顯影響

  3. 一個(gè)文件就是一個(gè)模塊,千萬(wàn)不要在一個(gè)模塊中有定義很多功能的函數(shù)绎速,盡量保證模塊功能的單一性

  4. 作用域 - LEGB 盡量減少全局變量的使用

  5. 在定義的函數(shù)中不能用print(),用了就表面你的函數(shù)只能在命令提示行里面執(zhí)行亩钟,不能在窗口中執(zhí)行(在做項(xiàng)目時(shí)堅(jiān)決執(zhí)行)

  1. print('%02d ' % val, end='')  # 把val格式化成兩位輸出
    
  2. from combination import *       # 導(dǎo)入combination中所有模塊
    from combination as com         # 將combination 重命名為com
    from math import gcd            # 系統(tǒng)將用下面combination中后導(dǎo)入的gcd函數(shù)
    from combination import is_prime, gcd, lcm, add,is_palindrome
    # 調(diào)用函數(shù)時(shí)若出現(xiàn)重復(fù)绢涡,則自動(dòng)取后調(diào)入的函數(shù)
    # 如果想兩個(gè)函數(shù)同時(shí)存在牲剃,則不用from導(dǎo)入
    # 直接import combination  和  import math
    # 然后用combination.gcd   和   math.gcd
    

可變參數(shù)的函數(shù)

def f(*args):
    total = 0
    for val in args:
        total += val
    return total


# 定義了一個(gè)可變參數(shù)的函數(shù),如果想傳入一個(gè)列表的每個(gè)元素雄可,則在列表名前加上*
mylist = [1, 3, 5, 10, 20]
print(f(*mylist))

作用域

  • python 搜索一個(gè)變量的方式是從局部作用域到嵌套作用域再到全局作用域

  • local - Enclosed - Global

  • LEGB

  • 如果想改變搜索范圍 可以使用global和 nonloal關(guān)鍵字

  • 在實(shí)際編程中一定不要隨便使用全局變量

# 在函數(shù)外面定義的 a 是一個(gè)全局變量
# global variable
a = 100


def foo():
    # local variable
    # 函數(shù)內(nèi)的局部變量 離開(kāi)foo函數(shù) a 是無(wú)法訪問(wèn)的
    a = 200
    print(a)


foo()
print(a)
# 在函數(shù)外面定義的 a 是一個(gè)全局變量
# global variable
a = 100
b = 'good'


def foo():
    b = 'hello'

    def bar():
        b = 'shit'
        print(a)
        print(b)

    bar()


foo()
print(a)
# 在函數(shù)外面定義的 a 是一個(gè)全局變量
# global variable
a = 100


def foo():
    global a
    a = 200
    b = 'hello'
    
    def bar():
        global b
        b = 'good'
        print(a)
        print(b)
    
    bar()
    print(b)


foo()
print(a)
# 在函數(shù)外面定義的 a 是一個(gè)全局變量
# global variable
a = 100


def foo():
    global a
    a = 200
    b = 'hello'

    def bar():
        nonlocal b
        b = 'good'
        print(a)
        print(b)

    bar()
    print(b)


foo()
print(a)

各種函數(shù)實(shí)例

求階乘

# 定義求階乘的函數(shù)   將求階乘的功能抽取出來(lái)放到函數(shù)中
def f(x):
    y = 1
    for z in range(1, x + 1):
        y *= z
    return y


if __name__ == '__main__':
    m = int(input('m = '))
    n = int(input('n = '))
    # 當(dāng)需要計(jì)算階乘的時(shí)候不用再寫循環(huán)而是直接調(diào)用已經(jīng)定義好的函數(shù)
    # 求C(m,n)
    print(f(m) // f(n) // f(m - n))

求階乘2

# 階乘
def foo(n):
    if n==0:
        sun = 1
    else:
        sun = n * foo(n-1)
    return sun

求最大公約數(shù)和最小公倍數(shù)

# 如果定義的函數(shù)名重復(fù)了凿傅,則后面定義的函數(shù)將更新前面定義的函數(shù)
from math import sqrt

# 谷歌的文檔注釋方法
def gcd(x, y):
    """
    計(jì)算最大公約數(shù)

    parameters:

        x  一個(gè)非負(fù)整數(shù)

        y  一個(gè)非負(fù)整數(shù)

    Returns:

        x, y 的最大公約數(shù)

    """
    (x, y) =(y, x) if x > y else (x, y)
    for factor in range(x, 0, -1):
        if x % factor == 0 and y % factor == 0:
            return factor


# 文檔注釋
def lcm(x, y):
    """
    計(jì)算最小公倍數(shù)

    :param x:非負(fù)整數(shù)

    :param y:非負(fù)整數(shù)

    :return:最小公倍數(shù)
    """
    return x * y //gcd(x, y)

短除法求最大公約數(shù)

# 最大公約數(shù)(短除法)
def bar1(x,y):
    if x > y:
        return bar1(y, x)
    elif y % x == 0:
        return x
    else:
        return bar1(y % x, x)

計(jì)算臺(tái)階走法

# 有10步臺(tái)階,一個(gè)小孩每次可以選擇一次走1步数苫、2步聪舒、3步,問(wèn)走完這個(gè)臺(tái)階有幾種方法
def bar2(n):
    if n < 0:
        return 0
    elif n == 0:
        return 1
    else:
        return bar2(n - 1) + bar2(n - 2) + bar2(n - 3)

判斷素?cái)?shù)

# 官方的文檔注釋方法
def is_prime(num):
    """
    判斷素?cái)?shù)

    :param num: 非負(fù)整數(shù)

    :return: 是素?cái)?shù)就返回True 否則 返回False
    """
    for j in range(2, int(sqrt(num)) + 1):
        if num % j == 0:
            return False
    return True if num != 1 else False

判斷一個(gè)數(shù)是不是回文數(shù)

def is_palindrome(num):
    """
    判斷一個(gè)數(shù)是不是回文數(shù)

    :param num: 一個(gè)非負(fù)整數(shù)

    :return:是回文數(shù)返回True否則返回False
    """
    temp = num
    total = 0
    while temp > 0:
        total = total * 10 + temp % 10
        temp //= 10
    return num == total

拿21根火柴

21跟火柴虐急,人先拿箱残,拿計(jì)算機(jī)后,最少1根止吁,最多4根被辑,誰(shuí)拿到最后一根就算輸保證計(jì)算機(jī)獲勝

from random import randint


def is_macth():
    """
    判斷誰(shuí)拿最后一根火柴
    :return: 返回結(jié)果
    """
    total = 21
    while total > 0:
        print('總共還有%d根火柴' % total)
        while True:
            peopel = eval(input('請(qǐng)輸入你拿的根數(shù)'))
            if 0 < peopel <= 4 and peopel <= total:
                break
        total -= 5
        if total > 0:
            print('電腦拿走了%d根火柴' % (5 - peopel))
    print('你拿走了最后一根,你輸了')

判斷回文字符串

def is_pa(my_str):
    """
    判斷回文字符串
    
    :param my_str: 輸入的字符串
    
    :return: 是回文字符串返回True敬惦,不是返回Fals
    """
    temp = ''
    my_str1 = my_str
    for _ in range(len(my_str)):
        temp += my_str1[-1]
        my_str1 = my_str1[:-1]
    if temp == my_str:
        return True
    else:
        return False

字符串

字節(jié).PNG

字符串常用功能

字符串的所有功能都不直接更改原字符串盼理,而是產(chǎn)生了一個(gè)新的字符串賦值給你

help(''.find)
# 不變字符串  相當(dāng)于str1一直不變,變的是新字符串
str1 = 'hello, world!'
print(len(str1))                # 返回長(zhǎng)度
print(str1.capitalize())        # 首字母大寫
print(str1.upper())             # 全大寫
print(str1)
print(str1.find('or'))          # 查找并返回下標(biāo)
print(str1.find('shit'))        #查不到返回-1
print(str1.startswith('He'))    # 看是不是He開(kāi)頭
print(str1.startswith('he'))    # 看是不是he開(kāi)頭
print(str1.endswith('!'))       # 看結(jié)尾是不是!
print(str1.center(50, '*'))     # 居中 并用*填滿50個(gè)字符
print(str1.rjust(50, '#'))      # 居左 并用#填滿50個(gè)字符
# print(str1.index('or'))       # 查找并返回下標(biāo)
# print(str1.index('shit'))     #查不到直接報(bào)錯(cuò)
str2 = 'abc123456'
print(str2[2])          # 取出c
print(str2[2:5])        # 取出 c12  第五個(gè)取不到
print(str2[-3:-1])      # 取出 45
print(str2[-1:-3:-1])   # 取出 45
print(str2[:])          # 全取
print(str2[:2])         # 取出ab
print(str2[5:])         # 取出3456
print(str2[::2])        # 隔一個(gè)取一個(gè)
print(str2[::-1])       # 字符串的倒轉(zhuǎn)
print(str2.isdigit())   # 判斷是不是全數(shù)字
print(str2.isalpha())   # 判斷是不是全字母
print(str2.isalnum())   # 判斷只有數(shù)字和字母
str3 = '  644148993@qq.com  '
print(str3.rstrip())    # 自動(dòng)取消右邊空格
print(str3.strip())     #自動(dòng)取消左右兩邊空格

字符串的實(shí)例

制作文字跑馬燈效果

# 文字跑馬燈效果
def light():
    contain = input('請(qǐng)輸入跑馬燈文字:')
    while True:
        os.system('cls')
        print(contain)
        time.sleep(0.5)
        contain = contain[1:] + contain[0]

取文件名的后綴名

# 考慮到文件名有 .abc vbg. fig.gei.exe hosts 等情況   還考慮到要不要點(diǎn):默認(rèn)不要has_dot=False
def get_suffix(filename, has_dot=False):
    """
    獲取文件名的后綴名

    :param filename: 文件名

    :param has_dot: 是否要點(diǎn)(.)

    :return: 后綴名
    """
    pos = filename.rfind('.')
    if 0 < pos < len(filename)-1:
        index = pos if has_dot else pos + 1
        return filename[index:]
    else:
        return ''

生成制定長(zhǎng)度的隨機(jī)驗(yàn)證碼

def generate_code(code_len=4):
    '''
    生成由大小字母數(shù)字長(zhǎng)度確定的隨機(jī)驗(yàn)證碼

    :param code_len: 驗(yàn)證碼長(zhǎng)度

    :return: 由大小字母數(shù)字組成的驗(yàn)證碼
    '''
    all_char = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    last_pos = len(all_char) - 1
    code = ''
    for _ in range(code_len):
        index = randint(0, last_pos)
        code += all_char[index]
    return code

統(tǒng)計(jì)擲x個(gè)色子y次后各個(gè)點(diǎn)數(shù)出現(xiàn)的次數(shù)

# 擲n個(gè)色子一次后擲出來(lái)的點(diǎn)數(shù)
def bar(n):
    """
    計(jì)算n個(gè)色子搖一次的點(diǎn)數(shù)和

    :param n:色子個(gè)數(shù)

    :return:n個(gè)色子搖一次的點(diǎn)數(shù)和
    """
    return 0 if n <= 0 else randint(1, 6) + bar(n - 1)


# 有了列表(容器)我們可以使用1個(gè)變量來(lái)保存多個(gè)數(shù)據(jù)
# 更為重要的是我們可以使用循環(huán)對(duì)列表中保存的數(shù)據(jù)進(jìn)行操作
def dot(x, y):
    """
    計(jì)算x個(gè)色子擲y次后每個(gè)點(diǎn)數(shù)出現(xiàn)的次數(shù)

    :param x: 色子個(gè)數(shù)

    :param y: 擲色子次數(shù)

    :return: 利用列表返回每個(gè)點(diǎn)數(shù)出現(xiàn)的次數(shù)
    """
    f = [0] * (6 * x - (x - 1))
    for _ in range(y):
        face = bar(x)
        f[face - x] += 1
    return f

列表

列表的加法

mylist = [x ** 2 for x in range(1, 10)]
mylist = mylist + [20, 30]    # 列表的加法是添加元素
print(mylist)

列表的各種常用方法

# 列表
f = [10, 20, 30, 20, 40, 20, 50]
f1 = ['odlh', 'akdgah', 'idhgjfhgahjghaj', 'ddhgjhhgghh']
# CRUD   Create Read Update Delete
'''
f.append()               # 追加  加到最后
f.insert()               # 插入  需要選擇加入的位置(用一定的容錯(cuò)性)
f.clear()                # 清空
f.remove()               # 移除一個(gè)數(shù)有勾,如果有多個(gè)相同元素,則刪除開(kāi)頭那個(gè)
del f[6]                 # 刪除50
print(f.index(40, 2, 5)) # 在2-5里面查找40,并返回索引
f.pop(1)                 # 刪除索引為1的元素捕仔,默認(rèn)為刪除末尾元素
f.reverse()              # 翻轉(zhuǎn)f
enumerate(f)             # 枚舉   并返回索引
f2 = sorted(f1, key=len, reverse=True)   # 對(duì)f1按照字符串長(zhǎng)度排序,并且為倒序
'''

列表的生成方式

import sys

# 在計(jì)算機(jī)系統(tǒng)里面:
# 時(shí)間和空間是不可調(diào)和的矛盾
# 軟件和硬件在邏輯上是等效的
def main():
    f = list(range(10))  # 用list 構(gòu)造器構(gòu)造一個(gè)列表 (最不常用)
    print(f)
    g = [x ** x for x in range(1, 10)]
    # 用列表的生成表達(dá)式語(yǔ)法創(chuàng)建列表容器  (生成式)
    # 用這種語(yǔ)法創(chuàng)建列表之后元素已經(jīng)準(zhǔn)備就緒呆细,所以需要較多的內(nèi)尺空間
    print(g)
    h = [x ** 2 for x in range(1, 100)]
    print(h)
    print(sys.getsizeof(h))
    k = (x ** 2 for x in range(1, 100))
    # (生成器)--->除了把[]改成()棒坏,還可以把定義函數(shù)的  return  改成  yield
    # 列表生成器  這里得到的不是一個(gè)列表 而是一個(gè)生成器對(duì)象  (生成器)
    # 通過(guò)生成器可以獲取到數(shù)據(jù) 它不占用額外的空間存儲(chǔ)數(shù)據(jù)
    # 每次需要數(shù)據(jù)的時(shí)候就通過(guò)生成器取數(shù)據(jù) 當(dāng)然這需要花費(fèi)時(shí)間
    print(k)
    print(sys.getsizeof(k))   #(計(jì)算k占用的內(nèi)尺)
    for val in k:
        print(val, end='\t')
    print()
    d = [x + y for x in 'ABCD' for y in '1234']
    print(d)

列表相關(guān)實(shí)例

Fibonacci序列

# fibonacci 序列
# [1, 1, 2, 3, 5, 8, 13, ... ]
a = []
for i in range(20):
    if i >=2:
        a.append(a[i-1] + a[i-2])
    else:
        a.append(1)
print(a)
print(a[18]/a[19])  # 黃金分割
print(a[::-1])      # 切片
print(a)            # a 被操作后沒(méi)有改變
a.reverse()         # 翻轉(zhuǎn)a
print(a)            # a.reverse() 直接把a(bǔ)改變了


# 生成器方法
def fib(n):
    a, b = 0, 1
    for _ in range(n):
        a, b = b, a + b
        yield a

    
for val in fib(20):
    print(val)
    

方法和函數(shù)

def main():
    f = ['orange', 'apple', 'banna', 'cake']
    # python 內(nèi)置的排序方法默認(rèn)都是升序(從小到大)
    # 如果希望排序成降序(從大到小)可以通過(guò)reverse參數(shù)來(lái)控制
    # python 中的函數(shù)幾乎都是沒(méi)有副作用的函數(shù)
    # 調(diào)用函數(shù)后不會(huì)影響傳入的參數(shù)
    f2  = sorted(f, reverse=True)  # 函數(shù)
    print(f)
    print(f2)
    f.sort(reverse=True)   # 方法
    print(f)
    f.reverse()            # 方法
    print(f)
    f3 = list(reversed(f))    # 函數(shù)  reversed(f)返回的是一個(gè)反轉(zhuǎn)迭代器潜叛,需要加lise才能看到反轉(zhuǎn)的列表
    print(f3)

計(jì)算最大值最小值和平均數(shù)

def my_math():
    """
    計(jì)算一個(gè)列表的最大值最小值和平均數(shù)

    :return: 計(jì)算一個(gè)列表的最大值最小值和平均數(shù)
    """
    scores = [80, 59, 38, 99, 78]
    maxscore = minscore = scores[0]
    total = 0
    for score in scores:
        if score > maxscore:
            maxscore = score
        elif score < minscore:
            minscore = score
        total += score
    print('最小值為%d秽褒,最大值為%d壶硅,平均值為%.1f' % (minscore, maxscore, total/len(scores)))

按照字符串長(zhǎng)度排序

def bar():
    """
    按照字符串長(zhǎng)度排序

    :return: 從長(zhǎng)到短排序
    """
    o = ['odlh', 'akdgah', 'idhgjfhgahjghaj', 'ddhgjhhgghh']
    f2 = sorted(o, key=len, reverse=True)
    print(f2)

隨機(jī)返回幾組雙色球號(hào)碼

def random_select():
    """
    隨機(jī)返回一組彩票(雙色球)

    :return: 返回一組雙色球號(hào)碼
    """
    red_balls = list(range(1, 34))
    selected_balls = []
    for _ in range(6):
        index = randrange(len(red_balls))
        selected_balls.append(red_balls[index])
        del red_balls[index]
        selected_balls.sort()
    selected_balls.append(randint(1, 16))
    return selected_balls


def display(ball):
    """
    在藍(lán)色前面加上|,并在一位數(shù)前補(bǔ)上0

    :param ball: 含一組彩票號(hào)碼的列表容器

    :return: 在藍(lán)色前面加上|销斟,并在一位數(shù)前補(bǔ)上0
    """
    for index, val in enumerate(ball): # enumerate() 枚舉   并返回索引
        if index == len(ball) - 1:
            print('| ', end='')
        print('%02d ' % val, end='')
    print()


def cycle():
    """
    返回你需要注數(shù)的雙色球號(hào)碼

    :return: 返回你需要注數(shù)的雙色球號(hào)碼
    """
    n = int(input('給我搖幾注:'))
    for _ in range(n):
        display(random_select())

求次大

# 求次大
def next_max(all_data):
    max_one = max_two = all_data[0]
    for value in all_data:
        if value > max_one:
            max_two = max_one
            max_one = value
        elif max_two < value < max_one:
            max_two = value
    return max_two

約瑟夫環(huán)問(wèn)題

# 約瑟夫環(huán)問(wèn)題:有15個(gè)基督教徒和15個(gè)非基督教徒坐船去旅游庐椒,船壞了,要?dú)⒌?5個(gè)人其他人才能獲救
# 他們決定隨機(jī)從一個(gè)人報(bào)數(shù)蚂踊,數(shù)到9的就被殺死约谈,結(jié)果15個(gè)基督教徒都活下來(lái)了,問(wèn)他們是怎么站的犁钟?
def die():
    people = [True] * 30
    counter = 0
    index = 0
    number = 0
    while counter < 15:
        if people[index]:
            number += 1
            if number == 9:
                people[index] = False
                counter += 1
                number = 0
        index += 1
        index %= 30
    for person in people:
        print('基' if person else '非', end='')

求去除最高分和最低分后的平均數(shù)

# 設(shè)計(jì)一個(gè)函數(shù)棱诱,去掉一個(gè)最高分和一個(gè)最低分后求平均數(shù)
def arv(list):
    total = 0
    max_value = min_value = list[0]
    for select in list:
        if select > max_value:
            max_value = select
        elif select < min_value:
            min_value = select
    list.remove(min_value)
    list.remove(max_value)
    for now_value in list:
        total += now_value
    return total/len(list)

返回最大分?jǐn)?shù)及名字

# 原來(lái)有一個(gè)列表,裝的是一組學(xué)生的名字涝动,現(xiàn)在輸入對(duì)應(yīng)學(xué)生的成績(jī)迈勋,找出最高分和最低分和對(duì)應(yīng)的學(xué)生名字
def match(list1):
    list2 = []
    for name in list1:
        score = eval(input('請(qǐng)輸入%s的成績(jī):' % name))
        list2.append(score)
    max_score = max(list2)
    min_score = min(list2)
    my_max, my_min = list2.index(max_score), list2.index(min_score)
    return '%s擁有最高分%d;%s擁有最低分%d' % (list1[my_max], list2[my_max], list1[my_min], list2[my_min], )

python 的坑

# python 的坑   如果靜態(tài)區(qū)有緩存的數(shù)字醋粟,調(diào)用的時(shí)候都是引用的靜態(tài)區(qū)的值靡菇,不是重新創(chuàng)建的對(duì)象
# 在交互式環(huán)境中,靜態(tài)區(qū)自動(dòng)緩存  -5----256
# 在非交互式環(huán)境中米愿,靜態(tài)區(qū)自動(dòng)緩存所有正數(shù)
def main2():
    a = 123
    b = 123
    print(id(a))
    print(id(b))
    print(a is b)   # True
    a = -123
    b = -123
    print(id(a))
    print(id(b))
    print(a is b)   # False

內(nèi)存管理

  • 棧(stack) 堆(heap) 靜態(tài)區(qū)(數(shù)據(jù)段镰官,只讀數(shù)據(jù)段,代碼段)

  • 變量--對(duì)象的引用--對(duì)象的內(nèi)存地址 -- 棧

  • 對(duì)象--堆--獲取更大的存儲(chǔ)空間

  • id()函數(shù) 和 is運(yùn)算符 -- 驗(yàn)身份

    import sys
    
    def main1():
        # 棧(stack) 堆(heap) 靜態(tài)區(qū)(數(shù)據(jù)段吗货,只讀數(shù)據(jù)段泳唠,代碼段)
        # 變量--對(duì)象的引用--對(duì)象的內(nèi)存地址 -- 棧
        # 對(duì)象--堆--獲取更大的存儲(chǔ)空間
        # id()函數(shù) 和 is運(yùn)算符 -- 驗(yàn)身份
        list1 = [x for x in range(1,10)]  # list1 一個(gè)對(duì)象的地址
        list2 = list1  # list1把對(duì)象的地址賦值給list2
        list2[0] = 1000  # list1 和 list2 是同一個(gè)列表容器
        print(list1)     # [1000, 2, 3, 4, 5, 6, 7, 8, 9]
        list3 = list1[:] # 只有用切片的方法賦值list3一個(gè)新的列表容器
        list3[1] = 1000
        print(list2)     # [1000, 2, 3, 4, 5, 6, 7, 8, 9]
        print(list3)     # [1000, 1000, 3, 4, 5, 6, 7, 8, 9]
        # 可以查看地址,看是不是同一對(duì)象
        print(id(list1))
        print(id(list2))
        print(id(list3))
        print(sys.getrefcount(list)) # 得到list引用次數(shù)
    

元組 集合 字典

元組內(nèi)的單個(gè)項(xiàng)目不能重新賦值宙搬,且同元素的元組創(chuàng)建時(shí)間比列表快很多(%timeit)笨腥,且同元素的元組占用內(nèi)存空間比列表少很多(getsizeof(a))


timeit2.PNG

集合部分功能

def main():
    list1 = [1, 1, 2, 2, 3, 3]
    print(list1)
    tuple1 = (1, 1, 2, 2, 3, 3)
    print(tuple1)
    set1 = {1, 1, 2, 2, 3, 3}
    print(set1)
    set2 = {1, 3, 5, 7, 9}
    set3 = set1.intersection(set2)   # 集合的交集  set3 = set1 & set2
    print(set3)
    set3 = set1.union(set2)          # 集合的并集  set3 = set1 | set2
    print(set3)
    set3 = set1.difference(set2)     # 集合的差集  set3 = set1 - set2
    print(set3)
    set3 = set2.difference(set1)
    print(set3)
    set3 = set1.symmetric_difference(set2)  # 集合的對(duì)稱差  set3 = set1 ^ set2
    for val in set2:
        print(val)
    # print(set2[0])        # 集合是無(wú)須存儲(chǔ)的 沒(méi)有下標(biāo) 集合也沒(méi)有重復(fù)元素(去重)
    print(set2.pop())     # pop() 集合pop出來(lái)的值是隨機(jī)的
    if 3 in set2:
        set2.remove(3)
    print(set2)
    print(set2.issubset(set1))   # 子集  set2 <= set1
    print(set2.issuperset(set1)) # 超集  set2 >= set1
    set4 = {1, 2}
    print(set1.issuperset(set4))

集合 列表 元組 相互的轉(zhuǎn)換

def main():
    set1 = {'hello', 'good', 'cfx', 'hello'}
    print(len(set1))            # 3
    x = sorted(set1) 
    print(type(x))              # <class 'list'>
    print(x)                    # ['cfx', 'good', 'hello']
    list1 = list(set1)
    print(list1)                # ['good', 'hello', 'cfx']
    list2 = [1, 2, 3, 1, 2, 4]
    set2 = set(list2)
    print(set2)                 # {1, 2, 3, 4}
    tuple1 = (1, 1, 2, 3, 4, 4)
    list3 = list(tuple1)
    print(list3)                # [1, 1, 2, 3, 4, 4]

字典的部分功能

def main():
    dict1 = {'name': 'cfx', 'age': '24', 'gender': '男'}
    print(dict1['name'])                        # cfx
    print(dict1['age'])                         # 24
    print(dict1['gender'])                      # 男
    dict1['name'] = '王大錘'
    # dict1 += {'tel': '13594793585'}            這個(gè)功能不行
    dict1.update(height=172, fav=['吃', '喝'])
    print(dict1.pop('age'))                     # 24
    print(dict1.popitem())                      # ('fav', ['吃', '喝'])
    # del dict1                                 # del減少對(duì)象的引用  斷開(kāi)dict1的引用
    del dict1['gender']
    print(dict1)                                # {'name': '王大錘', 'height': 172}
    for x in dict1:
        print(x, '---->',dict1[x])              # key --value
    dict1.setdefault('motto', '成年人的故事太動(dòng)聽(tīng)')
    print(dict1['motto'])                       # 成年人的故事太動(dòng)聽(tīng)
    del dict1['motoo']
    print(dict1['motto'])                       # 為空
    dict1.pop('motto')

元組 字典 集合的實(shí)例

二維數(shù)列的應(yīng)用

def main():
    names = ['關(guān)羽', '張飛', '趙云', '劉備', '孫權(quán)']
    subjects = ['語(yǔ)文', '數(shù)學(xué)', 'python']
    scores = [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
    # scores = [[0, 0, 0] for _ in range(5)]
    # scores = [[0] * len(subjects) for _ in range(5)]
    # scores = [[0  for __ in range(3)]  for _ in range(5)]
    '''
    # scores1 = [[0] * len(subjects)] * len(names)
    # print(id(scores1[0])
    # print(id(scores1[1])
    # print(id(scores1[2])    # 都是一個(gè)地址,后面乘的5 只是引用了地址5次
    # print(scores)
    '''
    for row,name in enumerate(names):
        for col,subject in enumerate(subjects):
            scores[row][col] = eval(input('請(qǐng)輸入%s的%s成績(jī):' % (names[row], subjects[col])))
    print(scores)

輸入年月日判斷是當(dāng)年的第幾天

def is_leap(year):
    """
    判斷是不是閏年

    :param year: 輸入年份

    :return: 是閏年返回True勇垛,平年返回False
    """
    return year % 4 == 0 and year % 100 != 0 or year % 400 == 0


def witch_day(year, month, date):
    """
    判斷當(dāng)天是當(dāng)年的第幾天

    :param year:輸入的年

    :param month:輸入的月

    :param date:輸入的日

    :return:返回天數(shù)
    """
    leap = [[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
            [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
            ][is_leap(year)]
    # is_leap(year) 返回True時(shí)自動(dòng)取1  返回False時(shí)自動(dòng)取0.
    total = 0
    for index in range(month - 1):
        total += leap[index]
    return total + date


if __name__ == '__main__':
    print(witch_day(2018, 1, 1))    #1
    print(witch_day(2016, 3, 1))    # 61
    print(witch_day(1980, 11, 28))  # 333
    print(witch_day(1981, 12, 31))  # 365

返回楊輝三角(9種方法)

# 1 
# 1 1   
# 1 2   1   
# 1 3   3   1   
# 1 4   6   4   1   
# 1 5   10  10  5   1   
# 1 6   15  20  15  6   1   
# 1 7   21  35  35  21  7   1   


def pascal1(n):
    """
    楊輝三角
    :param n: 行數(shù)

    :return: n行楊輝三角
    """
    list1 = [[0 for _ in range(1, p+1)] for p in range(1, n+1)]
    if n <= 0:
        return None
    else:
        for i in range(n):
            if i == 0:
                list1[0][0] = 1
            elif i == 1:
                list1[1][0] = list1[1][1] = 1
            else:
                for j in range(i+1):
                    if j == 0:
                        list1[i][j] = 1
                    elif j == i:
                        list1[i][j] = 1
                    else:
                        list1[i][j] = list1[i - 1][j - 1] + list1[i - 1][j]
    return list1


def display(n):
    for i in range(n):
        for j in range(i+1):
            print(pascal1(n)[i][j], end='\t')
        print()


def pascal2():
    list2 = [1]
    while True:
        yield list2
        list2 = [sum(i) for i in zip([0] + list2, list2 + [0] )]


def pascal3():
    list2 = [1]
    while True:
        yield list2
        list2 = list(map(lambda x, y: x + y, [0] + list2, list2 + [0]))


def pascal4(n):
    list2 = [1]
    while True:
        yield list2
        list2 = [list2[i] + list2[i+1] for i in range(len(list2) - 1)]
        list2.insert(0,1)
        list2.append(1)
        if len(list2) == n:
            break


def pascal5(n):
    for du in range(1, n+1):
        a = [1 for _ in range(du)]
        if 2 < du < n + 1:
            for x in range(du-2):
                a[x+1] = b[x] + b[x+1]
        b = a
        print(a)


def pascal6(n):
    list2 = [1]
    i = 0
    while i < n:
        yield list2
        list2.append(0)
        list2 = [list2[i-1] + list2[i] for i in range(len(list2))]
        i += 1


def pascal7(n):
    list = []
    for _ in range(n):
        for _ in range(len(list) - 1):
            list.append(list.pop(0) + list[0])
        list.append(1)
        print(list)


def pascal8(n):
    i, L = 0,[[1]]
    while i < n:
        yield (L[i])
        list3 = [1] + [L[i][x] + L[i][x+1]  for x in range(0, len(L[i]) - 1)] +[1]
        L.append(list3)
        i += 1


def pascal9(n):
    for i in range(n):
        if i < 2:
            list1 =[1] * (1 + i)
        else:
            list1[1:-1] = [list1[i] + val for i, val in enumerate(list1[1:])]
        print(list1)


if __name__ == '__main__':
    display(8)
    # for val in pascal8(10):
    #     print(val)
    # n = 0
    # for t in pascal4():
    #     print(t)
    #     n += 1
    #     if n == 10:
    #         break
    # pascal9(10)
    # for val in fib(10):
    #     print(val)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脖母,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子闲孤,更是在濱河造成了極大的恐慌谆级,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讼积,死亡現(xiàn)場(chǎng)離奇詭異肥照,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)勤众,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門舆绎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人们颜,你說(shuō)我怎么就攤上這事吕朵×源迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵努溃,是天一觀的道長(zhǎng)硫嘶。 經(jīng)常有香客問(wèn)我,道長(zhǎng)梧税,這世上最難降的妖魔是什么音半? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮贡蓖,結(jié)果婚禮上曹鸠,老公的妹妹穿的比我還像新娘。我一直安慰自己斥铺,他們只是感情好彻桃,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著晾蜘,像睡著了一般邻眷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上剔交,一...
    開(kāi)封第一講書(shū)人閱讀 52,696評(píng)論 1 312
  • 那天肆饶,我揣著相機(jī)與錄音,去河邊找鬼岖常。 笑死驯镊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的竭鞍。 我是一名探鬼主播板惑,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼偎快!你這毒婦竟也來(lái)了冯乘?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤晒夹,失蹤者是張志新(化名)和其女友劉穎裆馒,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體丐怯,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡喷好,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了响逢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绒窑。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖舔亭,靈堂內(nèi)的尸體忽然破棺而出些膨,到底是詐尸還是另有隱情,我是刑警寧澤钦铺,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布订雾,位于F島的核電站,受9級(jí)特大地震影響矛洞,放射性物質(zhì)發(fā)生泄漏洼哎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一沼本、第九天 我趴在偏房一處隱蔽的房頂上張望噩峦。 院中可真熱鬧,春花似錦抽兆、人聲如沸识补。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)凭涂。三九已至,卻和暖如春贴妻,著一層夾襖步出監(jiān)牢的瞬間切油,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工名惩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留澎胡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓娩鹉,卻偏偏與公主長(zhǎng)得像滤馍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子底循,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫完項(xiàng)目接著寫寫一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,583評(píng)論 1 118
  • 變量不需要聲明 python的變量不需要聲明熙涤,你可以直接輸入: 那么你的內(nèi)存里就有了一個(gè)變量a阁苞,它的值是10,它的...
    L小橙子閱讀 281評(píng)論 0 0
  • 兩種算法比較 廣度優(yōu)先搜索一個(gè)圖的時(shí)候是按照樹(shù)的層次來(lái)搜索的祠挫,(層次遍歷)那槽,隊(duì)列來(lái)實(shí)現(xiàn),我們假設(shè)一個(gè)節(jié)點(diǎn)衍生出來(lái)的...
    會(huì)發(fā)光的二極管閱讀 15,967評(píng)論 0 7
  • 秋天敲打著玻璃 斑駁模糊 坐上一片黃色的枯萎 悠然地飄落 路過(guò)的詩(shī)人撿起 夾進(jìn)棕色的懷舊 赤腳印在泥濘的小路 指頭...
    康本叢Ben閱讀 238評(píng)論 0 0
  • 20.1.1堯曰:“咨等舔!爾舜骚灸!天之歷數(shù)在爾躬,允執(zhí)其中慌植。四海困窮甚牲,天祿永終义郑。”舜亦以命禹丈钙》峭裕——[讓位給舜的時(shí)候,]...
    共剪西窗燭閱讀 843評(píng)論 0 0