1、字符串的格式化輸出
現有一練習需求,問用戶的姓名、年齡、工做、愛好 ,而後打印成如下格式
''' ------------ info of Alex Li ----------- Name : Alex Li Age : 22 job : Teacher Hobbie: girl ------------- end ----------------- '''
只須要把要打印的格式先準備好, 因爲裏面的 一些信息是須要用戶輸入的,你沒辦法預設知道,所以能夠先放置個佔位符,再把字符串裏的佔位符與外部的變量作個映射關係就好啦html
name = input('請輸入姓名:') age = input('請輸入年齡:') job = input('請輸入職業:') hobbie = input('請輸入愛好:') msg = ''' ------------ info of %s ----------- Name : %s Age : %s job : %s Hobbie: %s ------------- end ----------------- '''%(name,name,age,job,hobbie) print(msg) ------------ info of 煙雨江南 ----------- Name : 煙雨江南 Age : 18 job : 做者 Hobbie: 寫書 ------------- end -----------------
%s就是表明字符串佔位符,除此以外,還有%d,是數字佔位符, 若是把上面的age後面的換成%d,就表明你必須只能輸入數字啦python
msg = "我是%s,年齡%d,目前學習進度爲80%"%('金鑫',18) print(msg)
這樣會報錯的,由於在格式化輸出裏,你出現%默認爲就是佔位符的%,可是我想在上面一條語句中最後的80%就是表示80%而不是佔位符,怎麼辦?ide
msg = "我是%s,年齡%d,目前學習進度爲80%%"%('金鑫',18) print(msg)
這樣就能夠了,第一個%是對第二個%的轉譯,告訴Python解釋器這只是一個單純的%,而不是佔位符。post
2、流程控制之while循環
程序中重複的作以前的事情,輸入帳號,密碼,等操做。學習
一、基本循環:測試
while 條件: 循環體 例如: sum = 0 while sum < 5: # 一、條件成立 print(666) # 二、進入循環體,因爲條件一直成立,因此進入無線循環 # 條件成立則進入循環體
上述例子因爲sum = 0 始終小於5,因此進入死循環,那麼要想終止循環咱們應該怎麼作呢?優化
二、如何終止循環ui
- 改變條件
- break語句,用於徹底結束一個循環,跳出循環體執行循環後面的語句
- 調用系統命令:quit() exit() ------>不建議使用
sum = 0 while sum < 5: print(666) sum = sum + 1 # 第一次循環,0<5條件成立,進入循環體,打印666,0+1賦值給sum,sum = 1,進行條件判斷,1<5條件成立進入第二次循環以此類推...... 666 666 666 666 666 ----------------------------------------------------------------------------------------- sum = 0 while sum < 5: print(666) break print('hello world') # 見到brek語句當即終止循環,執行循環後面的語句 666 hello world
三、continue語句:終止本次循環進入下一循環編碼
sum = 0 while sum < 10: sum += 1 if 3 < sum <8: # 若是3<sum<8則終止本次循環,不執行後面的語句,直接進行下一次循環 continue print(sum) 1 2 3 8 9 10
四、while...else...url
while 後面的else 做用是指,當while 循環正常執行完,中間沒有被break 停止的話,就會執行else後面的語句
循環正常結束: sum = 0 while sum < 10: sum += 1 if 3 < sum <8: continue print(sum) else: print('打印完成') 1 2 3 8 9 10 打印完成 ------------------------------------------------------- 當break出現終止循環時 sum = 0 while sum < 10: sum += 1 if 5 < sum : break print(sum) else: print('打印完成') 1 2 3 4 5
3、基本運算符
運算符
計算機能夠進行的運算有不少種,可不僅加減乘除這麼簡單,運算按種類可分爲算數運算、比較運算、邏輯運算、賦值運算、成員運算、身份運算、位運算,今天咱們暫只學習算數運算、比較運算、邏輯運算、賦值運算、成員運算
算數運算
如下假設變量:a=10,b=20
比較運算
如下假設變量:a=10,b=20
字符串進行比較的話,使用的是字符對應的ascii碼值。
賦值運算
如下假設變量:a=10,b=20
邏輯運算
針對邏輯運算的進一步研究:
一、 在沒有()的狀況下not 優先級高於 and,and優先級高於or,即優先級關係爲( )>not>and>or,同一優先級從左往右計算。
2 、 x or y , x爲真,值就是x,x爲假,值是y;
x and y, x爲真,值是y,x爲假,值是x;
例如:
1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 邏輯運算符的結果究竟是什麼類型??? 結果取決於兩個操做數的類型!!! 針對and操做:第一個操做數若是是能夠轉成False的話,那麼第一個操做數的值,就是整個邏輯表達式的值。 若是第一個操做數能夠轉成True,第二個操做數的值就是整個表達式的值。 針對or操做:第一個操做數若是是能夠轉成False的話,第二個操做數的值就是整個表達式的值。 若是第一個操做數能夠轉成True, 第一個操做數的值,就是整個邏輯表達式的值。
邏輯運算符規則和短路操做
成員運算:
除了以上的一些運算符以外,Python還支持成員運算符,測試實例中包含了一系列的成員,包括字符串,列表或元組。
判斷子元素是否在原字符串(字典,列表,集合)中:
例如:
#print('喜歡' in 'dkfljadklf喜歡hfjdkas') #print('a' in 'bcvd') #print('y' not in 'ofkjdslaf')
Python運算符優先級
如下表格列出了從最高到最低優先級的全部運算符:
運算符 | 描述 |
---|---|
** | 指數 (最高優先級) |
~ + - | 按位翻轉, 一元加號和減號 (最後兩個的方法名爲 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法減法 |
>> << | 右移,左移運算符 |
& | 位 'AND' |
^ | | 位運算符 |
<= < > >= | 比較運算符 |
<> == != | 等於運算符 |
= %= /= //= -= += *= **= | 賦值運算符 |
is is not | 身份運算符 |
in not in | 成員運算符 |
not and or | 邏輯運算符 |
身份運算符
身份運算符用於比較兩個對象的存儲單元
# 判斷兩個標識符是否是引用同一個對象或不一樣對象,返回布爾值 a = "煙雨江南" b =a print(b is a) # 相似id(b) = id(a) print(a is b) # 相似id(a) = id(b
3、編碼初識
ASCII碼的由來:
在計算機中,全部的數據在存儲和運算時都要使用二進制數表示(由於計算機用高電平和低電平分別表示1和0),例如,像a、b、c、d這樣的52個字母(包括大寫)以及0、1等數字還有一些經常使用的符號(例如*、#、@等)在計算機中存儲時也要使用二進制數來表示,而具體用哪些二進制數字表示哪一個符號,固然每一個人均可以約定本身的一套(這就叫編碼),而你們若是要想互相通訊而不形成混亂,那麼你們就必須使用相同的編碼規則,因而美國有關的標準化組織就出臺了ASCII編碼,統一規定了上述經常使用符號用哪些二進制數來表示。
ASCII 碼使用指定的7 位或8 位二進制數組合來表示128 或256 種可能的字符。
python2解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),而python3對內容進行編碼的默認爲utf-8。
ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256,因此,ASCII碼最多隻能表示 256 個符號。
ASCII標準表:
Bin
(二進制)
|
Oct
(八進制)
|
Dec
(十進制)
|
Hex
(十六進制)
|
縮寫/字符
|
解釋
|
0000 0000
|
00
|
0
|
0x00
|
NUL(null)
|
空字符
|
0000 0001
|
01
|
1
|
0x01
|
SOH(start of headline)
|
標題開始
|
0000 0010
|
02
|
2
|
0x02
|
STX (start of text)
|
正文開始
|
0000 0011
|
03
|
3
|
0x03
|
ETX (end of text)
|
正文結束
|
0000 0100
|
04
|
4
|
0x04
|
EOT (end of transmission)
|
傳輸結束
|
0000 0101
|
05
|
5
|
0x05
|
ENQ (enquiry)
|
請求
|
0000 0110
|
06
|
6
|
0x06
|
ACK (acknowledge)
|
收到通知
|
0000 0111
|
07
|
7
|
0x07
|
BEL (bell)
|
響鈴
|
0000 1000
|
010
|
8
|
0x08
|
BS (backspace)
|
退格
|
0000 1001
|
011
|
9
|
0x09
|
HT (horizontal tab)
|
水平製表符
|
0000 1010
|
012
|
10
|
0x0A
|
LF (NL line feed, new line)
|
換行鍵
|
0000 1011
|
013
|
11
|
0x0B
|
VT (vertical tab)
|
垂直製表符
|
0000 1100
|
014
|
12
|
0x0C
|
FF (NP form feed, new page)
|
換頁鍵
|
0000 1101
|
015
|
13
|
0x0D
|
CR (carriage return)
|
回車鍵
|
0000 1110
|
016
|
14
|
0x0E
|
SO (shift out)
|
不用切換
|
0000 1111
|
017
|
15
|
0x0F
|
SI (shift in)
|
啓用切換
|
0001 0000
|
020
|
16
|
0x10
|
DLE (data link escape)
|
數據鏈路轉義
|
0001 0001
|
021
|
17
|
0x11
|
DC1 (device control 1)
|
設備控制1
|
0001 0010
|
022
|
18
|
0x12
|
DC2 (device control 2)
|
設備控制2
|
0001 0011
|
023
|
19
|
0x13
|
DC3 (device control 3)
|
設備控制3
|
0001 0100
|
024
|
20
|
0x14
|
DC4 (device control 4)
|
設備控制4
|
0001 0101
|
025
|
21
|
0x15
|
NAK (negative acknowledge)
|
拒絕接收
|
0001 0110
|
026
|
22
|
0x16
|
SYN (synchronous idle)
|
同步空閒
|
0001 0111
|
027
|
23
|
0x17
|
ETB (end of trans. block)
|
結束傳輸塊
|
0001 1000
|
030
|
24
|
0x18
|
CAN (cancel)
|
取消
|
0001 1001
|
031
|
25
|
0x19
|
EM (end of medium)
|
媒介結束
|
0001 1010
|
032
|
26
|
0x1A
|
SUB (substitute)
|
代替
|
0001 1011
|
033
|
27
|
0x1B
|
ESC (escape)
|
換碼(溢出)
|
0001 1100
|
034
|
28
|
0x1C
|
FS (file separator)
|
文件分隔符
|
0001 1101
|
035
|
29
|
0x1D
|
GS (group separator)
|
分組符
|
0001 1110
|
036
|
30
|
0x1E
|
RS (record separator)
|
記錄分隔符
|
0001 1111
|
037
|
31
|
0x1F
|
US (unit separator)
|
單元分隔符
|
0010 0000
|
040
|
32
|
0x20
|
(space)
|
空格
|
0010 0001
|
041
|
33
|
0x21
|
!
|
歎號 |
0010 0010
|
042
|
34
|
0x22
|
"
|
雙引號 |
0010 0011
|
043
|
35
|
0x23
|
#
|
井號 |
0010 0100
|
044
|
36
|
0x24
|
$
|
美圓符 |
0010 0101
|
045
|
37
|
0x25
|
%
|
百分號 |
0010 0110
|
046
|
38
|
0x26
|
&
|
和號 |
0010 0111
|
047
|
39
|
0x27
|
'
|
閉單引號 |
0010 1000
|
050
|
40
|
0x28
|
(
|
開括號
|
0010 1001
|
051
|
41
|
0x29
|
)
|
閉括號
|
0010 1010
|
052
|
42
|
0x2A
|
*
|
星號 |
0010 1011
|
053
|
43
|
0x2B
|
+
|
加號 |
0010 1100
|
054
|
44
|
0x2C
|
,
|
逗號 |
0010 1101
|
055
|
45
|
0x2D
|
-
|
減號/破折號 |
0010 1110
|
056
|
46
|
0x2E
|
.
|
句號 |
0010 1111
|
057
|
47
|
0x2F
|
/
|
斜槓 |
0011 0000
|
060
|
48
|
0x30
|
0
|
數字0 |
0011 0001
|
061
|
49
|
0x31
|
1
|
數字1 |
0011 0010
|
062
|
50
|
0x32
|
2
|
數字2 |
0011 0011
|
063
|
51
|
0x33
|
3
|
數字3 |
0011 0100
|
064
|
52
|
0x34
|
4
|
數字4 |
0011 0101
|
065
|
53
|
0x35
|
5
|
數字5 |
0011 0110
|
066
|
54
|
0x36
|
6
|
數字6 |
0011 0111
|
067
|
55
|
0x37
|
7
|
數字7 |
0011 1000
|
070
|
56
|
0x38
|
8
|
數字8 |
0011 1001
|
071
|
57
|
0x39
|
9
|
數字9 |
0011 1010
|
072
|
58
|
0x3A
|
:
|
冒號 |
0011 1011
|
073
|
59
|
0x3B
|
;
|
分號 |
0011 1100
|
074
|
60
|
0x3C
|
<
|
小於 |
0011 1101
|
075
|
61
|
0x3D
|
=
|
等號 |
0011 1110
|
076
|
62
|
0x3E
|
>
|
大於 |
0011 1111
|
077
|
63
|
0x3F
|
?
|
問號 |
0100 0000
|
0100
|
64
|
0x40
|
@
|
電子郵件符號 |
0100 0001
|
0101
|
65
|
0x41
|
A
|
大寫字母A |
0100 0010
|
0102
|
66
|
0x42
|
B
|
大寫字母B |
0100 0011
|
0103
|
67
|
0x43
|
C
|
大寫字母C |
0100 0100
|
0104
|
68
|
0x44
|
D
|
大寫字母D |
0100 0101
|
0105
|
69
|
0x45
|
E
|
大寫字母E |
0100 0110
|
0106
|
70
|
0x46
|
F
|
大寫字母F |
0100 0111
|
0107
|
71
|
0x47
|
G
|
大寫字母G |
0100 1000
|
0110
|
72
|
0x48
|
H
|
大寫字母H |
0100 1001
|
0111
|
73
|
0x49
|
I
|
大寫字母I |
01001010
|
0112
|
74
|
0x4A
|
J
|
大寫字母J |
0100 1011
|
0113
|
75
|
0x4B
|
K
|
大寫字母K |
0100 1100
|
0114
|
76
|
0x4C
|
L
|
大寫字母L |
0100 1101
|
0115
|
77
|
0x4D
|
M
|
大寫字母M |
0100 1110
|
0116
|
78
|
0x4E
|
N
|
大寫字母N |
0100 1111
|
0117
|
79
|
0x4F
|
O
|
大寫字母O |
0101 0000
|
0120
|
80
|
0x50
|
P
|
大寫字母P |
0101 0001
|
0121
|
81
|
0x51
|
Q
|
大寫字母Q |
0101 0010
|
0122
|
82
|
0x52
|
R
|
大寫字母R |
0101 0011
|
0123
|
83
|
0x53
|
S
|
大寫字母S |
0101 0100
|
0124
|
84
|
0x54
|
T
|
大寫字母T |
0101 0101
|
0125
|
85
|
0x55
|
U
|
大寫字母U |
0101 0110
|
0126
|
86
|
0x56
|
V
|
大寫字母V |
0101 0111
|
0127
|
87
|
0x57
|
W
|
大寫字母W |
0101 1000
|
0130
|
88
|
0x58
|
X
|
大寫字母X |
0101 1001
|
0131
|
89
|
0x59
|
Y
|
大寫字母Y |
0101 1010
|
0132
|
90
|
0x5A
|
Z
|
大寫字母Z |
0101 1011
|
0133
|
91
|
0x5B
|
[
|
開方括號 |
0101 1100
|
0134
|
92
|
0x5C
|
\
|
反斜槓 |
0101 1101
|
0135
|
93
|
0x5D
|
]
|
閉方括號 |
0101 1110
|
0136
|
94
|
0x5E
|
^
|
脫字符 |
0101 1111
|
0137
|
95
|
0x5F
|
_
|
下劃線 |
0110 0000
|
0140
|
96
|
0x60
|
`
|
開單引號 |
0110 0001
|
0141
|
97
|
0x61
|
a
|
小寫字母a |
0110 0010
|
0142
|
98
|
0x62
|
b
|
小寫字母b |
0110 0011
|
0143
|
99
|
0x63
|
c
|
小寫字母c |
0110 0100
|
0144
|
100
|
0x64
|
d
|
小寫字母d |
0110 0101
|
0145
|
101
|
0x65
|
e
|
小寫字母e |
0110 0110
|
0146
|
102
|
0x66
|
f
|
小寫字母f |
0110 0111
|
0147
|
103
|
0x67
|
g
|
小寫字母g |
0110 1000
|
0150
|
104
|
0x68
|
h
|
小寫字母h |
0110 1001
|
0151
|
105
|
0x69
|
i
|
小寫字母i |
0110 1010
|
0152
|
106
|
0x6A
|
j
|
小寫字母j |
0110 1011
|
0153
|
107
|
0x6B
|
k
|
小寫字母k |
0110 1100
|
0154
|
108
|
0x6C
|
l
|
小寫字母l |
0110 1101
|
0155
|
109
|
0x6D
|
m
|
小寫字母m |
0110 1110
|
0156
|
110
|
0x6E
|
n
|
小寫字母n |
0110 1111
|
0157
|
111
|
0x6F
|
o
|
小寫字母o |
0111 0000
|
0160
|
112
|
0x70
|
p
|
小寫字母p |
0111 0001
|
0161
|
113
|
0x71
|
q
|
小寫字母q |
0111 0010
|
0162
|
114
|
0x72
|
r
|
小寫字母r |
0111 0011
|
0163
|
115
|
0x73
|
s
|
小寫字母s |
0111 0100
|
0164
|
116
|
0x74
|
t
|
小寫字母t |
0111 0101
|
0165
|
117
|
0x75
|
u
|
小寫字母u |
0111 0110
|
0166
|
118
|
0x76
|
v
|
小寫字母v |
0111 0111
|
0167
|
119
|
0x77
|
w
|
小寫字母w |
0111 1000
|
0170
|
120
|
0x78
|
x
|
小寫字母x |
0111 1001
|
0171
|
121
|
0x79
|
y
|
小寫字母y |
0111 1010
|
0172
|
122
|
0x7A
|
z
|
小寫字母z |
0111 1011
|
0173
|
123
|
0x7B
|
{
|
開花括號 |
0111 1100
|
0174
|
124
|
0x7C
|
|
|
垂線 |
0111 1101
|
0175
|
125
|
0x7D
|
}
|
閉花括號 |
0111 1110
|
0176
|
126
|
0x7E
|
~
|
波浪號 |
0111 1111
|
0177
|
127
|
0x7F
|
DEL (delete)
|
刪除
|
顯然ASCII碼沒法將世界上的各類文字和符號所有表示,因此,就須要新出一種能夠表明全部字符和符號的編碼,即:Unicode
Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,
注:此處說的的是最少2個字節,可能更多
UTF-8,是對Unicode編碼的壓縮和優化,他再也不使用最少使用2個字節,而是將全部的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...
因此,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),若是是以下代碼的話:
報錯:ascii碼沒法表示中文
1
2
3
4
5
6
7
8
9
10
|
#!/usr/bin/env python
print
"你好,世界"
改正:應該顯示的告訴python解釋器,用什麼編碼來執行源代碼,即:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print
"你好,世界"
|
編碼總結
'''
----編碼----
計算機的最小存儲單位bit,8bit=1字節(bytes)
ASCII:8bit--->1bytes
unicode:32bit---->4bytes 不管表示中文英文都是4個字節
GBK:16bit---->2bytes 表示英文用1個字節
utf-8: 表示英文用一個字節
英文:8bit--->1bytes
歐洲:16bit---->2bytes
中國:24bit---->3bytes
'''
二進制:
好比:
一個空格對應的數字是0 , 翻譯成二進制就是0(注意字符'o'和整數0是不一樣的)
一個對勾√對應的而數字是251, 翻譯成二進制就是11111011
提問:假如咱們要打印兩個空格一個對勾 ,寫做二進制就是應該是0011111011,可是問題來了,咱們怎麼知道從哪到哪是一個字符呢?
因此把全部的二進制數都轉換成8位的,不足的用0替換,這樣一來剛剛的兩個空格一個對勾九寫做00000000-00000000-11111011,讀取的時候只要每次讀取8個字符就能知道每一個字符的二進制了。
在這裏每一位0或者1所佔的空間單位爲bit(比特),是計算機中最小的表示單位,每8個bit組成一個字符
bit 位 計算機中最小的表示單位
8bit = 1bytes 字節 最小的存儲單位 ,1bytes 縮寫爲 1B
1K = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
......
做業:
一、 利⽤while語句寫出猜⼤⼩的遊戲: 設定⼀個理想數字⽐如:66,讓⽤戶輸⼊數字,若是⽐66⼤,則顯示猜想的結果⼤ 了;若是⽐66⼩,則顯示猜想的結果⼩了;只有等於66,顯示猜想結果正確,而後退出 循環。
二、 給⽤戶三次猜想機會,若是三次以內猜想對了,則顯示猜想正確,退出循環,若是 三次以內沒有猜想正確,則⾃動退出循環,並顯示‘太笨了你....’。
三、 使⽤while循環輸出 1 2 3 4 5 6 8 9 10
四、 求1-100的全部數的和
五、 輸出 1-100 內的全部奇數
六、 輸出 1-100 內的全部偶數
七、 求1-2+3-4+5 ... 99的全部數的和
八、 ⽤戶登錄(三次輸錯機會)且每次輸錯誤時顯示剩餘錯誤次數(提示:使⽤字符串格 式化)
九、用戶輸入一個數,判斷這個數是不是質數!(注意質數只能被1和他自己整除,2是惟一一個偶數的質數)
從第二題開始: ran = 66 func = 1 while func < 4: num = int(input('請輸入:')) if num == ran: print('ok') break elif func == 3: print('你太笨了') break elif num > ran: print('大了') elif num < ran: print('小了') func += 1 --------------------------- msg = 0 while msg < 10: msg += 1 if msg == 7: continue print(msg) --------------------------- x = 1 y = 0 while x < 101: y += x x += 1 print(y) --------------------------- a = 1 while a < 101: print(a) a += 2 --------------------------- a = 2 while a < 101: print(a) a += 2 --------------------------- sum = 0 count = 1 while count < 100: if count %2 ==0: sum -= count else: sum += count count = count + 1 print(sum) -------------------------- # 升級版登陸驗證一 USERNAME = 'seven' PASSWD= '123' flag = 1 while flag < 4: username = input('請輸入用戶名:') passwd = input('請輸入密碼:') if username == USERNAME and passwd: print('登陸成功,歡迎您進入京東商城!') break else: print('用戶名或密碼錯誤,請從新輸入!剩餘%s次'%(3-flag)) flag += 1 # 升級版登陸驗證二 USERNAME = ['seven','alex'] PASSWD= '123' flag = 1 while flag < 4: username = input('請輸入用戶名:') passwd = input('請輸入密碼:') if username in USERNAME and passwd == PASSWD: print('登陸成功,歡迎您進入京東商城!') break else: print('用戶名或密碼錯誤,請從新輸入!剩餘%s次'%(3-flag)) flag += 1 -------------------------------------------------------------------- msg = int(input('請輸入一個數字:')) if msg <= 1: print('這不是質數!') elif msg == 2: print('這是質數!') else: i = 2 while i < msg: if msg % i == 0: print('這不是質數!') break i += 1 #例如輸入21,計算機不知道21能不能被21以前的全部數字整除,因此須要用21將21以前的全部數字都除一遍 else: print('這是質數') 答案