Python基础练习题

求三位数组合

已知有一个list,里面有4个数字,分别是3,6,2,7 ,这四个数字能组成多少个互不相同且无重复数字的三位数?比如362算一个,326算一个,请逐个输出他们。


分析

  1. 三层嵌套循环,每一层循环从list中取出一个数字,这三个数字组成一个三位数
  2. 需要对取出来的三个数字进行去重

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#coding=utf-8
lst = [3,6,2,7]
number_lst = []
for i in lst:
for j in lst:
for k in lst:
if i != j and i != k and j != k: # 去重
number_lst.append(
'{first}{second}{third}'.format(
first=i, second=j, third=k))

print('共有{count}个符合条件的数字'.format(
count=len(number_lst)))
for item in number_lst:
print item

小结

注意字符串format的用法,首先要在字符串里定义哪个区域是需要被替换的,并在大括号里定义一个名字,然后在format函数的参数里指明这个名字被谁替换


完全平方数

  1. 打印10000以内的完全平方数
  2. 如果一个数加100是一个完全平方数,加268也是一个完全平方数,求10000以内所有符合这个要求的数值

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 第一题 方法一
numbers = [x*x for x in range(1, 10001)]
for num in numbers:
print(num)

# 第一题 方法二
num = 1
while num < 10001:
print(num*num)
num += 1

# 第二题
num = 1
squares = []
while True:
square = num*num
if square > 10268:
break
num += 1
squares.append(square)

for square in squares:
if (square + 168) in squares:
print(square - 100)
  • 有一个数,假设加100后的值为A,加268之后的值是B,根据题目要求,A和B都是完全平方数,那么B-A = 168
  • 程序先找出10268以内的所有完全平方数,然后遍历,如果一个完全平方数加168 以后还是完全平方数,那么这个完全平方数减去100,就是要找的数值

打印乘法口诀表

打印乘法口诀表,效果如下表所示:

1
2
3
4
5
6
7
8
9
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
2
3
4
5
6
7
8
9
10
11
def get_line(number):
line = ""
str_foramt = "{left}*{right} = {result}"
for i in range(1, number+1):
if i != 1:
line += " \t"
line += str_foramt.format(left=i, right=number, result=i*number)
return line

for i in range(1,10):
print(get_line(i))

输出水仙花数

题目

输出所有的水仙花数,所谓水仙花数是指一个三位数各个位上的数的立方相加在一起等于这个三位数。比如153,1的3次方 + 5的三次方 + 3的三次方 等于153。


解答

1
2
3
4
5
6
for n in range(100,1000):
i = n / 100 # 获取百位数
j = n / 10 % 10 # 获取十位数
k = n % 10 # 获取个位数
if n == i**3 + j**3 + k**3:
print(n)

输出学生分数的考评等级

允许用户从终端输入一个分数,程序输出这个分数所属的考评等级,90到100分是A,60到89是B,60分以下是C


解答

1
2
3
4
5
6
7
8
9
10
11
12
while True:
scores = int(input("请输入分数:"))

if scores >= 90 and scores <= 100:
grade = 'A'
elif scores >= 60:
grade = 'B'
elif scores >= 0:
grade = 'C'
else:
break
print(grade)