python练习题
1、打印九九乘法表
方法一
for y in range(1,10):
for x in range(1,10):
if x <= y:
print("{}x{}={}".format(x, y, x*y), end='\t')
print()
方法二
for i in range(1, 10):
for j in range(1, i+1):
print("{}*{}={} ".format(j, i, i*j), end='\t')
print()
2、用户登录验证
- 用户依次输入用户名和密码,然后提交验证
- 用户不存在、密码错误,都显示用户名或密码错误提示
- 错误3次,则退出程序
- 验证成功则显示登录信息
user = 'user'
passwd = 'passwd'
count = 0
while True:
u = input('pls input your username:')
p = input('pls input your password:')
if user == u and passwd ==p:
print('login successful')
break
else:
print('username and password do not match!')
count += 1
if count == 3:
print('too many trys!')
break
3、求100内奇数和
plus=0
for i in range(1,100,2):
plus += i
print(plus)
4、求100内斐波那契数列
a = 0
b = 1
print(a)
while True:
print(b)
a, b = b, a+b
if b >= 100:
break
5、求斐波那契数列第101项
方法一
x = [0,1]
for i in range(2,102):
x.append(x[i-1]+x[i-2])
print(x[-1])
方法二
a = 0 # f(0)
b = 1 # f(1)
count = 1
while True:
print(count, b)
a, b = b, a + b
if count >= 101:
break
count += 1
方法三
@lru_cache()
def fib(n):
return 1 if n < 3 else fib(n-1) + fib(n-2)
递归的方式,因为使用了lru_cache进行了缓存,用空间换时间所以效率也不错,缓存保留最后计算的128(默认参数)个值。
6、打印如下菱形
*
***
*****
*******
*****
***
*
方法一
补空格
n = 7
x = n // 2
for i in range(-x, x + 1):
print(' ' * abs(i), '*' * (n-2*abs(i)))
方法二
字符串居中
n = 7
x = n // 2
for i in range(-x, n - x):
print("{:^{}}".format('*' * (n-2*abs(i)), n))
7、从nums = [1, (2, 3, 4), 5]中,提取其中4出来
nums = [1, (2, 3, 4), 5]
print(nums[1][2])
8、从list(range(10))中,提取第二个、第四个、倒数第二个元素
x=list(range(10))
print(x[1])
print(x[3])
print(x[-2])
9、给出3个整数,使用if语句判断大小,并升序输出
a = 7
b = 5
c = 9
if a >= b:
a, b = b, a
if b >= c:
b, c = c, b
print(a,b,c)
10、有一个列表lst = [1,4,9,16,2,5,10,15],生成一个新列表,要求新列表元素是lst相邻2项的和
lst = [1,4,9,16,2,5,10,15]
print([lst[i]+lst[i+1] for i in range(len(lst)-1)])
11、随机生成100个产品ID,ID格式如下
- 顺序的数字6位,分隔符点号,10个随机小写英文字符
- 例如 000005.xcbaaduixy
import random
string = ''.join(chr(i) for i in range(0x61,0x61+26))
for i in range(1,101):
print("{:0>6}.{}".format(i, ''.join(random.choices(string, k = 10))))
12、编写一个函数,接受一个参数n,n为正整数,上下三角两种打印方式。要求数字必须对齐
上三角:
1
2 1
3 2 1
4 3 2 1
5 4 3 2 1
6 5 4 3 2 1
7 6 5 4 3 2 1
8 7 6 5 4 3 2 1
9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
11 10 9 8 7 6 5 4 3 2 1
12 11 10 9 8 7 6 5 4 3 2 1
13 12 11 10 9 8 7 6 5 4 3 2 1
下三角:
13 12 11 10 9 8 7 6 5 4 3 2 1
12 11 10 9 8 7 6 5 4 3 2 1
11 10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
9 8 7 6 5 4 3 2 1
8 7 6 5 4 3 2 1
7 6 5 4 3 2 1
6 5 4 3 2 1
5 4 3 2 1
4 3 2 1
3 2 1
2 1
1
def printtoptriangle(n):
last = " ".join(map(str, range(n, 0, -1)))
width = len(last)
for i in range(1, n):
line = " ".join(map(str, range(i, 0, -1)))
print("{:>{}}".format(line, width))
print(last)
def printtailtriangle(n):
last = " ".join(map(str, range(n, 0, -1)))
width = len(last)
for i in range(n, 0, -1):
line = " ".join(map(str, range(i, 0, -1)))
print("{:>{}}".format(line, width))
print("上三角:")
printtoptriangle(13)
print("下三角:")
printtailtriangle(13)
13、编写一个函数,能够接受至少2个参数,返回最小值和最大值
使用内建函数(还可以用sorted函数),总时间复杂度是O(2n)
def selectmaxandmin(*args):
return max(*args), min(*args)
以下方式使用循环只运行一趟,实现时间复杂度为O(n)
def topnum(x, y, *args):
ma, mi = (x, y) if x > y else (y, x)
for i in args:
if i > ma:
ma = i
if i < mi:
mi = i
return ma, mi
14、求n的阶乘
迭代法
def factorial(n):
if n == 0:
return 1
elif n > 0:
return n*factorial(n-1)
else:
return None
循环法
def factorial2(n):
final = 1
if n == 0:
return 1
elif n > 0:
for i in range(1,n+1):
final *= i
return final
else:
return None
循环法效率高于迭代。
15、解决猴子吃桃问题
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想吃时,只剩下一个桃子了。求第一天共摘多少个桃子?
迭代法
def monkey(n):
return 1 if n == 1 else (monkey(n-1)+1)*2
print(monkey(10))
循环法
def monkey2(n):
total = 1
for i in range(1,n):
total = 2*(total+1)
return total
print(monkey2(10))
16、复制目录
选择一个已存在的目录作为当前工作目录,在其下创建a/b/c/d这样的子目录结构并在这些子目录的不同层级生成50个普通文件,要求文件名由随机4个小写字母构成。
将a目录下所有内容复制到当前工作目录dst目录下去,要求复制的普通文件的文件名必须是x、y、z开头。
举例,假设工作目录是/tmp,构建的目录结构是/tmp/a/b/c/d。在a、b、c、d目录中放入随机生成的文件,这些文件的名称也是随机生成的。最终把a目录下所有的目录也就是b、c、d目录,和文件名开头是x、y、z开头的文件。
from pathlib import Path
import shutil
from string import ascii_lowercase
import random
basedir = Path('d:/tmp')
subpath = Path('a/b/c/d')
dst = Path('dst')
(basedir/subpath).mkdir(mode = 0o777, parents = True, exist_ok = True) #等同于mkdir -p
dirs = (subpath, *subpath.parents)[:-1] #把表示当前目录的'.'去掉
print(dirs)
files = ("".join(random.choices(ascii_lowercase, k=4)) for i in range(50))#生成文件名
for name in files: #创建文件
(basedir/random.choice(dirs)/name).touch()
heads = set('xyz')
def ignorefiles(src, names):
print(names)
return set(filter(lambda name: name[0] not in heads and not Path(src, name).is_dir(), names)) #filter返回的结果是迭代器对象
shutil.rmtree(str(basedir/dst), True)
shutil.copytree(str(basedir/'a'), str(basedir/dst), ignore=ignorefiles)
print('*' * 30)
for file in (basedir/dst).rglob('*'):
print(file)

浙公网安备 33010602011771号