基礎【二】while循環及基本運算符

py_while循環及基本運算符

 

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

  1. 改變條件
  2. break語句,用於徹底結束一個循環,跳出循環體執行循環後面的語句
  3. 調用系統命令: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('這是質數')

答案
View Code
相關文章
相關標籤/搜索