python 习题

使用蒙特-卡罗方法计算圆周率近似值

蒙特-卡罗方法是一种通过概率来得到问题近似解的方法。假设又一块边长为2的正方形木板,上面画一个单位圆,然后随意往木板上扔飞镖,落点坐标(x,y)必然在木板上(更多的是落在单位圆内),如果扔的次数足够多,那么落在单位圆内的次数除以总次数再乘以4,这个次数会无限接近圆周率的值。

from random import random
times = int(input('请输入掷飞镖次数:'))
hits = 0
for i in range(times):x = random()y = random()if x*x+y*y<=1 :hits += 1
print(4.0*hits/times)

求素数

1.使用列表实现筛选法

maxNumber = int(input('请输入一个大于2的自然数:'))
lst = list(range(2,maxNumber))
# 最大整数的平方根
m = int(maxNumber**0.5)
for index,value in enumerate(lst):# 如果当前数字已大于最大整数的平方根,结束判断if value > m:break# 对该位置之后的元素进行过滤lst[index+1:] = filter(lambda x: x%value != 0,lst[index+1:])
print(lst)

2.使用集合实现筛选法

maxNumber = int(input('请输入一个大于2的自然数:'))
numbers = set(range(2,maxNumber))
# 最大整数的平方根,以及小于该数字的所有素数
m = int(maxNumber**0.5)+1
primesLessThanM = [p for p in range(2,m)if 0 not in [p%d for d in range(2,int(p**0.5)+1)]]
# 遍历最大整数平方根之内的自然数
for p in primesLessThanM:for i in range(2,maxNumber//p+1):# 在集合中删除数字所有的倍数numbers.discard(i*p)
print(numbers)

小明爬楼梯

假设一段楼梯共15个台阶,小明一步最多能上3个台阶。递推法,递归法。

def climbStairs1(n):# 递推法a = 1b = 2c = 4for i in range(n-3):c,b,a = a+b+c,c,breturn c
def climbStairs2(n):# 递归法first3 = {1:1,2:2,3:4}if n in first3.keys():return first3[n]else:return climbStairs2(n-1) + \climbStairs2(n-2) + \climbStairs2(n-3)
print(climbStairs1(15))
print(climbStairs2(15))

蒙蒂霍尔

假设你正参加一个有奖游戏节目,并且有3道门可选:其中一个后面是汽车,另外两个后面是山羊。你选择一个门,比如说1号门,主持人当然知道每个门后面是什么并且打开了一个门,比如说3号门,后面是一只山羊。这时,主持人会问你“你想改选2号门吗?”,然后根据你的选择确定最终要打开的门,并确定你获得山羊(输)或者汽车(赢)。

from random import randrangedef init():# 返回一个字典,键为3个门号,值为门后的物品result = {i: 'goat' for i in range(3)}r = randrange(3)result[r] = 'car'return resultdef startGame():# 获取本次游戏中每个门的情况doors = init()# 获取玩家选择的门号while True:try:firstDoorNum = int(input('Choose a door to open:'))assert 0 <=firstDoorNum <= 2breakexcept:print('Door number must be between {} and {}'.format(0,2))# 主持人查看另外两个门后的物品情况for door in doors.keys()-{firstDoorNum}:# 打开其中一个后面为山羊的门if doors[door] == 'goat':print('"goat" behind the door', door)# 获取第三个门号,让玩家纠结thirdDoor = (doors.keys()-{door,firstDoorNum}).pop()change = input('Switch to {}?(y/n)'.format(thirdDoor))finalDoorNum = thirdDoor if change == 'y' else firstDoorNumif doors[finalDoorNum] == 'goat':return 'I win!'else:return 'You win.'
while True:print('='*30)print(startGame())r = input('Do you want to try once more?(y/n)')if r == 'n':break

猜数游戏

程序运行时,系统生成一个随机数,然后提示用户进行猜测,并根据用户输入进行必要的提示(猜对了、太大了、太小了),如果猜对则提前结束程序,如果次数用完仍没有猜对,提前游戏结束并给出正确答案。

from random import randint
def guessNumber(maxValue=10,maxTimes=3):# 随机生成一个整数value = randint(1,maxValue)for i in range(maxTimes):prompt = 'Start to GUESS:(1-10)' if i==0 else 'Guess again:'# 使用异常处理结构,防止输入不是数字的情况try:x = int(input(prompt))except:print('Must input an integer between 1 and ',maxValue)else:if x == value:# 猜对了print('Congratulations!')breakelif x > value:print('Too big')else:print('Too little')else:# 次数用完还没猜对,游戏结束,提示正确答案print('Game ouer.FAIL.')print('The value is ',value)
guessNumber()

抓狐狸游戏

假设一共有一排5个洞口,小狐狸最开始的时候在其中一个洞口,然后玩家随机打开一个洞口,如果里面有狐狸就抓到了。如果洞口里没有狐狸就第二天再来抓,但是第二天狐狸会在玩家来抓之前跳到隔壁洞口里。

from random import choice,randrange
def catchMe(n=5,maxStep=10):'''模拟抓小狐狸,一共n个洞口,允许抓maxStep次如果失败,小狐狸就会跳到隔壁洞口'''# n个洞口,有狐狸为1,没有狐狸为0positions = [0] * n# 狐狸的随机位置oldPos = randrange(0,n)positions[oldPos] = 1# 抓maxStep次while maxStep >= 0:maxStep -= 1# 这个循环保证用户输入的是有效洞口编号while True:try:x = input('今天打算打开哪个洞口(0-{0}):'.format(n-1))# 如果输入的不是数字,就会跳转到except部分x = int(x)# 如果输入的洞口有效,结束这个循环,否则就继续输入assert 0 <= x < n,'要按套路来啊,再给你一次机会。'breakexcept:# 如果输入的不是数字,就执行这里的代码print('要按套路来啊,再给你一次机会。')if positions[x] == 1:print('成功,我抓到小狐狸啦。')breakelse:print('今天又没抓到。')# 如果这次没抓到,狐狸就跳到隔壁洞口if oldPos == n-1:newPos = oldPos - 1elif oldPos == 0:newPos = oldPos + 1else:newPos = oldPos + choice((-1,1))positions[oldPos],positions[newPos] = 0,1oldPos = newPoselse:print('放弃吧,你这样乱试是没有希望的。')
# 启动游戏,开始抓狐狸吧
catchMe()

汉诺塔问题

据说古代有一个梵塔,塔内有三个底座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子。在移动盘子的过程中可以利用B座,但任何时候3个座上的盘子都必须始终保持大盘在下、小盘在上额顺序。如果只有一个盘子,则不需要利用B座,直接将盘子从A移动到C即可。

def hannoi(num,src,dst,temp=None):if num < 1:returnglobal times    # 声明用来记录移动次数的变量为全局变量# 递归调用函数本身,先把除最后一个盘子之外的所有盘子移动到临时柱子上hannoi(num-1,src,temp,dst)# 移动最后一个盘子print('The {0} Times move:{1}-->{2}'.format(times,src,dst))towers[dst].append(towers[src].pop())for tower in 'ABC':    # 输出3根柱子上的盘子print(tower,':',towers[tower])times += 1# 把除最后一个盘子之外的其他盘子从临时柱子上移动到目标柱子上hannoi(num-1,temp,dst,src)
times = 1   # 用来记录移动次数的变量
n = 3   # 盘子的数量
towers = {'A':list(range(n,0,-1)),'B':[],'C':[]}
# A 表示最初放置盘子的柱子,C是目标柱子,B是临时柱子
hannoi(n,'A','C','B')

凯撒加密

输入一个字符串,然后输入一个整数作为凯撒加密算法的密钥,然后输出该字符串加密后的结果。

import string
def kaisa():s = input('请输入一个字符串:')k = int(input('请输入一个整数密钥:'))lower = string.ascii_lowercaseupper = string.ascii_uppercasebefore = string.ascii_lettersafter = lower[k:] + lower[:k] + upper[k:] + upper[:k]table = str.maketrans(before,after)out = s.translate(table)print(out)
kaisa()

自定义类模拟三维向量及运算

定义一个三维向量类,并定义相应的特殊方法实现两个该类对象之间的加、减运算(要求支持运算符+、-),实现该类对象与标量的乘、除运算(要求支持运算符*、/),以及向量长度的计算(要求使用属性实现)。

class Vector3:# 构造方法,初始化,定义向量坐标def __init__(self,x,y,z):self.__x = xself.__y = yself.__z = z# 与一个向量相加,对应分量相加,返回新向量def __add__(self, anotherPoint):x = self.__x + anotherPoint.__xy = self.__y + anotherPoint.__yz = self.__z + anotherPoint.__zreturn Vector3(x,y,z)# 减去另一个向量,对应分量相减,返回新向量def __sub__(self, anotherPoint):x = self.__x - anotherPoint.__xy = self.__y - anotherPoint.__yz = self.__z - anotherPoint.__zreturn Vector3(x, y, z)# 向量与一个数字相乘,各分量乘以同一个数字,返回新向量def __mul__(self, n):x, y, z = self.__x*n, self.__y*n, self.__z*nreturn Vector3(x,y,z)# 向量除以一个数字,各分量除以同一个数字,返回新向量def __truediv__(self, n):x, y, z = self.__x/n, self.__y/n, self.__z/nreturn Vector3(x, y, z)# 查看向量长度,所有分量平方和的平方根@propertydef length(self):return (self.__x**2 + self.__y**2 + self.__z**2)def __str__(self):return 'Vector3({},{},{})'.format(self.__x,self.__y,self.__z)v1 = Vector3(3, 4, 5)
v2 = Vector3(5, 6, 7)
print(v1+v2)
print(v1-v2)
print(v1*3)
print(v2/2)
print(v1.length)

文本文件操作

编写一个程序demo.py,要求运行该程序后,生成demo_new.py文件,其中内容与demo.py一样,只是在每一行的后面加上行号以#开始,并且所有行的#符号垂直对齐。

filename = 'demo.py'
with open(filename, 'r') as fp:lines = fp.readlines()
maxLength = len(max(lines, key=len))lines = [line.rstrip().ljust(maxLength)+'#'+str(index)+'\n'for index, line in enumerate(lines)]
with open(filename[:-3]+'_new.py', 'w') as fp:fp.writelines(lines)

磁盘垃圾文件清理器

要求程序运行时,通过命令行参数指定要清理的文件夹,然后删除该文件夹及其子文件夹中所有扩展名为tmp、log、obj、txt以及大小为0的文件。

from os.path import isdir,join,splitext
from os import remove,listdir,chmod,statfiletypes = ('.tmp','.log','.obj','.txt')def test2(directory):if not isdir(directory):returnfor filename in listdir(directory):temp = join(directory,filename)if isdir(temp):test2(temp)elif splitext(temp)[1] in filetypes or stst(temp).st_size == 0:chmod (temp,0o777)remove(temp)print(temp,'deleted...')
test2(r'D:\test')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440145.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++11中的std::function

原文地址&#xff1a;http://www.jellythink.com/archives/771 看看这段代码 先来看看下面这两行代码&#xff1a; std::function<void(EventKeyboard::KeyCode, Event*)> onKeyPressed; std::function<void(EventKeyboard::KeyCode, Event*)> onKeyReleased; 这两…

【HDU - 3394】Railway(点双连通分量,Tarjan算法,思维tricks)

题干&#xff1a; There are some locations in a park, and some of them are connected by roads. The park manger needs to build some railways along the roads, and he would like to arrange tourist routes to each circuit. If a railway belongs to more than one …

飞机大战(简易版)

一、游戏分析 飞机大战中的主要“角色”有&#xff1a; 1.英雄 2.敌方飞机 3.英雄发射的子弹 我们需要控制的有&#xff1a; 1.绘制屏幕内的角色 2.控制角色的逻辑&#xff0c;比如&#xff1a;敌方飞机与我方飞机的碰撞检测&#xff0c;我方飞机发射的子弹与敌方飞机之间的碰撞…

在Ubuntu上安装Keras深度学习框架

目录 1&#xff09;安装pip 2&#xff09;安装Python科学套件 3&#xff09;安装TensorFlow 4&#xff09;安装keras 5&#xff09;安装Jupyter Notebook 6&#xff09;运行Keras 本文介绍如何在Ubuntu上安装Keras深度学习框架。 1&#xff09;安装pip 安装pip包&#…

【POJ - 1523】SPF(Tarjan求割点,求分割成的连通块数,模板题,tricks)

题干&#xff1a; Consider the two networks shown below. Assuming that data moves around these networks only between directly connected nodes on a peer-to-peer basis, a failure of a single node, 3, in the network on the left would prevent some of the still…

C++11 FAQ中文版:std::function 和 std::bind

std::function 和 std::bind 标准库函数bind()和function()定义于头文件中&#xff08;该头文件还包括许多其他函数对象&#xff09;&#xff0c;用于处理函数及函数参数。bind()接受一个函数&#xff08;或者函数对象&#xff0c;或者任何你可以通过”(…)”符号调用的事物&am…

Java 习题(面向对象)

1.&#xff08;面向对象基础&#xff09;写一个Worker 类&#xff0c;并创建多个Worker 对象。 为Worker 类添加四个属性&#xff0c; <1>int 类型的id&#xff0c;表示工人的编号&#xff1b; <2>String 类型的name&#xff0c;表示工人的姓名&#xff1b; <3…

机器学习笔记(2):单变量线性回归

目录 1&#xff09;Model representation 2&#xff09;Cost function 3&#xff09;Cost function intuition 1 4&#xff09;Cost function intuition2 5&#xff09;Gradient descent 6&#xff09;Gradient descent intuition 7&#xff09;Gradient descent for li…

指针右左法则----复杂指针解析

其实如果写得出&#xff08;其实不难&#xff09;指针和数组的声明的EBNF的话&#xff0c;那么直接看就可以反应过来了…… 右左法则是一个既著名又常用的方法。不过&#xff0c;右左法则其实并不是C标准里面的内容&#xff0c;它是从C标准的声明规定中归纳出来的方法。C标准的…

【POJ - 3694】Network(对dfn求lca 或 缩点+lca 或 边双连通+并查集)

题干&#xff1a; 网络管理员管理大型网络。该网络由N台计算机和成对计算机之间的M链路组成。任何一对计算机都通过连续的链接直接或间接连接&#xff0c;因此可以在任何两台计算机之间转换数据。管理员发现某些链接对网络至关重要&#xff0c;因为任何一个链接的故障都可能导…

安装VMware tools

点击“虚拟机” 安装VMware tools提取图中文件到“下载” 提取登入root 进入 cd 下载/vmware-tools-distrib 执行 ./vmware-install-pl 输入yes或者点击“enter”出现图中&#xff0c;即为成功安装

Keras入门实战(1):MNIST手写数字分类

目录 1)首先我们加载Keras中的数据集 2&#xff09;网络架构 3&#xff09;选择编译(compile参数) 4&#xff09;准备图像数据 5) 训练模型 6&#xff09;测试数据 前面的博客中已经介绍了如何在Ubuntu下安装Keras深度学习框架。 现在我们使用 Keras 库来学习手写数字分…

什么是BNF EBNF 巴科斯范式及其扩展 BNF Augmented BNF

什么是BNF范式,什么又是EBNF范式? 巴科斯范式及其扩展 BNF & Augmented BNF 什么是巴科斯范式&#xff1f;   巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集。   现在&…

root 进入ssh 出现问题

用root输入下面命令&#xff0c;一直让输入密码&#xff0c;并提示错误 ssh localhost那是因为系统默认禁止root用户登录ssh 首先&#xff0c;CtrlC退出密码输入界面&#xff1a;然后输入&#xff1a;su - 然后&#xff0c;编辑sshd_config文件&#xff0c;输入&#xff1a;…

【BZOJ - 2574】[Poi1999] Store-Keeper(点双连通分量,求割点,记忆化bfs)

题干&#xff1a; 有一个仓库被分成n*m 个矩形区域&#xff0c;如果两个区域有一条公共边&#xff0c;则被认为这两个区域相邻。包裹都放在一个区域中&#xff0c;剩余的区域或者空闲或者被集装箱占有&#xff0c;这是因为集装箱太重&#xff0c;仓库管理员不能将集装箱搬走。…

机器学习笔记(3):线性代数回顾

目录 1&#xff09;Matrices and vectors 2&#xff09;Addition and scalar multiplication 3&#xff09;Matrix-vector multiplication 4&#xff09;Matrix-matrix multiplication 5&#xff09;Matrix multiplication properties 6&#xff09;Inverse and transpos…

hadoop 安装

Hadoop单机和伪分布式安装 更新apt 用root用户登录 先更新一下 apt apt-get update然后安装vim apt-get install vim安装VMware tools tools 安装 安装SSH、配置SSH无密码登陆 单节点模式都需要用到 SSH 登陆&#xff0c;Ubuntu 默认已安装了 SSH client&#xff0c;此…

机器学习笔记(4):多变量线性回归

目录 1&#xff09;Multiple Features 2&#xff09;Gradient descent for multiple variables 3&#xff09;Gradient descent in practice 1: Feature Scaling 4&#xff09;Gradient descent in pratice2: Learning rate 5&#xff09;Features and polynomial regress…

【POJ - 2942】Knights of the Round Table(点双连通分量,二分图判断奇环奇圈)

题干&#xff1a; Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress, and drinking with the other knights are fun things to do. Therefore, it is not very surprising that in recent years the kingdom of King …

zookeeper单节点部署

hadoop 安装 在/install-package目录下查看zookeeper的安装包 本文中安装的是zookeeper-3.4.12.tar.gz 下方为百度云链接 链接&#xff1a;https://pan.baidu.com/s/1bzq4ILH41owtS__3tBCcRQ 提取码&#xff1a;6q4r 把下载好的zookeeper-3.4.12.tar.gz 放到/install-packa…