Python小练习

答题不限制编程语言

1. 求从10到100中能被3或5整除的数的和。

solutions 1:

1
print(sum([x for x in range(10, 101) if x%3 ==0 or x%5 ==0]))

solutions 2:

1
2
3
4
5
6
x = 0
for i in range(10, 101):
if i%3 == 0 or i%5 ==0:
x += i

print(x)

2. 将一个字符串逆序,不要使用反转函数。

solutions 1:

1
2
def list_reverse(a):
return a[::-1]

solutions 2:

1
2
3
4
5
def list_reverse(a):
b = []
for i in range(len(a)):
b.append(a.pop())
return b

3. 计算任一长度的字符串中不同的字符以及它的个数,例如”abcdaadbib”,输出: a,3 b,3 c,1 d,2 i,1 。

1
2
3
def str_count(a):
for x in set(a):
print("{}, {}".format(x, a.count(x)))

4. 写个函数,返回指定数的各位数字的列表。如数值54321返回[5,4,3,2,1]。

1
2
def return_list(a):
return [x for x in str(a)]

5. 写个函数,找出并返回一个数组中的最大数和最小数。

1
2
def find_max_min(a):
return "max={} | min={}".format(max(a), min(a))

6. 求斐波那契数列第n项,斐波那契数列前10项为1,1,2,3,5,8,13,21,34,55,… 。

solutions 1:

1
2
3
4
5
def fib(n):
if n == 1 or n == 2:
return 1
else:
return fib(n-1) + fib(n-2)

solution 2:

1
2
3
4
5
6
7
8
# 对于大数字n,用递归函数可能会栈溢出
def fib(n):
a = [1, 1]
if n<=2:
return 1
for i in range(n-2):
a[0],a[1]=sum(a),a[0]
return a[0]

7. 输入一个正整数N,求从1数到N的过程中出现的所有1的数量,例如输入2,则输出(1:1个),输入10,则输出(1:2个),输入11,则输出(1:4个)

1
2
3
def one_count(n):
s = sum([str(x).count("1") for x in range(1, n+1)])
return "(1: {}个)".format(s)

8. 有30个人,其中有男人,女人和小孩,在一家饭馆吃饭,一共花费50元,其中每个男人3元,每个女人2元,每个小孩1元,问男人,女人,小孩各有几个?

1
2
3
4
5
for x in range(1, 31):
for y in range(1, 31):
for z in range(1, 31):
if x + y + z == 30 and x*3 + y*2 + z == 50:
print("男人{}个,女人{}个,小孩{}个".format(x, y, z))

9. 有20个犯人站成一圈,编号1~20,从1开始报数,报到3的人就被枪毙,然后下d一个重新报1。问题是编号11的犯人第几次被枪毙?

1
2
3
4
5
6
7
8
9
10
11
def func(a, n=0):
if a[2] == 11:
return n+1
del a[2]
n += 1
a.append(a.pop(0))
a.append(a.pop(0))
return func(a, n=n)

a = [x for x in range(1,21)]
print("编号11的犯人第{}次被枪毙".format(func(a)))