1. 双向循环的练习
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
|
# 1.用两个循环完成十行十列的小星星 j = 0 while j < 10 : # 打印星星 i = 0 while i < 10 : print ( "*" ,end = "") i + = 1 # 打印换行 print () j + = 1 # 2.用两个循环完成十行十列隔列换色的小星星 """ ☆★☆★☆★☆★☆★ ☆★☆★☆★☆★☆★ ☆★☆★☆★☆★☆★ ☆★☆★☆★☆★☆★ ☆★☆★☆★☆★☆★ ☆★☆★☆★☆★☆★ ☆★☆★☆★☆★☆★ ☆★☆★☆★☆★☆★ ☆★☆★☆★☆★☆★ ☆★☆★☆★☆★☆★ """ i = 0 while i < 10 : # 打印一行黑白相间的星星 j = 0 while j < 10 : if j % 2 = = 0 : print ( "☆" ,end = "") else : print ( "★" ,end = "") j + = 1 # 打印换行 print () i + = 1 # 3.用两个循环完成十行十列隔行换色的小星星 """ ★★★★★★★★★★ ☆☆☆☆☆☆☆☆☆☆ ★★★★★★★★★★ ☆☆☆☆☆☆☆☆☆☆ ★★★★★★★★★★ ☆☆☆☆☆☆☆☆☆☆ ★★★★★★★★★★ ☆☆☆☆☆☆☆☆☆☆ ★★★★★★★★★★ ☆☆☆☆☆☆☆☆☆☆ """ """ 外层的循环i动的慢 内层的循环j动的快 外层的i动一次, 内层的循环动10次 """ i = 0 while i < 10 : j = 0 while j < 10 : if i % 2 = = 0 : print ( "☆" ,end = "") else : print ( "★" ,end = "") j + = 1 print () i + = 1 # 4.99乘法表 # 方向一 i = 1 while i < = 9 : # 打印对应的表达式 j = 1 while j < = i: print ( "%d*%d=%2d " % (i,j,i * j) ,end = "" ) j + = 1 # 打印换行 print () i + = 1 # 方向二 i = 9 while i > = 1 : # 打印对应的表达式 j = 1 while j < = i: print ( "%d*%d=%2d " % (i,j,i * j) ,end = "" ) j + = 1 # 打印换行 print () i - = 1 print ( "<====================>" ) # 方向三 i = 1 while i < = 9 : kongge = 9 - i # 打印空格 while kongge > 0 : print ( " " ,end = "") kongge - = 1 # 打印表达式 j = 1 while j < = i: print ( "%d*%d=%2d " % (i,j,i * j) ,end = "" ) j + = 1 # 换行 print () i + = 1 print ( "<===============>" ) # 方向四 i = 9 while i > = 1 : kongge = 9 - i # 打印空格 while kongge > 0 : print ( " " ,end = "") kongge - = 1 # 打印表达式 j = 1 while j < = i: print ( "%d*%d=%2d " % (i,j,i * j) ,end = "" ) j + = 1 # 打印换行 print () i - = 1 # 求吉利数字 100 ~ 999 之间 找 111 222 333 123 456 654 321 ... """ // 可以获取一个数高位 % 可以获取一个数低位 baiwei = 345 // 100 shiwei = 345 // 10 % 10 gewei = 345 % 10 print(gewei) """ # 方法一 i = 100 while i < = 999 : baiwei = i / / 100 shiwei = i / / 10 % 10 gewei = i % 10 if shiwei = = gewei and shiwei = = baiwei : print (i) # 123 elif shiwei = = gewei - 1 and shiwei = = baiwei + 1 : print (i) # 987 elif shiwei = = gewei + 1 and shiwei = = baiwei - 1 : print (i) i + = 1 # 方法二 print ( "<====>" ) i = 100 while i < = 999 : strvar = str (i) # print(strvar, type(strvar)) gewei = int (strvar[ - 1 ]) shiwei = int (strvar[ 1 ]) baiwei = int (strvar[ 0 ]) if shiwei = = gewei and shiwei = = baiwei : print (i) # 123 elif shiwei = = gewei - 1 and shiwei = = baiwei + 1 : print (i) # 987 elif shiwei = = gewei + 1 and shiwei = = baiwei - 1 : print (i) i + = 1 # 方法三 print ( "<====>" ) i = 100 while i < = 999 : strvar = str (i) # print(strvar, type(strvar)) gewei = int (strvar[ - 1 ]) shiwei = int (strvar[ 1 ]) baiwei = int (strvar[ 0 ]) if 2 * shiwei = = gewei + baiwei and (shiwei = = gewei + 1 or shiwei = = gewei - 1 ): print (i) elif gewei = = shiwei and shiwei = = baiwei: print (i) i + = 1 # 百钱买百鸡 # 公鸡一个五块钱,母鸡一个三块钱,小鸡三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只? """ 穷举法:把数据拿出来一个一个试 x = [1,2] y = [3,4] z = [5,6] x+y+z = 10 1 + 3 + 5 = 9 1 + 3 + 6 = 10 bingo 1 + 4 + 5 = 10 bingo 1 + 4 + 6 = 11 2 + 3 + 5 = 10 bingo 2 + 3 + 6 = 11 2 + 4 + 5 = 11 2 + 4 + 6 = 12 """ """ 公鸡 : x 母鸡 : y 小鸡: z 鸡的数量:x + y + z = 100 鸡的价格:5 * x + 3 * y + 1/3*z = 100 """ x = 0 while x < = 20 : y = 0 while y < = 33 : z = 0 while z < = 100 : if x + y + z = = 100 and 5 * x + 3 * y + 1 / 3 * z = = 100 : print (x,y,z) z + = 1 y + = 1 x + = 1 |
2. break_pass_continue的使用
关键字的使用 pass break continue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# pass 过 (代码块中的占位符) """ if 20 == 20: pass while True: pass """ # break 终止当前循环 (只能用在循环之中) # 1 ~ 10 遇到5终止循环 i = 1 while i < = 10 : print (i) if i = = 5 : break i + = 1 i = 1 while i < = 3 : j = 1 while j < = 3 : if j = = 2 : break print (i,j) j + = 1 i + = 1 # 1 1 # 2 1 # 3 1 """ if 5 == 5: error break """ # continue 跳过当前循环,从下一次循环开始 # 打印 1 ~ 10 跳过5 i = 1 while i < = 10 : if i = = 5 : # 在跳过之前,因为会终止执行后面的代码,从下一次循环开始 # 为了避免死循环,手动加1 i + = 1 continue print (i) i + = 1 # 1 ~ 100 打印所有不含有4的数字 # 方法一 print ( "<============>" ) i = 1 while i < = 100 : strvar = str (i) # print(strvar) if "4" in strvar: i + = 1 continue print (i) i + = 1 # 方法二 print ( "<============>" ) i = 1 while i < = 100 : if i / / 10 = = 4 or i % 10 = = 4 : i + = 1 continue print (i) i + = 1 |
3. for循环
while
: 逻辑比较复杂用while
for
: 逻辑比较简单,遍历数据的话一定是for(while也可以遍历数据,但是遍历的数据不能是无序的)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
# 遍历 循环 迭代 , 把容器中的元素一个一个获取出来 # while循环在遍历数据时的局限性 """ lst = [1,2,3,4,5] # ok i = 0 while i < len(lst): print(lst[i]) i+=1 setvar = {"a","b","c"} # not ok i = 0 while i < len(setvar): print(setvar[i]) i+=1 """ # for循环的基本语法 """ Iterable 可迭代性数据:1.容器类型数据 2.range对象 3.迭代器 for 变量 in Iterable: code1. """ # 字符串 container = "北京和深圳温差大概20多度" # 列表 container = [ 1 , 2 , 3 , 4 , 4 , 5 ] # 元组 container = ( "孙开洗" , "孙健" , "孙悟空" ) # 集合 container = { "陈璐" , "曹静怡" , "王志国" , "邓鹏" , "合力" } # 字典 container = { "cl" : "风流倜傥" , "cjy" : "拳击选手" , "wzg" : "寻花问柳" , "dp" : "帅气,祖国的栋梁" , "hl" : "你是个好人" } # 遍历数据 for i in container: print (i) print ( "<===================>" ) # 1.遍历不等长多级容器 container = [ 1 , 2 , 3 , 4 ,( "嗄" , "234" ,{ "马春配" , "李虎凌" , "刘子涛" })] for i in container: # 判断当前元素是否是容器,如果是,进行二次遍历,如果不是,直接打印 if isinstance (i, tuple ): # ("嗄","234",{"马春配","李虎凌","刘子涛"}) for j in i: # 判断当前元素是否是集合,如果是,进行三次遍历,如果不是,直接打印 if isinstance (j, set ): # j = {"马春配","李虎凌","刘子涛"} for k in j : print (k) else : print (j) # 打印数据 else : print (i) # 2.遍历不等长多级容器 container = [( "刘玉波" , "历史源" , "张光旭" ), ( "上朝气" , "于朝志" ),( "韩瑞晓" ,)] for i in container: for j in i: print (j) # 3.遍历等长的容器 container = [( "马云" , "小马哥" , "马春配" ) , [ "王健林" , "王思聪" , "王志国" ],{ "王宝强" , "马蓉" , "宋小宝" }] for a,b,c in container: print (a,b,c) # 变量的解包 a,b,c = "poi" a,b = ( 1 , 2 ) a,b = 1 , 2 a,b,c = [ 10 , 11 , 12 ] a,b = { "林明辉" , "家率先" } a,b = { "lmh" : "林明辉" , "jsx" : "家率先" } a,b,c = ( "马云" , "小马哥" , "马春配" ) print (a,b,c) # ### range对象 """ range([开始值,]结束值[,步长]) 取头舍尾,结束值本身获取不到,获取到它之前的那一个数据 """ # range(一个值) for i in range ( 5 ): # 0 ~ 4 print (i) # range(二个值) for i in range ( 3 , 8 ): # 3 4 5 6 7 print (i) # range(三个值) 正向的从左到右 for i in range ( 1 , 11 , 3 ): # 1 4 7 10 print (i) # range(三个值) 逆向的从右到左 for i in range ( 10 , 0 , - 1 ): # 10 9 8 7 ... 1 print (i) # 总结: """ while 一般用于处理复杂的逻辑关系 for 一般用于迭代数据 部分情况下两个循环可以互相转换; """ i = 1 while i < = 9 : j = 1 while j < = i: print ( "%d*%d=%2d " % (i,j,i * j) ,end = "" ) j + = 1 print () i + = 1 for i in range ( 1 , 10 ): for j in range ( 1 ,i + 1 ): print ( "%d*%d=%2d " % (i,j,i * j) ,end = "" ) print () # 打印 1 ~ 10 跳过5 i = 1 while i < = 10 : if i = = 5 : i + = 1 continue print (i) i + = 1 for i in range ( 1 , 11 ): if i = = 5 : continue print (i) |
小提示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
"".strip() 可以去掉字符串的两边的空白符,包括\n in 不能在纯数字中使用,如果是字典的话判断你的是字典的键 元组不能用 while 循环来显示,因为内容是无序的 外层是集合,里面不能是列表 lst = [ [ "a" , 1 ] , { "b" , "250" }] dic = dict (lst) print (dic) 这里可能会输出{ 'a' : 1 , 'b' : '250' }或者{ 'a' : 1 , '250' : 'b' } lst = [ "a1" , "b2" ] dic = dict (lst) print (dic) 这里会输出{a: 1 ,b: 2 } lst = [ "a11" , "b22" ] dic = dict (lst) print (dic) 这里就会报错 isinstance 比 type 用的多 在一个文件中 - 5 - 正无穷 a = 3 b = 3 a和b的 id 是一样 a = b = 3 不管是不是 - 5 到正无穷,a和b的 id 都是一样的 height = int (intput( "你身高多少:" ) ) 字符串为什么不能用 int 进行强转(字符串是小数的) help ( print ) # print的帮助文档 |
4. 小练习
问题:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
1. 利用 if 语句写出猜大小的游戏: 设定一个理想数字比如: 66 , 让用户三次机会猜数字,如果比 66 大,则显示猜测的结果大了; 如果比 66 小,则显示猜测的结果小了; 只有等于 66 ,显示猜测结果正确,退出循环。 最多三次都没有猜测正确,退出循环,并显示‘都没猜对,继续努力'。 2. 使用 while 和 for 遍历字符串 "IG战队牛逼" 3. 使用 for 循环对s = "黄绿青蓝紫" 进行循环,每次打印的内容是每个字符加上 "色的" , 例如:黄色的 绿色的 青色的 ... 4. 完成要求: 用户可持续输入( while 循环) 输入A,则显示走大路回家,然后在让用户进一步选择: 是选择公交车,还是步行? 选择公交车,显示 10 分钟到家,并退出整个程序。 选择步行,显示 20 分钟到家,并退出整个程序。 输入B, 则显示走小路回家,并退出整个程序。 输入C, 则显示绕道回家,然后在让用户进一步选择: 是选择游戏厅玩会,还是网吧? 选择游戏厅,则显示 ‘一个半小时到家,爸爸在家,拿棍等你。'并让其重新输入A,B,C选项。 选择网吧,则显示‘两个小时到家,妈妈已做好了战斗准备。'并让其重新输入A,B,C选项。 5. 写代码:计算 1 - 2 + 3 - 4 + ... + 99 中除了 88 以外所有数的总和? 6. (升级题)打印菱形小星星 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
答案:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
|
""" 1.利用if语句写出猜大小的游戏: 设定一个理想数字比如:66, 让用户三次机会猜数字,如果比66大,则显示猜测的结果大了; 如果比66小,则显示猜测的结果小了; 只有等于66,显示猜测结果正确,退出循环。 最多三次都没有猜测正确,退出循环,并显示‘都没猜对,继续努力'。 """ """ times = 1 while times <= 3: num = input("请输入一个数字:") if num.isdecimal(): num = int(num) if num > 66: print("结果大了") elif num == 66: print("对了 bingo老婶") break elif num < 66: print("结果小了") else: print("抱歉,数字格式不对~") if times == 3: print("都没猜对,继续努力") times +=1 """ # 2.使用while和for 遍历字符串 "IG战队牛逼" strvar = "IG战队牛逼" i = 0 while i < len (strvar): print (strvar[i]) i + = 1 for i in strvar: print (i) # 3.使用for循环对s="黄绿青蓝紫"进行循环,每次打印的内容是每个字符加上"色的", # 例如:黄色的 绿色的 青色的 ... s = "黄绿青蓝紫" for i in s: print (i + "色的" ) # 4.完成要求: # 用户可持续输入(while循环) # 输入A,则显示走大路回家,然后在让用户进一步选择: # 是选择公交车,还是步行? # 选择公交车,显示10分钟到家,并退出整个程序。 # 选择步行,显示20分钟到家,并退出整个程序。 # 输入B, # 则显示走小路回家,并退出整个程序。 # 输入C, # 则显示绕道回家,然后在让用户进一步选择: # 是选择游戏厅玩会,还是网吧? # 选择游戏厅,则显示 ‘一个半小时到家,爸爸在家,拿棍等你。'并让其重新输入A,B,C选项。 # 选择网吧,则显示‘两个小时到家,妈妈已做好了战斗准备。'并让其重新输入A,B,C选项。 """ sign = True while sign: opt = input("请输入选项A,B,C") if opt.lower() == "a": print("走大路回家") opt = input("是选择公交车,还是步行?") if opt == "公交车": print("10分钟到家,") sign = False # break elif opt == "步行": print("20分钟到家") sign = False # break elif opt.lower() == "b": print("走小路回家") break elif opt.lower() == "c": print("绕道回家") opt = input("是选择游戏厅玩会,还是网吧?") if opt == "游戏厅": print("一个半小时到家,爸爸在家,拿棍等你。") elif opt == "网吧": print("两个小时到家,妈妈已做好了战斗准备。") """ # 5.写代码:计算 1 - 2 + 3 - 4 + ... + 99 中除了88以外所有数的总和? total = 0 for i in range ( 1 , 100 ): if i = = 88 : continue if i % 2 = = 1 : total + = i elif i % 2 = = 0 : total - = i print (total) total = 0 i = 1 while i < = 99 : if i = = 88 : i + = 1 continue if i % 2 = = 1 : total + = i elif i % 2 = = 0 : total - = i i + = 1 print (total) # 6.(升级题)打印菱形小星星 """ * *** ***** ******* ********* *********** *********** ********* ******* ***** *** * """ """ 空格 + 星星 + 换行 总行数: 对于任意个星星n ,总行数: n // 2 + 1 13 -> 7 11 -> 6 9 -> 5 7 -> 4 空格: 对于当前行i , 空格数量 = 总行数 - 当前行 1 => 5 2 => 4 3 => 3 4 => 2 5 => 1 6 => 0 星星: 对于当前行i , 星星数量 = 2 * 当前行 - 1 1 => 1 2 => 3 3 => 5 4 => 7 """ # n = int(input("输入星星个数")) n = 13 hang = n / / 2 + 1 i = 1 while i < = hang: # 打印空格 kongge = hang - i print ( " " * kongge,end = "") # 打印星星 xingxing = 2 * i - 1 print ( "*" * xingxing,end = "") # 打印换行 print () i + = 1 i = hang while i > = 1 : # 打印空格 kongge = hang - i print ( " " * kongge,end = "") # 打印星星 xingxing = 2 * i - 1 print ( "*" * xingxing,end = "") # 打印换行 print () i - = 1 # 方法二 n = 11 hang = n / / 2 + 1 i = 1 while i < = hang: # 打印空格 kongge = hang - i while kongge> 0 : print ( " " ,end = "") kongge - = 1 # 打印星星 xingxing = 2 * i - 1 j = 1 while j < = xingxing: print ( "*" ,end = "") j + = 1 # 打印换行 print () i + = 1 i = hang while i > = 1 : # 打印空格 kongge = hang - i while kongge> 0 : print ( " " ,end = "") kongge - = 1 # 打印星星 xingxing = 2 * i - 1 j = 1 while j < = xingxing: print ( "*" ,end = "") j + = 1 # 打印换行 print () i - = 1 # (扩展了解) """abs 求绝对值的内置函数 abs(-1) = 1""" print ( "<===11111==>" ) for i in range ( - 6 , 7 ): # 只有一句代码的话,可以直接写在冒号的右边; if i = = 0 : continue print ( " " * ( abs (i) - 1 ), "*" * ( 13 - 2 * abs (i))) |
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!
原文链接:https://blog.csdn.net/weixin_46818279/article/details/120942405