py_while循環及基本運算符


一、字符串的格式化輸出

現有一練習需求,問用戶的姓名、年齡、工作、愛好 ,然后打印成以下格式
'''
------------ info of Alex Li -----------
Name  : Alex Li
Age   : 22
job   : Teacher
Hobbie: girl
------------- end -----------------
'''

只需要把要打印的格式先准備好, 由於里面的 一些信息是需要用戶輸入的,你沒辦法預設知道,因此可以先放置個占位符,再把字符串里的占位符與外部的變量做個映射關系就好啦

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,就代表你必須只能輸入數字啦

msg = "我是%s,年齡%d,目前學習進度為80%"%('金鑫',18)
print(msg)

這樣會報錯的,因為在格式化輸出里,你出現%默認為就是占位符的%,但是我想在上面一條語句中最后的80%就是表示80%而不是占位符,怎么辦?

msg = "我是%s,年齡%d,目前學習進度為80%%"%('金鑫',18)
print(msg)

這樣就可以了,第一個%是對第二個%的轉譯,告訴Python解釋器這只是一個單純的%,而不是占位符。

二、流程控制之while循環

程序中重復的做之前的事情,輸入賬號,密碼,等操作。

1、基本循環:

while 條件:
    循環體

例如:
sum = 0
while sum < 5:      # 1、條件成立
    print(666)      # 2、進入循環體,由於條件一直成立,所以進入無線循環

# 條件成立則進入循環體

上述例子由於sum = 0 始終小於5,所以進入死循環,那么要想終止循環我們應該怎么做呢?

2、如何終止循環

  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

3、continue語句:終止本次循環進入下一循環

sum = 0
while sum < 10:
    sum += 1
    if 3 < sum <8: # 如果3<sum<8則終止本次循環,不執行后面的語句,直接進行下一次循環
        continue
    print(sum)

1
2
3
8
9
10

4、while...else...

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

 

三、基本運算符

運算符

  計算機可以進行的運算有很多種,可不只加減乘除這么簡單,運算按種類可分為算數運算、比較運算、邏輯運算、賦值運算、成員運算、身份運算、位運算,今天我們暫只學習算數運算、比較運算、邏輯運算、賦值運算、成員運算

算數運算

以下假設變量:a=10,b=20

比較運算

以下假設變量:a=10,b=20

字符串進行比較的話,使用的是字符對應的ascii碼值。

賦值運算

以下假設變量:a=10,b=20

邏輯運算

 

針對邏輯運算的進一步研究:

1、   在沒有()的情況下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

三、編碼初識

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碼無法表示中文

#!/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

......

 作業:

1、 利⽤while語句寫出猜⼤⼩的游戲: 設定⼀個理想數字⽐如:66,讓⽤戶輸⼊數字,如果⽐66⼤,則顯示猜測的結果⼤ 了;如果⽐66⼩,則顯示猜測的結果⼩了;只有等於66,顯示猜測結果正確,然后退出 循環。

2、 給⽤戶三次猜測機會,如果三次之內猜測對了,則顯示猜測正確,退出循環,如果 三次之內沒有猜測正確,則⾃動退出循環,並顯示‘太笨了你....’。

3、 使⽤while循環輸出 1 2 3 4 5 6 8 9 10

4、 求1-100的所有數的和

5、 輸出 1-100 內的所有奇數

6、 輸出 1-100 內的所有偶數

7、 求1-2+3-4+5 ... 99的所有數的和

8、 ⽤戶登陸(三次輸錯機會)且每次輸錯誤時顯示剩余錯誤次數(提示:使⽤字符串格 式化)

9、用戶輸入一個數,判斷這個數是否是質數!(注意質數只能被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('這是質數')
答案

 

 

 


免責聲明!

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



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