風變編程筆記(一)-Python基礎語法


關鍵字:print()  type()  input()  append()  pop()  range()  numpy  math.ceil()  index()  @classmethod  @staticmethod  self  __init__()  __str__()  split()  join()  random  dir()  csv  time  os  smtplib  email  myqr

第0關  print()函數與變量

1. print()函數
print()函數:告訴計算機,把括號的內容顯示在屏幕上

# 不帶引號
print(1+1)  # 讓計算機讀懂括號里的內容,打印最終的結果
# 》》2

# 帶引號
print('hello world!')  # 讓計算機無需理解,原樣復述引號中的內容
# 》》hello world!

# 帶雙引號
print("Let's play")  # 讓計算機無需理解,原樣復述引號中的內容,可以輸出內容中的單引號
# 》》Let's play

# 三引號
print(''' 
    へ     /|
  /\7    ∠_/
  / │   / /
 │ Z _,< /   /`ヽ
 │     ヽ   /  〉
  Y     `  /  /
 イ● 、 ●  ⊂⊃〈  /
 ()  へ    | \〈
  >ー 、_  ィ  │ //
  / へ   / ノ<| \\
  ヽ_ノ  (_/  │//''')  # 原樣打印,實現換行
# 》》 へ     /|
#   /\7    ∠_/
#   / │   / /
#  │ Z _,< /   /`ヽ
#  │     ヽ   /  〉
#   Y     `  /  /
#  イ● 、 ●  ⊂⊃〈  /
#  ()  へ    | \〈
#   >ー 、_  ィ  │ //
#   / へ   / ノ<| \\
#   ヽ_ノ  (_/  │//

2. 轉義字符

3. 變量

變量賦值用=表示,不要跟==搞混

第1關  數據類型與轉換

1. 數據類型
Python里,最常用的數據類型有三種——字符串(str)、整數(int)和浮點數(float)
· 字符串英文string,簡寫str,有層名為【引號】的皮,只要是被【單/雙/三引號】這層皮括起來的內容,不論那個內容是中文、英文、數字甚至火星文。只要是被括起來的,就表示是字符串類型
· 整數英文為integer,簡寫做int,Python世界的整數其實和現實世界數學中定義的一樣:是正整數、負整數和零的統稱,是沒有小數點的數字
· 浮點數的英文名是float,是帶小數點的數字。與【整數運算結果永遠精確】的特點不同,計算機里浮點數的運算是不精確的,因為計算浮點數時會先講數字轉換成二進制數,通過二進制法則運算后,再通過復雜的計算公式,將二進制結果轉成十進制小數
2. 算術運算符

print(2+1)  # 加法
# 》》3
print(1-2)  # 減法
# 》》-1
print(1*2)  # 乘法
# 》》 2
print(1/2)  # 除法
# 》》0.5
print(5 % 2)  # 取模(做除法返回余數)
# 》》1
print(2**3)  # 冪(這里是2的3次方)
# 》》8
print(11//2)  # 取整除(做除法返回商的整數部分)
# 》》5
3. 數據類型的查詢—— type()函數
print(type('桂綸鎂'))
# 》》<class 'str'>
print(type(1))
# 》》<class 'int'>
print(type(1.55))
# 》》<class 'float'>

4. 數據轉換

第2關  條件判斷與條件嵌套

1. 條件判斷


2. if嵌套

當然,elif也是可以放進嵌套里的

第3關  input()函數

name = input('請輸入你的名字:')
# 將input()函數的執行結果,在終端輸入的數據,賦值給變量name

input()函數的輸入值,永遠會被【強制性】地轉換為【字符串】類型(Python3固定規則)

第4關  列表和字典

1. 列表(list)

一些列表的相關操作↓

s = ['柯佳嬿', '許光漢', '施柏宇', '顏毓麟', '林鶴軒', '張翰']

print(len(s))  # 打印列表s的長度
# 》》6
print(type(s))  # 打印列表s的類型
# 》》<class 'list'>
print(s[3])  # 打印列表s里面的第3個元素
# 》》顏毓麟
print(s[-3])  # 打印列表s里面的倒數第3個元素
# 》》顏毓麟

list1 = [91, 95, 97, 99]
list2 = [92, 93, 96, 98]

# 列表的合並
list3 = list1+list2  # 第一種方法:+直接拼接
print(list3)
# 》》[91, 95, 97, 99, 92, 93, 96, 98]
list1.extend(list2)  # 第二種方法:extend()方法
print(list1)
# 》》[91, 95, 97, 99, 92, 93, 96, 98]

# 列表的排序
a = [91, 95, 97, 99, 92, 93, 96, 98]
a.sort()  # 列表從小到大排序
print(a)
# 》》[91, 92, 93, 95, 96, 97, 98, 99]
b = [91, 95, 97, 99, 92, 93, 96, 98]
b.sort(reverse=True)  # 列表從大到小排序
print(b)
# 》》[99, 98, 97, 96, 95, 93, 92, 91]
c = [91, 95, 97, 99, 92, 93, 96, 98]
c.reverse()  # 列表反向排序
print(c)
# 》》[98, 96, 93, 92, 99, 97, 95, 91]

用冒號來截取列表元素的操作叫作切片(slice),切片可以單拿出來說很長的篇幅,網上搜到一篇講的很清楚的:徹底搞懂Python切片操作
給列表增加元素:列表名.append()
給列表刪除元素:del 列表名[元素的索引]
pop()函數,用於移除列表中的一個元素(默認最后一個元素),並且返回該元素的值↓

students = ['小明', '小紅', '小剛']
for i in range(3):
    student1 = students.pop(0)  # 運用pop()函數,同時完成提取和刪除。
    students.append(student1)  # 將移除的student1安排到最后一個座位。
    print(students)

# 》》》 ['小紅', '小剛', '小明']
# 》》》 ['小剛', '小明', '小紅']
# 》》》 ['小明', '小紅', '小剛']

2. 字典(dict)

字典中的鍵具備唯一性,而值可重復
從字典中提取元素:字典名[字典的鍵]
字典新增鍵值對:字典名[鍵] = 值

scores = {'小明': 95, '小紅': 90, '小剛': 90}
print(scores['小明'])  # 從字典中提取元素
# 》》95
scores['小紅'] = 88  # 改變字典中的值
print(scores['小紅'])
# 》》88
scores['小北'] = 98  # 給字典新增鍵和值
print(scores)
# 》》{'小明': 95, '小紅': 88, '小剛': 90, '小北': 98}

字典刪除鍵值對:del 字典名[鍵]

3. 列表和字典的不同點
列表中的元素是有自己明確的“位置”的,所以即使看似相同的元素,只要在列表所處的位置不同,它們就是兩個不同的列表。而字典相比起來就顯得隨和很多,調動順序也不影響。因為列表中的數據是有序排列的,而字典中的數據是隨機排列的。

4. 列表和字典的嵌套

students = {
    '第一組':['小明','小紅','小剛','小美'],
    '第二組':['小強','小蘭','小偉','小芳']
    }
print(students['第一組'][3])
#取出'第一組'對應列表偏移量為3的元素,即'小美'

scores = [
    {'小明':95,'小紅':90,'小剛':100,'小美':85},
    {'小強':99,'小蘭':89,'小偉':93,'小芳':88}
    ]
print(scores[1]['小強'])
#先定位到列表偏移量為1的元素,即第二個字典,再取出字典里鍵為'小強'對應的值,即99。

5. 元祖(tuple)
元組的寫法是將數據放在小括號()中,它的用法和列表用法類似,主要區別在於列表中的元素可以隨時修改,但元組中的元素不可更改

list2 = [('A', 'B'), ('C', 'D'), ('E', 'F')]
print(list2[1][1])
# 》》 D
# 從代碼里可看出:1.元組內數據的提取也是用偏移量;2.元組也支持互相嵌套。

以上幾種關於收納的數據類型,最常用的還是列表,而對偏移量切片的使用是寫算法非常重要的技能  

第5關  for循環和while循環

1. for...in...循環語句

2. range()函數

3. while循環

4. 兩種循環對比

第6關  布爾值和四種語句

布爾運算的三種方式:
第一種計算:兩個數值做比較
一共有6種比較方式:==、!=、>、<、>=、<= 

print(3 == 3.0)
# 》》True
print('a' != 'a')
# 》》False
print(3 > 5)
# 》》False
print(3 < 5)
# 》》True
print(100 >= 101)
# 》》False
print(100 <= 101)
# 》》True

第二種計算:直接用數值做運算

第三種計算:布爾值之間的運算
一共有5種計算方式:and、or、not、in、not in 

# and計算和or計算
a = 1
b = -1
print(a == 1 and b == 1)  # and要求條件都滿足才為True
# 》》False
print(a == 1 or b == 1)  # or只要求其中一個條件滿足就為True
# 》》True

# not計算
a = True
print(not a)  # not計算會反轉真假
# 》》False

# in計算和not in計算
a = [1, 2, 3, 4, 5]
print(0 in a)  # in用來判斷一個元素是否在一堆數據之中
# 》》False
print(1 in a)
# 》》True
print(0 not in a)  # not in用來判斷一個元素是否不在一堆數據之中
# 》》True
print(1 not in a)
# 》》False

 

第7關  項目實操:PK小游戲(1)

import time   #調用time模塊
time.sleep(secs)   
#使用time模塊下面的sleep()函數,括號里填的是間隔的秒數(seconds,簡稱secs)
#time.sleep(1.5)就表示停留1.5秒再運行后續代碼
import random  # 調用random模塊
a = random.randint(1, 100)
# 隨機生成1-100范圍內(含1和100)的一個整數,並賦值給變量a
print(a)

print(random.choice([5, 7, 9, 11, 13, 15]))  # 在給定列表中隨機選擇

取英文變量名推薦網站:CODELF
三種格式化字符串方法↓

a = 5
b = 7.85
print(str(a)+'+'+str(b)+'='+str(a+b))  # 第一種:+拼接字符串和變量
# 》》5+7.85=12.85
print('%d+%s=%.2f' % (a, b, a+b))  # 第二種:格式符+類型碼 %.2f的意思是格式化字符串為浮點型並保留兩位小數
# 》》5+7.85=12.85 
print('{}+{}={}'.format(a, b, a+b))  # 第三種:format()函數
# 》》5+7.85=12.85

第8關  編程思維:如何解決問題

拓展程序庫numpy的簡單用法↓

import numpy as np  # 導入 numpy庫,下面出現的 np 即 numpy庫

a = [91, 95, 97, 99, 92, 93, 96, 98]

average = np.mean(a)  # 求平均數,average是numpy.float64類型
print(average)
# 》》95.125

b = np.array(a)  # 將列表a轉換為numpy.ndarray類型
print('小於平均數的有:{}' .format(b[b < average]))
# 》》[91 95 92 93]

c = b.tolist()  # 將數組b轉換回列表
print(type(c))
# 》》<class 'list'>

第9關  函數

函數是組織好的、可以重復使用的、用來實現單一功能的代碼
1. 定義和調用函數 

# 函數名:1. 名字最好能體現函數的功能,一般用小寫字母和單下划線、數字等組合
# 2. 不可與內置函數重名(內置函數不需要定義即可直接使用)
def math(x):
    # 參數:根據函數功能,括號里可以有多個參數,也可以不帶參數,命名規則與函數名相同
    # 規范:括號是英文括號,后面的冒號不能丟
    y = x ** 2 + x
# 函數體:函數的執行過程,體現函數功能的語句,要縮進,一般是四個空格
    return y
# return語句:后面可以接多種數據類型,如果函數不需要返回值的話,可以省略

print(math(5))  # 調用math()函數

2. 參數類型
以最熟悉的print()函數為例↓

print(*objects, sep = ' ', end = '\n', file = sys.stdout, flush = False)

可以看到第一個參數objects帶了*號,為不定長參數——這也是為什么print()函數可以傳遞任意數量的參數。其余四個為默認參數,我們可以通過修改默認值來改變參數。

print('www', 'pypypy', 'cn')  # objects -- 復數,表示可以一次輸出多個對象。輸出多個對象時,需要用 , 分隔。
# 》》www pypypy cn
print('www', 'pypypy', 'cn', sep=".")  # sep -- 用來間隔多個對象,默認值是一個空格。
# 》》www.pypypy.cn
print('hello', end='~~~~~~')  # end -- 用來設定以什么結尾。默認值是換行符 \n,可以換成其他字符串。
print('world')
# 》》hello~~~~~~world

print()函數的參數file和flush說起來篇幅比較長,單寫了篇關於print()、sys.stdout、sys.stderr的一些理解
3. 返回多個值

def a():
    return 1, 2, 3

b = a()  # 變量b接收函數a的返回值
print(b)  # 打印返回值
# 》》(1, 2, 3)
print(type(b))  # 打印返回值的類型
# 》》<class 'tuple'>

也可以同時定義多個變量,來接收元組中的多個元素

def a():
    return 1, 2, 3

x, y, z = a()
print(x)
# 》》1
print(y)
# 》》2
print(z)
# 》》3

4. 變量作用域
· 一個在函數內部賦值的變量僅能在該函數內部使用(局部作用域),它們被稱作【局部變量】
· 在所有函數之外賦值的變量,可以在程序的任何位置使用(全局作用域),它們被稱作【全局變量】
如果想將局部變量聲明為全局變量,就要用到global語句

tfc = 1000

def tvc():
    global tvc  # global語句一般寫在函數體的第一行,它會告訴Python,“我希望tvc是個全局變量,所以請不要用這個名字創建一個局部變量”
    vc = 200
    x = 10
    tvc = vc * x

def tc():
    print(tfc+tvc)  # tc()函數內部現在可以直接使用聲明后的全局變量tvc

tvc()
tc()
# 》》3000

5. 函數的嵌套

tfc = 1000

def tvc():
    vc = 200
    x = 10
    return vc * x

def tc():
    print(tfc+tvc())  # 在tc()函數中調用了tvc()函數

tc()
# 》》3000

6. 遞歸

def digui(num):
    if (num == 1):
        return 1
    return num * digui(num-1)

x = digui(5)
print(x)
# 》》120

 

第10關  項目實操:PK小游戲(2)

1. 向上取整

import math

# 人力計算
def estimated_number(size, time):
    number = size * 80 / time
    print(number)
    # 》》1.3333333333333333
    print('項目大小為%.1f個標准項目,如果需要在%.1f個工時完成,則需要人力數量為:%d人' %
          (size, time, math.ceil(number)))  # 通過ceil()函數向上取整
    # 》》項目大小為1.0個標准項目,如果需要在60.0個工時完成,則需要人力數量為:2人

estimated_number(1, 60)

如果不用ceil()函數,這個人力計算向上取整也可以通過判斷余數不為零就加一的方法實現
2. index()函數
index()函數用於找出列表中某個元素第一次出現的索引位置

import random

punches = ['石頭', '剪刀', '']

# 猜拳游戲
def punches_game(user_choice):
    computer_choice = random.choice(punches)
    if user_choice == computer_choice:
        print('平局')
    # 電腦的選擇有3種,索引位置分別是:0石頭、1剪刀、2布。
    # 假設在電腦索引位置上減1,對應:-1布,0石頭,1剪刀,皆勝。
    elif user_choice == punches[punches.index(computer_choice)-1]:
        print('你贏了')
    else:
        print('你輸了')

punches_game(user_choice='')

第11關  編程思維:如何debug

多行注釋有兩種快捷操作:1) 在需要注釋的多行代碼塊前后加一組三引號''' 2) 選中代碼后使用快捷鍵操作:Mac為cmd+/
異常處理:

# 方式1:
try:
    x = input('請你輸入被除數:')
    y = input('請你輸入除數:')
    z = float(x)/float(y)
    print(x, '/', y, '= %.2f' % z, sep='')
except ZeroDivisionError:  # 當除數為0時,跳出提示,重新輸入。
    print('0是不能做除數的!')
except ValueError:  # 當除數或被除數中有一個無法轉換成浮點數時,跳出提示,重新輸入。
    print('除數和被除數都應該是整值或浮點數!')

# 方式2:將兩個(或多個)異常放在一起,只要觸發其中一個,就執行所包含的代碼。
# except(ZeroDivisionError,ValueError):
#     print('你的輸入有誤,請重新輸入!')

# 方式3:常規錯誤的基類,假設不想提供很精細的提示,可以用這個語句響應常規錯誤。
# except Exception: #換成BaseException也可以
#     print('你的輸入有誤,請重新輸入!')

關於Python的所有報錯類型,一般可以在這里查閱:https://www.runoob.com/python/python-exceptions.html
異常層次結構需到官網查看https://docs.python.org/zh-cn/3/library/exceptions.html#exception-hierarchy

第12關  類與對象1

Python中的對象等於類(class)和實例(instance)的集合:即類可以看作是對象,實例也可以看作是對象

1. 類的創建和調用
Python里的每個類都有自己獨特的屬性(attribute)和方法(method),是這個類的所有實例都共享的。換言之,每個實例都可以調用類中所有的屬性和方法。 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM