1
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的四位数?都是多少?
for a
in
range(
1,
5):
for b
in
range(
1,
5):
for c
in
range(
1,
5):
for d
in
range(
1,
5):
if(a!=b
and a!=c
and a!=d
and b!=c
and b!=d
and c!=d):
print(a,b,c,d)
运行结果
注意:
- start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
- stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
- step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
2 题目:打印出国际象棋图
分析:行为0-7,列为0-7,当行列之和为奇数时为黑色
import sys
for i
in
range(
8):
for j
in
range(
8):
if (i + j) %
2 !=
0:
print(
chr(
219),
end=
'')
print(
chr(
219),
end=
'')
else:
print(
' ',
end=
'')
print(
'
\n
',
end=
'')
3题目:
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
判断是否为字母:str.isspace
判断是否为空格:str.isalpha
判断是否为数字:str.isdigit
判断是否为其他字符:前三种都不是就是其他字符
输入:
str = input(
'please input a string:\n'
)
space =
0
digit=
0
alpha=
0
other=
0
str =
"12jdfj wjdf dfj wejwi jsdifj,,nfiraj "
for i
in str:
if(i.isalpha()):
alpha=alpha+
1
if(i.isspace()):
space=space+
1
if(i.isdigit()):
digit=digit+
1
else:
other=other+
1
print(
"space=",space,
"digit=",digit,
"alpha=",alpha,
"other=",other)
运行结果:
space= 5 digit= 2 alpha= 28 other= 35
4 题目 汉诺塔
Hanoi塔问题,算法分析如下,设A上有n个盘子(编号由上到下:1、2、3……、n)。A:初始塔,B:中转塔,C:目标塔
a、如果n=1,则将盘子从A塔直接移动到C塔(借助B塔)。
b、如果n=3,则:
(1)将A塔上编号1~2的盘子(2个盘子)移动到B塔上(借助C塔);
(2)将A塔上编号3的盘子(最后一个盘子)移动到C塔上;
(3)将B塔上编号1~2的盘子(2个盘子)移动到C塔上(借助A塔)。
c、延伸,如果n=num,则:
(1)将A塔上编号1~num-1的盘子(num-1个盘子)移动到B塔上(借助C塔);
(2)将A塔上编号num的盘子(最后一个盘子)移动到C塔上;
(3)将B塔上编号1~num-1的盘子(num-1个盘子)移动到C塔上(借助A塔
代码:
def move(n,a,c):
global i
print(
"第%d步:%d号盘子移动 初始塔%s到目标塔%s" % (i, n, a, c))
i+=
1
def hanoi(n,a,b,c):
#n:移动个数,a:from b:中转c:目标
if(n==
1):
move(
1,a,c)
else:
hanoi(n-
1,a,c,b)
#n-1个从a中转c到b
move(n,a,c)
#第n个从a到c
hanoi(n-
1,b,a,c)
#n-1个从a中转a到c
if __name__ ==
'__main__':
i=
1
n=
4
hanoi(n,
"A",
"B",
"C")
运行结果:
5 题目:打印出菱形
代码:
n=int(input("请输入一个数字:"))
for i in range(n):
for m in range(n -1- i):
print(" ", sep='', end='')
for j in range(2*i+1):
print("*",sep='',end='')
print("\n",sep='', end='')
for i in range(n):
for m in range(i):
print(" ", sep='', end='')
for j in range(2*n-2*i-1):
print("*",sep='',end='')
print("\n",sep='', end='')
运行结果:
6题目
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和
a=
2b=
1s=a/b
for i
in
range(
19): c=a a=a+b b=c s=s+a/b
print(s)
运行结果:
7 题目:
回数是指从左向右读和从右向左读都是一样的数,例如123321,909。请利用filter()滤掉非回数
filter()把传入的函数一次作用于每个元素,然后如果返回值是True,则保留该元素,如果返回值为False,则丢弃该元素。
利用切片方法:[::-1]含义就是,所有列表里的数,每负1,取一个。也就是将所有元素反向。
#原始方法
def first(n):
for i in range(n+1):
s=str(i)
if(s==s[::-1]):
print(s," ", end="")
#filter()
def huishu(n):
s = str(n)
return s == s[::-1]
if __name__ == "__main__":
n = int(input("您要查询前多少的回数?\n请您输入:"))
print("原始方法:")
first(n+1)
print("\t")
print("filter():")
result = filter(huishu,range(1,(n+1)))
print(list(result))
运行结果: