ONLINE_习题集【持续更新...】

习题集

一、递归

1.1 使用递归实现:计算某个数的阶乘

阶乘概念:一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!

def factorial(n):
    if n < 0:
        return "负数没有阶乘"
    elif n == 0 or n == 1:
        return 1
    else:
        return factorial(n - 1) * n

1.2 使用递归函数来实现获取斐波拉契数列中第n个数字的值

斐波拉契数列概念:从第3个数开始,后一个数等于前面两个数的和

def get_fib(count):
    if count <= 0:
        return "输入正数"
    if count <= 2:
        return count - 1
    else:
        return get_fib(count - 1) + get_fib(count - 2)

二、函数封装

2.1 封装函数实现如下要求

例如:输入2,5
则求:2+22+222+2222+22222的和

def sum(x, y):
    result = 0
    item = 0
    for i in range(y):
        z = x * pow(10, i)
        item += z
        result += item
    return result

2.2 判断某个数是否是素数,返回结果

素数概念:质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数

def prime_number(n):
	if n <= 1:
		print("{}不是质数".format(n))
		return 0
	
	elif n > 1:
		for i in range(2, n):
			# for循环寻找因子
			if n % i == 0:
				print("{}不是质数".format(n))
				return 0
		# 此处注意缩进位置:一定要在for循环完了还没找到因子的情况下才执行下方代码	
		print("{}是质数".format(n))
		return 1

2.3 计算2-100之间素数的个数,返回结果

调用一下2.2的函数:

def prime_count(a,b):
	count = 0
	for i in range(a,b+1):
		if prime_number(i):
			count += 1
	print("{}到{}之间的质数个数为{}个".format (a,b,count))
prime_count(2,100)

打印结果:

2100之间的质数个数为25

2.4 交换某两个变量的值

使用临时变量

引入一个新的变量:

def exchange_value(value1, value2):
	a = value1
	b = value2
	# 引入新的变量c进行交换
	c = a
	a = b
	b = c
	print("value1={}, value2={}".format(a, b))
	return a, b
	
exchange_value(1,2)

输出结果;

value1=2, value2=1
不使用临时变量
1. 算术法
def exchange_value(value1, value2):
	a = value1
	b = value2
	a = a + b
	b = a - b
	a = a - b
	print("value1={}, value2={}".format(a, b))
	return a, b
	
print(exchange_value(1,2))

输出结果:

value1=2, value2=1
(2, 1)
2. 异或法
def exchange_value(value1, value2):
	a = value1
	b = value2
	a = a ^ b
	b = a ^ b
	a = a ^ b
	print("value1={}, value2={}".format(a, b))
	return a, b
	
print(exchange_value(1,2))

输出结果:

value1=2, value2=1
(2, 1)
3. py独有法
def exchange_value(value1, value2):
	a = value1
	b = value2
	a, b = b, a
	print("value1={}, value2={}".format(a, b))
	return a, b
	
print(exchange_value(1,2))

输出结果:

value1=2, value2=1
(2, 1)

三、数据类型

3.1 将元组(1,2,3)和集合(“four”,5,6)合成一个列表

tuple1 = (1,2,3)
set1 = ("four",5,6)
list1 = (tuple1,set1)
print(list1)
((1, 2, 3), ('four', 5, 6)

3.2 将列表[3,7,0,5,1,8]中大于5元素置为0,小于5的元素置为1

list = [3,7,0,5,1,8]
for i in range(len(list)):
	if list[i] > 5:
		list[i] = 0
	elif list[i] < 5:
		list[i] = 1
print(list)
[1, 0, 1, 5, 1, 0]

3.3 将列表[“mo”,“deng”,“ge”]和[1,2,3]转换成[(“mo”,1),(“deng”,2),(“ge”,3)]

list1 = ["mo","deng","ge"]
list2 = [1,2,3]
newlist = []
for i in range(3):
	a = list1[i]
	b = list2[i]
	c = (a,b)	
	newlist.append(c)
print(newlist)

3.4 若a = dict(),令b = a,执行b.update({“x” : 1}),a亦改变,为何,如何避免

# 创建变量a时会在内存中给dict()开辟一个空间
a = dict()
# 创建变量b时会在被分配到与变量a同名同一个内存空间
b = a
print(id(a))
print(id(b))
b.update({"x" : 1})
print(a)
# 由此可见python中的赋值符号只是传地址(引用)并非传值(拷贝)

import copy
c = copy.deepcopy(a)
print(id(c))
c.update({"y" : 2})
print(c)
print(a)
# a并未改变由此可见深度拷贝才是传值
139869967054960
139869967054960
{'x': 1}

139869967592256
{'x': 1, 'y': 2}
{'x': 1}

3.5 将二维结构[[‘a’,1],[‘b’,2]]和((‘x’,3),(‘y’,4))转化成字典

使用dict()函数

list = [['a',1],['b',2]]
tuple = (('x',3),('y',4))
print(dict(list))
print(dict(tuple))
{'a': 1, 'b': 2}
{'x': 3, 'y': 4}

四、IO

4.1 封装一个删除文件函数os.remove()

import os
def deleteFile(fileName):
	listdir = os.listdir(os.getcwd())
	if fileName in listdir:
		os.remove(fileName)
		return 文件已删除
	else:
		return 文件不存在

4.2 简述os.walk()和os.chdir()作用和写一个例子并打印结果

os.walk()
os.chdir()

os.chdir() 方法用于改变当前工作目录到指定的路径。语法:os.chdir(path)

import os

# 获取当前工作目录
pwd = os.getcwd()
print("当前工作目录是:{}".format(pwd))

# 指定工作目录
cpath = "/tmp"

cwd = os.chdir(cpath)
print("工作目录修改为:{}".format(cpath))

打印结果为:

当前工作目录是:/box
工作目录修改为:/tmp

五、RE(Regular Express)

5.1 验证电子邮件字符串是否合法

要求:

  1. @之前不能包含(中杠)-,及其他$&等符号,但可以包含(点) . ,开头字母和数字
  2. 统一命名is_valid_email()
  3. @之后数字或者字母
  4. 后缀.com.gov.net任一结尾
import re

def is_valid_email():
	inputStr = input("请输入内容:")
	pattern = re.compile('\w+\.?\w+@\w+\.com|gov|net')
	m = pattern.search(inputStr)
	print(m)
	
is_valid_email()

5.2 提取合法的电子名词

import re

def find_valid_email():
	inputStr = input("请输入内容:")
	pattern = re.compile('\w+\.?\w+@\w+\.com|gov|net')
	m = pattern.findall(inputStr)
	print(m)
	
find_valid_email()

六、面向对象

6.1 定义一个类描述数字时钟

要求:给定一个时间,例如15:50:00,则最终的效果为,如图…

import time

class DesClock(object):
	def localTime(self):
		i = 20
		while i > 0:
			t = time.strftime("%H:%M:%S",time.localtime())
			print(t)
			i -= 1
			time.sleep(1)

a = DesClock()
a.localTime()

6.2 定义管理员类:

管理员类有属性(name,password),可以创建学校、创建课程、创建老师

class Admin(object):
	def __init__(self):
		self.name = admin
		self.password = 666666
	
	def creatSchool(self):
		print("创建学校")
		
	def creatCourse(self):
		print("创建课程")
		
	def creatTeacher(self):
		print("创建老师")
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值