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塔
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/bfor i in range(19): c=a a=a+b b=c s=s+a/bprint(s)
运行结果:
7 题目:回数是指从左向右读和从右向左读都是一样的数,例如123321,909。请利用filter()滤掉非回数
filter()把传入的函数一次作用于每个元素,然后如果返回值是True,则保留该元素,如果返回值为False,则丢弃该元素。
利用切片方法:[::-1]含义就是,所有列表里的数,每负1,取一个。也就是将所有元素反向。
利用切片方法:[::-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))运行结果: