@ "TOC" 1.變數 變數用於存儲要在電腦程式中引用和操作的信息。它們的唯一目的是在記憶體中標記和存儲數據。然後可以在整個程式中使用這些數據。變數存儲在記憶體中的值。這就意味著在創建變數時會在記憶體中開闢一個空間。 基於變數的數據類型,解釋器會分配指定記憶體,並決定什麼數據可以被存儲在記憶體中。因此,變 ...
目錄
@(開發基礎)
1.變數
變數用於存儲要在電腦程式中引用和操作的信息。它們的唯一目的是在記憶體中標記和存儲數據。然後可以在整個程式中使用這些數據。變數存儲在記憶體中的值。這就意味著在創建變數時會在記憶體中開闢一個空間。
基於變數的數據類型,解釋器會分配指定記憶體,並決定什麼數據可以被存儲在記憶體中。因此,變數可以指定不同的數據類型,這些變數可以存儲整數,小數或字元。
聲明變數
name = "nepoleon"
定義變數的規則
- 變數名只能是 字母、數字或下劃線的任意組合
- 變數名的第一個字元不能是數字
- 以下關鍵字不能聲明為變數名['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
命名規則
- 駝峰式
MyName = "zzk" 每個單詞首字母大寫 - 下劃線
my_name = "zzk" 單詞用下劃線連接 - 變數名,不要為中文,拼音,或者名字過長,詞不達意等
多個變數賦值
a = b = c = 3
多個變數指定多個變數
a,b,c = 1,"tom",666
常量
常量即指不變的量,如pai 3.141592653..., 或在程式運行過程中不會改變的量
在Python中沒有一個專門的語法代表常量,程式員約定俗成用變數名全部大寫代表常量
NUMERBER = 56
在c語言中有專門的常量定義語法,const int count = 60;一旦定義為常量,更改即會報錯
2.用戶交互和註釋
程式交互
讀取用戶輸入
name = input("What is your name?")
print("My name is",name)
讓用戶輸入多個信息
name = input("What is your name?:")
age = input("Your age:")
hometown = input("Where is your hometown?")
print('''My name is %s,\nmy age is %s,\nmy hometown is %s''' %(name,age,hometown))
輸出的結果為:
My name is,zk,
my age is 22,
my hometown is anhui
註釋
代碼註釋分單行和多行註釋, 單行註釋用#,多行註釋可以用三對雙引號""" """
def subclass_exception(name, parents, module, attached_to=None):
"""
Create exception subclass. Used by ModelBase below.
If 'attached_to' is supplied, the exception will be created in a way that
allows it to be pickled, assuming the returned exception class will be added
as an attribute to the 'attached_to' class.
"""
class_dict = {'__module__': module}
if attached_to is not None:
def __reduce__(self):
# Exceptions are special - they've got state that isn't
# in self.__dict__. We assume it is all in self.args.
return (unpickle_inner_exception, (attached_to, name), self.args)
def __setstate__(self, args):
self.args = args
class_dict['__reduce__'] = __reduce__
class_dict['__setstate__'] = __setstate__
return type(name, parents, class_dict)
代碼註釋原則:
- 不用全部把代碼都註釋,只需要把重要的,或者不好理解的註釋一下
- 註釋可以是中文,英文,但不要是拼音
# 3.基本的數據類型
### 什麼是數據類型
我們人類可以很容易的分清數字與字元的區別,但是電腦並不能呀,電腦雖然很強大,但從某種角度上看又很傻,除非你明確的告訴它,1是數字,“漢”是文字,否則它是分不清1和‘漢’的區別的,因此,在每個編程語言里都會有一個叫數據類型的東東,其實就是對常用的各種數據類型進行了明確的劃分,你想讓電腦進行數值運算,你就傳數字給它,你想讓他處理文字,就傳字元串類型給他。
### 數字
#### int(整型)
在32位機器上,整數的位數為32位,取值範圍為-2^31^~ 2^31^-1,即-2147483648~2147483647
在64位系統上,整數的位數為64位,取值範圍為-2^63^~2^63^-1,即-9223372036854775808~9223372036854775807
#### long(長整型)
在Python3里不再有long類型了,全都是int
>> a = 2**64
>> type(a)
>> <class 'int'>
#### 浮點型
浮點數是屬於有理數中某特定子集的數的數字表示,在電腦中用以近似表示任意某個實數。具體的說,這個實數由一個整數或定點數(即尾數)乘以某個基數(電腦中通常是2)的整數次冪得到,這種表示方法類似於基數為10的科學計數法。
python的浮點數就是數學中的小學,(無限迴圈小數或者有限小數)
為什麼要叫做float浮點型?
浮點數也就是小數,之所以稱為浮點數,是因為按照科學記數法表示時,
一個浮點數的小數點位置是可變的,比如,
1.23109和12.3108是相等的。
浮點數可以用數學寫法,如1.23,3.14,-9.01,等等。但是對於很大或很小的浮點數,就必須用科學計數法表示,把10用e替代:
1.23*109就是1.23e9,或者12.3e8,0.000012可以寫成1.2e-5,等等。
整數和浮點數在電腦內部存儲的方式是不同的,整數運算永遠是精確的而浮點數運算則可能會有四捨五入的誤差。
複數
複數complex是由實數和虛數組成的
要瞭解複數,其實關於複數還需要先瞭解虛數。虛數(就是虛假不實的數):平方為複數的數叫做虛數。
複數是指能寫成如下形式的數a+bi,這裡a和b是實數,i是虛數單位(即-1開根)。在複數a+bi中,a稱為複數的實部,b稱為複數的虛部(虛數是指平方為負數的數),i稱為虛數單位。
當虛部等於零時,這個複數就是實數;當虛部不等於零時,這個複數稱為虛數。
註,虛數部分的字母j大小寫都可以。
字元串
字元串是有有序的,不可變的
在python中加了引號的都認為是字元串
name = "nep" # 雙引號
age = "22" # 字元串
n_age = 22 # int
hometown = ''' Anhui ''' #三引號
job = 'vfx' # 單引號
單引號,雙引號沒有區別,多行註釋必須用三引號
轉譯
字元串的單引號和雙引號都無法取消特殊字元的含義,如果想讓引號內所有字元均取消特殊意義,在引號前面加r,如name=r'l\thf'
unicode字元串與r連用必需在r前面,如name=ur'l\thf'
字元串的操作
s = "hello word"
#索引
s = 'hello'
>>> s[1]
'e'
>>> s[-1]
'o'
#切片
>>> s = 'abcdefghigklmn'
>>> s[0:7]
'abcdefg'
>>> s[7:14]
'higklmn'
>>> s[:7]
'abcdefg'
>>> s[7:]
'higklmn'
>>> s[:]
'abcdefghigklmn'
>>> s[0:7:2]
'aceg'
>>> s[7:14:3]
'hkn'
>>> s[::2]
'acegikm'
>>> s[::-1]
'nmlkgihgfedcba'
len(s) # 字元串的長度
s.swapcase() # 大小寫互換
s.capitalize() # 首字母大寫
s.casefold() #全部統一都是小寫
s.center() # 居中顯示 例如 print(s.center(30,"#"))
s.count() # 統計某個字元的個數,空格也算是一個字元, s.count("o",0,5) 0-5之間"o"的個數。
s.endswith() # 判斷以什麼結尾,返回 True/False
s.strip() #去掉字元串的空格
s.lstrip() # 去掉左側空格
s.rstrip() #去掉右側的空格
isdigit() #判斷是否是數字
s.title() # 每個單詞的首字母大寫
islower() #判斷是否是全部小寫
isupper() #判斷是否是全部大寫
lower() #全部轉換為小寫
upper() #全部轉換為大寫
isspace() #判斷是否是全都是空格
istitle() #判斷是否是標題(首字母大寫)
expandtabs() 擴展tab鍵,前提是字元串里有tab鍵
a = "a\tb\tc" # \t 就是tab鍵
print(a.expandtabs(8)) # 每個字元之間8個空格
find() 查找字元的索引位置,如果是負數,代表查找失敗,find()也可以查起始
s = "Hello,word"
s.find("o",0,5)
index() 返回索引值 與find()的區別
s.index("a") # a 不在 字元串s裡面,返回報錯,find()沒有不會報錯,輸出-1
format() 字元串格式化
s14 = "my name is {0},i am {1} years old"
s14.format("Tom",23)
# 還可以這樣
s15 = "my name is {name},i am {years} years old"
s15.format(name = "zk","years" = 22)
join() 接兩個字元串
a = "-"
name = ["tom","san","kite"]
s = "abcde"
print(a.join(name)) # 輸出 tom-san-kite
print(a.join(s)) # a-b-c-d-e
ljust() 左側開始對齊到多少位
s = "hello word"
s.ljust(30,"-") # 左往右 30個字元,後面都是 -
replace() 替換字元
a = "hello word"
a.replace("o","-") # 全部替換 o
a.replace("o","-",1) # 給第一個 o 替換
split() 分割,返回列表。
布爾型(bool)
布爾類型很簡單,就兩個值 ,一個True(真),一個False(假), 主要用記邏輯判斷
a = 3
b =5
a < b # 成立 就是True
True
a > b # 不成立就是 False
False
bool型只有兩個值:True和False
之所以將bool值歸類為數字,是因為我們也習慣用1表示True,0表示False。
格式化輸出
以下為不同方法的格式化
- input做用戶輸入, +連接2個字元串
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author: Nepoleon Chou
name = input ("name:")
age = input("age:")
job = input("job:")
info = '''
--------------info of '''+ name +''''-----------------
Name: ''' + name + '''
Age: ''' + age + '''
Job:''' + job
print(info)
- 上面寫法太繁瑣,我們可以用%s,%d做格式化輸出,可以這些寫:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author: Nepoleon Chou
# 格式化輸出 %s s代表string
# %d 代表只能輸入數字 %f 浮點
name = input ("name:")
age = int(input("age:"))
job = input("job:")
salary = input("salary:")
info = '''
--------------info of %s-----------------
Name: %s
Age: %d
job: %s
Salary: %s
'''% (name,name,age,job,salary)
print(info)
- 還可以用.format來格式化輸出,以後用的比較多:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author: Nepoleon Chou
name = input ("name:")
age = int(input("age:"))
job = input("job:")
salary = input("salary:")
info2 = '''
----------------info of {_name}------------
Name = {_name}
Age = {_age}
job = {_job}
Salary = {_salary}
''' .format(_name=name,
_age=age,
_job=job,
_salary=salary)
print(info2)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author: Nepoleon Chou
name = input ("name:")
age = int(input("age:"))
job = input("job:")
salary = input("salary:")
info3 = '''
---------------info of {0}----------
Name = {0}
Age = {1}
Job = {2}
Salary = {3}
''' .format(name,age,job,salary)
print(info3)
運算符
電腦可以進行的運算有很多種,可不只加減乘除這麼簡單,運算按種類可分為算數運算、比較運算、邏輯運算、賦值運算、成員運算、身份運算、位運算,今天我們暫只學習算數運算、比較運算、邏輯運算、賦值運算
算術運算
比較運算符
賦值運算:
邏輯運算
身份運算
while 迴圈
Python 編程中 while 語句用於迴圈執行程式,即在某條件下,迴圈執行某段程式,以處理需要重覆處理的相同任務。
執行語句可以是單個語句或語句塊。判斷條件可以是任何表達式,任何非零、或非空(null)的值均為true。
當判斷條件假false時,迴圈結束。
使用while猜年齡:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author: Nepoleon Chou
# 猜年齡 只能猜3次,3次之後就退出
Age_of_Nepoleon = 24
count = 0 #0開始計數
while True: #當條件滿足
if count == 3: #如果輸入3次
break
count += 1
guess_age = int(input("Age_of_Nepoleon:"))
if guess_age == Age_of_Nepoleon:
print("yes,You are Right!")
break
elif guess_age > Age_of_Nepoleon:
print("No,it's too bigger")
else:
print("No,it's too smaller")
優化以上代碼:
Age_of_Nepoleon = 24
count = 0
while count<3:
count += 1
guess_age = int(input("Age_of_Nepoleon:"))
if guess_age == Age_of_Nepoleon:
print("yes,You are Right!")
break
elif guess_age > Age_of_Nepoleon:
print("No,it's too bigger")
else:
print("No,it's too smaller")
else:
print("you have tried much time...breakDown")
while 語句時還有另外兩個重要的命令 continue,break 來跳過迴圈,continue 用於跳過該次迴圈,break 則是用於退出迴圈,此外"判斷條件"還可以是個常值,表示迴圈必定成立,具體用法如下:
# continue 和 break 用法
i = 1
while i < 10:
i += 1
if i%2 > 0: # 非雙數時跳過輸出
continue
print i # 輸出雙數2、4、6、8、10
i = 1
while 1: # 迴圈條件為1必定成立
print i # 輸出1~10
i += 1
if i > 10: # 當i大於10時跳出迴圈
break
無限死迴圈
如果條件判斷語句永遠為 true,迴圈將會無限的執行下去,如下實例:
#!/usr/bin/env python
count = 0
while True:
print("你好",count)
count+=1
for 迴圈
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author: Nepoleon Chou
for i in range(0,10,2): #每2個輸出一個
print("loop",i)
continue ,break來跳過迴圈,continue是跳過本次迴圈,berak結束所有的迴圈。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author: Nepoleon Chou
for i in range(0,10): #每2個輸出一個
if i <7:
continue #遇到小於7的直接跳過去
elif i == 9:
break #等於9的時候跳出迴圈
print("loop",i)
if...else
if 條件:
滿足條件執行代碼
elif 條件:
上面的條件不滿足就走這個
elif 條件:
上面的條件不滿足就走這個
elif 條件:
上面的條件不滿足就走這個
else:
上面所有的條件不滿足就走這段
輸入密碼時,如果想要不可見,需要利用getpass 模塊中的 getpass方法,即:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author: Nepoleon Chou
import getpass
# 密文模塊
username = input('username:')
password = getpass.getpass('password:') #密文
#password = input('password:') #明文
_username = 'Nepoleon'
_password = '1234'
if _username == username and _password == password: #如果輸出的用戶名和密碼跟用戶設置的用戶名和密碼匹配
print('Welcome user {name} login...' .format(name=username))
else:
print('Invalid username or password!')
print(username,password)