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
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
''''''

# 1,打印100以内7的倍数
for i in range(1, 101):
if i%7 == 0:
print(i)


# 2,打印100以内的奇数
for i in range(1, 101, 2):
print(i)

# 3,打印100以内所有偶数的和
s = 0
for i in range(1, 101):
if i%2 == 0:
s += i

# 4,判断一个数是不是合数。(指自然数中除了能被1和本身整除外,还能被其他的数整除(不包括0)的数。)
# 5,判断一个数是不是素数。(除了1和它本身以外不再有其他的除数整除。)
n = 101
for i in range(2, n//2+1):
if n%i == 0:
print(n, "是合数")
break
else:
print(n, "是素数")


# 6,求整数1~100的累加值,但要求跳过所有个位为3的数。
for i in range(1, 101):
if i%10 == 3:
continue
print(i)

# 7, 一个新入职,月工资为2000元的员工,每年涨当年工资5%,20年后的月工资是多少?
salary = 2000
for i in range(20):
salary += salary*0.05
print(round(salary, 3))

# 8, 山上有一口缸可以装50升水,现在有15升水。老和尚叫小和尚下山挑水,每次可以挑5升。
# 问:小和尚要挑几 次水才可以把水缸挑满?通过编程解决这个问题。
count = 0
for i in range(15, 50, 5):
count += 1
print(count)

count = 0
i = 15
while i < 50:
count += 1
i += 5
print(count)


# 9, 打印100–200之间所有能被3或者7整除的数
for i in range(100, 201):
if i%3==0 or i%7==0:
print(i)

# 10, 计算10的阶乘 (1*2*3*4*5*6*7*8*9*10 n的阶乘1*2……*n)
n = 10
s = 1
for i in range(1, n+1):
s *= i
print(s)

import math
s = math.factorial(10) # 阶乘
print(s)

# 11, 计算1+3+5+...+99的和
s = 0
for i in range(1, 100, 2):
s += i

# 12, 输出20~80之间能被3整除的整数, 每行5个
count = 0
for i in range(20, 81):
if i%3 == 0:
print(i, end=',')
count += 1

if count%5 == 0:
print()
print()

# 13, 打印1000~2000年中所有的闰年, 每行4个
count = 0
for i in range(1000, 2001):
if i%4==0 and i%100!=0 or i%400==0:
print(i, end=' ')
count += 1

if count%4 == 0:
print()

print()
# 14, 求: 1-1/2+1/3-1/4 … 1/100的和
# 提示: 1/1-1/2+1/3-1/4 … 1/100
s = 0
for i in range(1, 101):
if i%2 == 0:
s -= 1/i
else:
s += 1/i

print(s)


# 15, 99乘法表
'''
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
1 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
'''




# 1, 输入两个数n,a,
# 如果:n=3,a=2; 输出 2 + 22 + 222 的值。(****)
# 如果:n=4,a=3; 输出 3 + 33 + 333 + 3333的值。
# 提示: 1、n = 3,相加三次,每次相加比前一次相加的数,多一位
# 2、每次多的这个位数的值为a, 3, 3*10+3(33), 33*10+3(333),...
n = 4
a = 3

s = 0
temp = 0
for i in range(n):
temp = temp*10 + a
# print(temp)
s += temp

print(s)


# 2, 五位数中,对称的数称为回文数,找出所有的回文数。
# 如: 12321
for i in range(10000, 100000):
a = i//10000
b = i//1000%10
c = i//10%10
d = i%10
if a==d and b==c:
print(i)


# 3, 求1!+2!+3!+4!+5!
import math
n = 5
s = 0
for i in range(1, n+1):
s += math.factorial(i)
print(s)


# 4, 找出所有的水仙花数,三位数,各位立方和等于该数本身。
# 如: 153 = 1 ^ 3 + 5 ^ 3 + 3 ^ 3
for i in range(100, 1000):
a = i//100
b = i//10%10
c = i%10
if a**3 + b**3 + c**3 == i:
print(i)


# 5, 输入任意两个数,如果第一个数小,从第一个数打印到第二个数,如果第二个数小,从第二个数打印到第一个数
a = 10
b = 20
min1 = min(a, b)
max1 = max(a, b)
for i in range(min1, max1+1):
print(i, end=' ')

print()

# 6, 输入两个数,求两个数的最大公约数(*****)
# 如: 12和8的最大公约数是4,
# 提示: 能够同时整除两个数的最大数
# 1, 先找出两个数中最小的那个数,
# 2, 最小数--, 找出能被两个数整除的数(退出循环break)
a = 12
b = 17
min1 = min(a, b)
for i in range(min1, 0, -1):
if a%i==0 and b%i==0:
print(i)
break


# 7, 输入两个数,求两个数的最小公倍数(****)
# 如: 9和6的最小公倍数是18,
# 1, 先找出两个数中的最大数
# 2, 最大数++,找出能被两个数整除的数(退出循环break)
a = 9
b = 6
max1 = max(a, b)
for i in range(max1, a*b+1):
if i%a==0 and i%b==0:
print(i)
break


# 8, 宰相的麦子:相传古印度宰相达依尔,是国际象棋的发明者。有一次,国王因为他的贡献要奖励他,问他想要什么。
# 达依尔说:“只要在国际象棋棋盘上(共64格)摆上这么些麦子就行了:第一格一粒,第二格两粒,……,
# 后面一格的麦子总是前一格麦子数的两倍,摆满整个棋盘,我就感恩不尽了。”国王一想,这还不容易,
# 刚想答应,如果你这时在国王旁边站着,你会不会劝国王别答应,为什么?

s = 0
for i in range(64):
s += 2**i
print(s) # 18446744073709551615
print(s//(10**16), "亿亿颗")

# 1, 2, 4, 8, 16, ...
# 2^0, 2^1, 2^2 2^3 2^4, ...

# 丈母娘要彩礼
# 第一天给0.01块钱
# 第二天给0.02块钱
# 第三天给0.04块钱
# ..
# 给一个月就可以了

s = 1
for i in range(30):
s += (2**i)/100
print(s) # 10737418.23元

#
# 初级
# 【注:以下6题功能全部自己实现,不能借助于Python内置函数: max, min, sort, reverse】
#
# 1.自定义一个数字列表,获取这个列表中的最小值,并将列表转化为元组
# ages = [1,2,3,-4,2,1]
# min = ages[0]
# for n in ages:
ages = [1, 2, 3, -4, 2, 1]
min1 = ages[0] = 1
for n in ages:
if n < min1:
min1 = n

print(min1)


# 2. 自定义一个数字列表,元素为10个 ,找出列表中最大数连同下标一起输出
nums = [1, 2, 3, 4, 5, 3, 2, 1, 0, 2]
max1 = nums[0]
max1_index = 0
for i in range(len(nums)):
if nums[i] > max1:
max1 = nums[i]
max1_index = i

print(max1, max1_index)


# 3. 自定义一个数字列表,求列表中第二大数的下标
nums = [1, 2, 3, 4, 5, 5, 4, 4, 3, 2, 1]
max2 = nums[0]
for n in nums:
if n > max2:
max2 = n
# print(max2) # 5

max3 = nums[0] # 第二大数
for n in nums:
if n > max3 and n != max2:
max3 = n

# print(max3) # 4
for i in range(len(nums)):
if max3 == nums[i]:
print(i, end=', ') # 3, 6, 7,
print()


# 4. B哥去参加青年歌手大奖赛 ,有10个评委打分 ,(去掉一个最高分一个最低分)求平均分
import random
scores = []
for i in range(10):
n = random.randint(6, 10)
scores.append(n)
print(scores)

max1 = scores[0]
min1 = scores[0]
for n in scores:
if n > max1:
max1 = n
if n < min1:
min1 = n

scores.remove(max1)
scores.remove(min1)

s = 0
for n in scores:
s += n

avg = s / len(scores)
print(avg)


# 5. 定义元组,存放5个学生的成绩【成绩值自己设定】,获得成绩之和,平均成绩,最小成绩,最大成绩。
scores = (90, 80, 70, 100, 59)
s = 0
min2 = scores[0]
max2 = scores[0]

for n in scores:
s += n
if n > max2:
max2 = n
if n < min2:
min2 = n

avg = s / len(scores)
print("成绩和:", s)
print("平均成绩:", avg)
print("最高成绩:", max2)
print("最低成绩:", min2)


# 6. 将一个列表逆序输出, 提示: range(6,-1,-1)
nums = [2, 3, 4, 1, 2, 3, 4]
nums2 = []
for i in range(len(nums)-1, -1, -1):
nums2.append(nums[i])

print(nums2) # [4, 3, 2, 1, 4, 3, 2]


# 中级 : 可以使用内置函数
# 1.给定一个列表:将列表中指定的某个元素全部删除
nums = [1, 2, 3, 3, 3, 2, 2, 1]
n = 2
for i in range(nums.count(n)):
nums.remove(n)
print(nums)

# 2.自定义一个列表,最大的与第一个元素交换,最小的与最后一个元素交换,输出列表
ages = [-2, 2, 3, 4, 1, 3, 1, 10]
max_index = 0
min_index = 0
for i,n in enumerate(ages):
if n > ages[max_index]:
max_index = i
if n < ages[min_index]:
min_index = i

ages[0], ages[max_index] = ages[max_index], ages[0]
if min_index == 0:
# 如果第一个数是最小数
min_index = max_index
ages[-1], ages[min_index] = ages[min_index], ages[-1]

print(ages) # [10, 2, 3, 4, 0, 3, 1, -2]


# #字典,先不写
# 3.在控制台输入一句英语,获得每个字母出现的次数,注:每个字符作为key,出现的次数作为value生成一个字典


# 4 ,对称列表. 传入一个列表,元素类型与个数皆未知,返回新列表,由原列表的元素正序反序拼接而成;
# 如传入[“One”, “Two” ,”Three”] 返回[“One”, “Two”, “Three” ,”Three” ,”Two”, “One”]
list1 = ["One", "Two", "Three"]
list2 = list1.copy()
list2.reverse()
# print(list1, list2)
list3 = list1 + list2
print(list3) # ['One', 'Two', 'Three', 'Three', 'Two', 'One']


# 5, 给定一个不存在重复元素的整数列表,例如[6 ,4 ,7 ,2 ,5 ,8]和一个数字,例如10,
# 找出两个元素(或同一个元素加自身),并且使这两个数的和为给定数字,并打印出来
# 例如[6 ,4 ,7 ,2 ,5 ,8]和数字10. 打印结果为: 6 ,4 2 ,8 5 ,5
# 提示: 循环嵌套
# nums = [6 ,4 ,7 ,2 ,5 ,8]
# for i in range(len(nums)):
# for j in range(i, len(nums)):
nums = [6, 4, 7, 2, 5, 8]
n = 10
for i in range(len(nums)):
for j in range(i, len(nums)):
if nums[i] + nums[j] == 10:
print(nums[i], nums[j])


# 6, 有一个从小到大排好序的列表。现输入一个数,要求按原来的规律将它插入列表中,
# 如: [2 ,3 ,4 ,56 ,67 ,98] 如插入63, 100
nums = [2, 3, 4, 56, 67, 98]
n = 100
for i in range(len(nums)):
if n < nums[i]:
nums.insert(i, n)
break
else:
nums.append(n)

print(nums)


# 7 ,列表去重, 将下面的列表中重复的元素去除
# list1 = [1, 2, 3, 5, 4, 4, 4, 5, 5, 3, 2, 1]
list1 = [1, 2, 3, 5, 4, 4, 4, 5, 5, 3, 2, 1]
list2 = []
for n in list1:
if n not in list2:
list2.append(n)

print(list2)