Python趣味题

星号输出图形

菱形

1
2
3
4
5
6
7
8
9
"""
*
***
*****
*******
*****
***
*
"""
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 方法一:
row = 7
s = '*'
num = [2 * i + 1 if 2 * i + 1 <= row else 2 * (row - i) - 1 for i in range(row)]
for i in num:
print((s*i).center(row))

# 方法二:
row = 7
s = '*'
for i in range(1, row + 1, 2):
t = (row - i) // 2
print(' ' * t + s * i)
for i in reversed(range(1, row - 1, 2)):
t = (row - i) // 2
print(' ' * t + s * i)

# 方法三:
row = 7
s = '*'
num = [2 * i + 1 if 2 * i + 1 <= row else 2 * (row - i) - 1 for i in range(row)]
for i in num:
t = int((row - i) / 2)
print(' ' * t + s * i)

金字塔形

1
2
3
4
5
6
"""
*
***
*****
*******
"""
1
2
3
4
5
6
row = 4
for i in range(row):
print((row - 1 - i) * ' ', end='')
for j in range(2 * i + 1):
print('*', end='')
print()

倒三角形

1
2
3
4
5
6
"""
*******
*****
***
*
"""
1
2
3
4
5
6
row = 4
for i in range(row):
print(i * ' ', end='')
for j in range(2 * (row - i) - 1):
print('*', end='')
print()

直角三角形

1
2
3
4
5
6
7
"""
*
**
***
****
*****
"""
1
2
3
4
5
row = 5
for i in range(row):
for j in range(i + 1):
print('*', end='')
print()

倒直角三角形

1
2
3
4
5
6
7
8
"""
******
*****
****
***
**
*
"""
1
2
3
4
5
row = 6
for i in range(row):
for j in range(row - i):
print('*', end='')
print()

使用map、reduce函数实现数字字符串转成整形

1
2
3
4
5
6
7
8
9
10
11
12
from functools import reduce


def char2num(s):
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]


def str2int(s):
return reduce(lambda x, y: x * 10 + y, map(char2num, s))


print(str2int('1234'))

求两个数字的最大公约数,最小公倍数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def max_common(m, n):
while n:
m, n = n, m % n
return m


def min_common(m, n):
t = m * n
while n:
m, n = n, m % n
return t // m


if __name__ == '__main__':
a = 36
b = 5
print(max_common(a, b))
print(min_common(a, b))

24点计算

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
# -*- coding: utf-8 -*-
# __author__ = "maple"
ops = [
('+', lambda x, y: x + y),
('-', lambda x, y: x - y),
('*', lambda x, y: x * y),
('/', lambda x, y: x / y if y != 0 else None)
]


def calc24(numbers):
for i in range(len(numbers)):
for j in range(i + 1, len(numbers)):
rest = numbers[:i] + numbers[i + 1:j] + numbers[j + 1:]
for op in ops:
numI = numbers[i] if type(numbers[i]) == int else numbers[i][0]
numJ = numbers[j] if type(numbers[j]) == int else numbers[j][0]
exprI = str(numbers[i]) if type(numbers[i]) == int else numbers[i][1]
exprJ = str(numbers[j]) if type(numbers[j]) == int else numbers[j][1]
resultNum = op[1](numI, numJ)
if resultNum is None:
continue
resultExpr = '(' + exprI + op[0] + exprJ + ')'
if not rest and resultNum == 24:
return "Solution found: " + resultExpr
result = calc24([(resultNum, resultExpr)] + rest)
if result:
return result
return None


print(calc24([4, 9, 3, 7]))

5位随机验证码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import random

def code():
ret = ''
for i in range(5):
num = random.randint(0, 9)
alfa = chr(random.randint(97, 122))
alfa2 = chr(random.randint(65, 90))
s = random.choice([str(num), alfa, alfa2])
ret = ret + s
return ret

while True:
a = code()
print(a)
s = input('请输入验证码:').strip()
if s == a:
print('登录成功')
break
else:
print('输入错误')
continue