python基本語法學習筆記


快速格式化win:ctrl+alt+l(layout)

輸出函數的體驗

# 我是單行註釋
'''
    我是多行註釋
'''
# 單引號和雙引號都是一樣的,都是字符串類型,其實三引號也行
print('我是管超龍')

#自動加換行
print("hello world")
#取消換行
print("hello world",end="")

#如果確定輸出變量在字符串之後則可以直接
sex = '男'
print("性別", sex)

#格式化輸出
sex='男'
print("性別%s" % sex)
sex = '男'
print("性別%c" % sex)
age = 666
print("年齡%d" % age)
age = 666.666
print("年齡%f" % age)
print("性別%s 年齡%d" % (sex , age))
age=20
print(f"年齡:{age}")#注意要加f

輸入函數體驗

password = input("password:")
#默認input返回的都是字符串
print(password)
print(type(password))
#需要對輸入的內容進行操作時
num = int(input("password:"))
num += int(input("password:"))
#想要輸出%需要使用%轉義
print("最終密碼:%f %%" % num)

#多組輸入,空格分隔


n = int(input())
m = 1
while m <= n:
    # 默認類型爲list
    a, b, c = input().split(' ')
    a = int(a)
    b = int(b)
    c = int(c)
    # print(a)
    # print(b)
    # print(c)
    if a + b <= c:
        print("Case #%d: false" % m)
    else:
        print("Case #%d: true" % m)
    m += 1

變量,數據類型

變量的類型取決於它存放的數據類型,所以聲明時便需要初始化
變量可以被多次初始化改變類型

# 聲明即定義
num = 10.3
num1 = 20
# tab鍵可以自動補齊
print(num+num1)

# 數據類型
# int
# float沒有double型
# bool ==> True False
# string ==>'  ' "   "
# 元組和列表可以互相轉化
# list()列表
# tuple()元組
# type()可以獲取數據類型
num = False
#強制類型轉換
num=int("666666")
print(type(num))
num=float(666666)
print(type(num))
num=str(666666)
print(type(num))
num=bool(666666)
print(type(num))
#不是四捨五入直接去掉小數部分
s = '12.6'
print(int(float(s)))
#非法操作,只能進行一步轉化。
b=int("12.5")

標識符和關鍵字

標識符
python3支持漢字命名。
字母,下劃線,數字組成,不能以數字開頭
區分大小寫
不能和關鍵字重複

小駝峯命名法:userName
大駝峯命名法:UserName
下劃線連接法:user_name

關鍵字查詢

import keyword
print(keyword.kwlist)

運算符

a = 10
b = 2
#浮點計算
c = a / b
print(c)
#整除
c = a // b
print(c)
#指數a的b次方
print(a**b)
#多變量賦值
a, b, c = 11, 12, 13

分支語句if

python的if語句將格式與語法結合,強制性要求了代碼的美觀。
選中加tab可以將多行進行格式對應。

if 條件:
    運行語句
    ......
elif 條件:
	運行語句
	......
else :
	運行語句
	...... 
#必須要有四個空格

age = int(input("請輸入你的年齡:"))
if age >= 18:
    # 只要是前面都是空四個空格就屬於同一個判斷語句
    print("網吧")
    print("戀愛")
    print("prohub")
else:
    print("NO 網吧")
    print("NO 戀愛")
    print("NO prohub")
#包含and的if判斷
sex = '男'
if age >= 18 and sex == '男':
    print("網吧")
    print("戀愛")
    print("prohub")
else:
    print("一邊玩去")
#包含or的if判斷
sex = '女'
if age >= 18 or sex == '男':
    print("網吧")
    print("戀愛")
    print("prohub")
else:
    print("一邊玩去")
#包含not的if判斷
sex = '男'
if not age <= 18 and sex == '男':
    print("網吧")
    print("戀愛")
    print("prohub")
else:
    print("一邊玩去")
#if的嵌套使用
sex = '男'
age = 16
if sex == '男':
    if age >= 18:
        print("網吧")
        print("戀愛")
        print("prohub")
    else:
        print("玩泥巴去")
    print("一邊玩去")
else:
    print("繡花適合你")
    
#if-elif-else
sex = '男'
if age >= 18:
    print("網吧")
    print("戀愛")
    print("prohub")
elif sex == '男':
    print("網吧")
    print("戀愛")
    print("prohub")
else:
    print("一邊玩去")  

猜拳遊戲

import random

# 隨機生成1~3的任意整數
num = random.randint(1, 3)
print(num)
user = int(input("1,石頭 2,剪刀 3,布:"))
if user == 1:
    if num == 1:
        print("平局")
    if num == 2:
        print("玩家贏了")
    if num == 3:
        print("電腦贏了")
elif user == 2:
    if num == 1:
        print("電腦贏了")
    if num == 2:
        print("平局")
    if num == 3:
        print("玩家贏了")
elif user == 3:
    if num == 1:
        print("玩家贏了")
    if num == 2:
        print("電腦贏了")
    if num == 3:
        print("平局")

循環語句

while 條件:
	條件滿足時.運行1
	條件滿足時.運行2
	.....省略.....
#選中tab鍵整體向左平移四個空格,shift+tab鍵向右平移四個空格還原
import random

while True:
    # 隨機生成1~3的任意整數
    num = random.randint(1, 3)
    print(num)
    user = int(input("1,石頭 2,剪刀 3,布:"))
    if (user == 1 and num == 2) or (user == 2 and num == 3) or (user == 3 and num == 1):
        print("玩家贏了")
    elif user == num:
        print("平局,狗賊再來一局")
    else:
        print("電腦贏了")

for 臨時變量 in 列表或字符串等可迭代對象

#第一種方式
for i in "prohub":
    print(i)
#第二種方式,指定循環次數
#默認[0,num)
#[num1,num2)
for i in range(10):
    print(i)
for i in range(2, 10):
    if i == 6:
        continue
    print(i)

字符串下標,切片使用

web = "prohub"
#數組下標
print(web[0])
#數組切片,[0,3)
print(web[0:3])
# 獲取整個字符串
print(web[0:6])
print(web[:])
print(web[:6])
print(web[0:])
#如果是負數,輸出時則減少對應個數的字符,倒數第幾個
print(web[0:-1])#prohu
print(web[0:-2])#proh

# 步長的使用
# 1 如果步長是正的 那麼就意味着從起始位置向右走到結束位置
# 2 如果步長是負的 那麼就意味着從起始位置向左走到結束位置
# 仍然左閉右開
print(web[5:0:-1])#buhor
print(web[0:6:2])#pou
print(web[0:6:1])#prohub
# 直接倒序
print(web[::-1])

字符串功能函數

# 子字符串查找,如果找到返回對應第一個字母的位置,否則返回-1
print(web.find("hub"))
# 設置查找範圍
print(web.find("hub", 0, len(web)))

# index函數使用和find差不多,但是如果str不在web中,直接報錯
# print(web.index("111"))

# count函數,統計str在web出現的次數
print(web.count("o"))

# replace函數,可以指定替換次數否則默認全替換。
new_web = web.replace("hub", "yellow", web.count("hub"))
print(new_web)

# split函數,可以指定切割次數
web = "https://cn.pornhub.com/"
web = web.split(".", web.count(".") - 1)
print(web)  # ['https://cn', 'pornhub', 'com/']

# join函數,可以在字符串上添加新的字符串,每個字符或者每個元素進行插入
# split函數使用之後的字符串,在每個間隔加上對應的符號然後連接起來
web = "https://cn.pornhub.com/"
str = "@"
new_str = str.join(web)
print(new_str)

列表(數組)

# 列表可以存放各種類型的數據,存放多個數據

# 列表的定義
my_list = []
my_list = list()

my_list = [1, 2, 3, 4, 5, 6]
# 列表可以存放不同的數據類型 存放多個數據
my_list = [1, 2, 6, 6.66, "888", [666, 888]]

# 列表的真正使用情況 存放同類數據
# 列表獲取值
web = ["https://cn.pornhub.com/", "https://bc212.com/", "裏番——あねよめカルテット 上巻"]
print(web[0])
print(web[1])
print(web[2])
#for循環輸出
for i in web:
    print(i)
print(web)
# 添加元素append 在列表的末尾添加元素!!!
web.append("ghs")
print(web)
web.append(["https://cn.pornhub.com/", "https://bc212.com/", "裏番——あねよめカルテット 上巻"])
print(web)
# extend 將兩個表融合在一起
web = ["https://cn.pornhub.com/", "https://bc212.com/", "裏番——あねよめカルテット 上巻"]
web.extend(["https://cn.pornhub.com/", "https://bc212.com/", "裏番——あねよめカルテット 上巻"])
print(web)
# insert 在指定位置插入數據,從零開始
web = ["https://cn.pornhub.com/", "https://bc212.com/", "裏番——あねよめカルテット 上巻"]
web.insert(4, "ghs")
print(web)
# 修改
web = ["https://cn.pornhub.com/", "https://bc212.com/", "裏番——あねよめカルテット 上巻"]
web[0] = "ghs"
print(web)
# 查找元素(in,not in,index,count)
web = ["https://cn.pornhub.com/", "https://bc212.com/", "裏番——あねよめカルテット 上巻"]
if "ghs" in web:
    print("together")
else:
    print("go out")
if "ghs" not in web:
    print("go out")
dex = web.index("裏番——あねよめカルテット 上巻")
print(dex)
item = web.count("裏番——あねよめカルテット 上巻")
print(item)
# 刪除元素(del,pop,remove)
web = ["https://cn.pornhub.com/", "https://bc212.com/", "裏番——あねよめカルテット 上巻"]
# del
del web[0]
print(web)
# pop
web.pop()
print(web)
# remove
web.remove("https://bc212.com/")
print(web)
# 排序(sort,reverse)
num = [6, 4, 8, 4, 1, 5, 74, 41, 88]
# 默認從小到大排序
num.sort()
print(num)
# 改變排序順序
num.sort(reverse=True)
print(num)
# reverse排序,逆序排列,只是將元素順序反轉
num.reverse()
print(num)
num = [6, 4, 8, 4, 1, 5, 74, 41, 88]
num.reverse()
print(num)

列表例題

隨機將八個老師分配在三個教室裏面

import random

classroom = [[], [], []]
teacher = ["a", "b", "c", "d", "e", "f", "g", "h"]
for i in teacher:
    num = random.randint(0, 2)
    classroom[num].append(i)
num = 1
for i in classroom:
    print(f"第{num}教室")
    print(i)
    num += 1

列表推導式

# 列表推導式可以根據公式快速生成列表
# 快速生成[0,4)的列表
a = [x for x in range(4)]
print(a)
# 生成偶數列表
# if語句是嵌套在for循環裏面的
a = [x for x in range(100) if x % 2 == 0]
print(a)
# for循環的嵌套關係
# 雙重循環,x在外y在裏
a = [(x, y) for x in range(66) for y in range(88)]
print(a)


# 使用推導式生成九九乘法表
a = [(x, "*",+y, "=", x * y) for x in range(1, 10) for y in range(x, 10)]
print(a)

元組

# 元組中的消息不能修改,只讀屬性,添加,排序都不可以
#切片可以因爲沒改變元組的值,只是讀取

# 定義,使用小括號定義
name = (1, 2)
print(type(name))
# 定義方式
name = tuple()
# 定義一個元素的元組
name = (1,)
name = (1, 2, 1, 2, 3, 5)
# index,count
print(name.index(1))
print(name.count(1))
# 元組key可以轉化爲list和tuple
print(name)  # (1, 2, 1, 2, 3, 5)
name = list(name)
print(name)  # [1, 2, 1, 2, 3, 5]
name = tuple(name)
print(name)

字典(結構體)

字典,元組和列表可以相互轉化,字典的key參與轉化

# 字典:存儲的是某個事物的詳細信息
students = [{}, {}, {}, {}]
# 字典:由 key-value 鍵值對

# 字典的定義
# name={}
# name=dict()
people = {"name": "管超龍", "sex": "man", "age": 20, "weight": 180}
students[0] = people
print(type(people))

# 可以強制轉換爲元組和列表,但是元組只是存儲key值
stu = tuple(people)
print(stu)
stu = list(people)
print(stu)
# 遍歷
print(students[0]["name"])
for i in people:
    print(students[0][i])
# 修改元素
people["name"] = "GCL"
print(people["name"])
# 添加元素
people["telephone"] = 19861888888
# 刪除元素
del people["name"]
print(people)
# 清空
people.clear()
print(people)

字典的功能函數

web = {"name": "gcl", "tel": "110", "sex": "男"}
# 1 len() 獲取字典,元組,集合,字符串,列表長度
length = len(web)
print(length)

# 獲取key值
keys = web.keys()
print(keys)
# 獲取value值
for i in web:
    print(i, end=" ")
    print(web[i])
# items()獲取字典的所有的key-value鍵值對
for i in web.items():
    print(i)
for x, y in web.items():
    print(x, y)

集合(set)

# 集合最大的特點是沒有重複的值並且自動排序
a = set()
print(type(a))
a = {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(type(a))
# 可以通過將列表轉化爲集合進行去重
b = [1, 1, 1, 2, 6, 5, 5, 5, 6, 6, 6, 9, 5, 5, 8, 9, 9, 9]
b = set(b)
b = list(b)
print(type(b))
print(b)
# 使用字典去除重複值
b = [1, 1, 1, 2, 6, 5, 5, 5, 6, 6, 6, 9, 5, 5, 8, 9, 9, 9]
b=dict.fromkeys(b)
print(b)
print(list(b))
# 使用not in去除重複值
b = [1, 1, 1, 2, 6, 5, 5, 5, 6, 6, 6, 9, 5, 5, 8, 9, 9, 9]
a=[]
for i in b:
    if i not in a:
        a.append(i)
print(a)
# 使用count去除重複值
b = [1, 1, 1, 2, 6, 5, 5, 5, 6, 6, 6, 9, 5, 5, 8, 9, 9, 9]
for i in b:
    while b.count(i)>1:
        b.remove(i)
print(b)

拆包

# 元組支持拆包
a, b = (66, 88)
print(a)
print(b)
# 列表支持拆包
a, b = [1, 2]
print(a)
print(b)
# 字典支持拆包
# 獲取的是key值
a, b = {"name": "gcl", "age": 18}
print(a)
print(b)

# 巧用拆包進行數值交換,python特有
print(a)
print(b)
a, b = b, a
print(a)
print(b)


公共方法

在這裏插入圖片描述

函數

# define 定義函數
# def 函數名(...):
#     功能代碼
# 調用函數
# 函數名(...)
def func(s):
    """
    程序員
    打油詩
    :param s:隨意體驗
    :return:無返回
    """
    print("寫字樓裏寫字間,寫字間裏程序員;")
    print("程序人員寫程序,又拿程序換酒錢;")
    print("酒醒只在網上坐,酒醉還來網下眠;")
    print("酒醒酒醉日復日,網上網下年復年;")
    print("但願老死電腦間,不願鞠躬老闆前;")
    print("奔馳寶馬貴者去,公交自行程序員;")
    print("別人笑我忒瘋癲,我笑自己命太賤;")
    print("不見滿街漂亮妹,哪個歸得程序員;")


a = "hahahahaha"
func(a)
# 查看文檔說明
help(func)
# 查看文檔說明
print(func.__doc__)


# return 返回結果,因爲python對於變量的方便性所以可以隨便返回和接收。
# 默認返回None
def add(a, b):
    return a + b


num = func(a)
print(num)
print(add(100, 200))

# 還可以使用變量存儲函數地址然後調用變量和地址的作用一樣
num=func
num(a)

匿名函數

# 正常的定義函數方式
def add_func(a, b):
    return a + b


# 匿名函數
# lambda 參數:表達式
lambda a, b: a + b
num = lambda a, b: a + b
print(num(10, 20))


# 匿名函數注意點
# 匿名函數不能使用if語句,while循環,for循環,只能編寫單行的表達式或者函數調用,普通函數都可以
# 匿名函數中返回結果不需要使用return,表達式的運行結果就是返回結果,普通函數返回結果必須return
# 匿名函數也可以不返回結果,例如:lambda: print('hello world')


# 匿名函數的應用
def function(func):
    a = 666
    b = 888
    print(func(a, b))


# 可以根據需要傳遞對應的函數給功能函數使用,可以快速定義函數,不需要起名字
function(lambda a, b: a + b)
function(lambda a, b: a - b)

遞歸函數

遞歸函數解決求n的階乘

n = int(input("輸入n:"))
sum = 1


# 解法一
def func(n):
    if n == 0:
        return
    else:
        # 函數內要使用全局變量需要提前聲明
        global sum
        sum *= n
        n -= 1
        func(n)


func(n)
print(sum)


# 解法二
def func1(n):
    if n == 1:
        return 1
    else:
        result = n * func1(n - 1)
    return result


print(func1(n))

多值參數

# 1 缺省參數
# 定義的時候缺省參數要放在最右邊,防止出現錯誤賦值(將下一個參數的值付給了缺省參數)和參數個數不匹配問題
def func(name, age=18):
    print(name)
    print(age)


func("龜叔")
func("馬冬梅", 20)


# 2 不定長參數
# 應用在參數發生多餘的情況
# *args:接收多餘的單值參數(list,tuple,dict),元祖方式接受
# **kwargs:接收多餘的鍵值對參數,字典的方式接受
def func1(name, age, *args, **kwargs):
    print(name)
    print(age)
    print(args)
    print(kwargs)


# 測試args
func1("gcl", 20, 18, 45, 46, 4896, [112, 65464], (42445454,), {"name": "gcl", })
# 測試kwargs
func1("gcl", 66, 5, 5, 4, 54, tel=110, na="gcl")


# 缺省參數可以在*args的後面,可以在kwargs前面
# 順序不一樣可能導致缺省參數一直使用默認的數值
def sum_num(a, b=66, c=88, *args, **kwargs):
    print(a)
    print(args)
    print(b)
    print(c)
    print(kwargs)


sum_num(66, 457, 789, 5765, 57587, 5785, 5875, 758)

局部變量和全局變量

web = "prohub"


# 局部變量,定義在函數裏面的變量
# 使用id查看變量的地址編號,對於地址都有編號,來體現區別
def func():
    web = "github"
    print(web)
    print("局部變量", id(web))


func()
print(web)
print("全局變量", id(web))
print("@" * 30)


# 在函數內部修改全局變量
def func1():
    global web
    web = "github"
    print("函數內部", web)


func1()
print("函數外部", web)

# 此處的id編號和上面局部變量的id編號相同
# 因爲值一樣,而值的地址不變,所以一樣
# 此概念類似java的string賦值常量
print("地址編號爲", id(web))

return返回值

def func():
    a = 66
    b = 88
    c = 99
    print(id(a))
    return a, b, c
    # return [1, 2, 3]
    # return {}
    # return 10


num = func()
# 返回多個值且沒指定類型時,默認返回值是元組
print(type(num))
# 拆包技巧
a, b, c = num
# 存儲的值一樣那麼地址編號就一樣,因爲常量開闢出來一個固定的空間地址然後編號,進行地址賦值
# 由於常量不能被修改,因此地址也不會改變,所以可以直接使用對應的地址進行賦值且不會出錯
print(id(a))
d = a + c
e = a + c
# 同理
print(id(e))
print(id(d))
# 此法也適用於局部變量和全局變量

引用

可參考java中的string變量的常量池概念

# 列表變量實際上是存儲的地址,因此指針指向地址的內容變了,都會變。
web = ["prohub"]
html = web
html.append("github")
web = {"name": "gcl", "age": "18"}
html = web
print("元組")
web["sex"] = "男"
print(html)
# 在相同的地址上擴展了存儲內容,所以地址編號相同,並且值也相同
# 如果賦值後地址一樣會導致一改全改,出現錯誤。
print(id(html))
print(id(web))
print(web)
print(html)
# 重新賦值會改變地址
html = ["prohub"]
print(id(html))
# 但是對於常量不可變類型,賦值是不會改變地址的
# 因爲常量不可變,所以賦值後地址是一樣的
# 元組
print("元組")
html = (123,)
web = (123,)
print(id(web))
print(id(html))
# 常熟
print("常數")
html = 666
web = 666
print(id(html))
print(id(web))
# 字符串
# 其實字符串是可變的,但是爲了實現功能,有對應的完善所以可以隨意賦值使用
print("字符串")
web = "prohub"
html = "prohub"
print(id(web))
print(id(html))
# 比如這樣雖然內容一樣,但是地址不同,不會出現改一個牽連都改的情況
a = "456"
c = "456"
c += "2"
c = "4"
b = c + "56"
print(id(a))
print(id(c))

函數中的引用

# 引用在函數中的使用,輸出都相等
def func(a):
    a.append(456)


a = [123]
func(a)
print(a)

a = "123"


def test(a):
    a += a
    # +=類似append或extend操作,在原有地址上操作,值都一起改變
    print(a)
    a = a + a
    # 坑點
    # 這樣值就不一樣了,相當於產生新地址進行賦值,不會改變全局變量
    print(a)


test(a)
print(a)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章