Python一键生成井身结构图
井身结构图绘制-PPT课件
采油培训基地培训期间学员管理规定
一、学员在培训期间必须服从培训基地的管理和安排,要完成培训任务,达到培训 要求,培训后要参加结业考试。 二、培训期间坚持学员签到、点名制度。上、下午签到点名,不允许无故迟到、早 退、旷课。出现无故迟到、早退、旷课三次者将退回原单位,按不服从管理处理。 三、学员必须服从授课教师管理,上课期间认真听讲,不准有接打手机、随意走动、 随意说话等现象发生影响他人学习。出现以上现象,经教育不改者,停止培训退回原 单位。 四、培训期间,严禁学员打架斗殴、酗酒赌博,严格遵守作息时间。 五、师生共同创造良好学习环境,树立良好的职业道德。学员要衣着整洁,用语文 明,尊敬教师,团结同学,虚心好学,勤学苦练,争创一流。 六、爱护培训器材设备,维护公共卫生,不准在教室内乱扔杂物,不准在教室内吸 烟。 七、在实际操作过程中,要严格遵守QHSE操作程序。实际操作培训期间必须穿戴 劳保用品和佩带相关证件。 八、学员因事请假,一天之内向培训办请假;一天以上向组织人事科申请批准,在 培训办备案后,方能请假外出。 九、培训办负责建立健全学员成绩、纪律管理档案,并对其进行登记、通报。培训 班结业后,作业区视学员出勤、学习情况给予考核,与员工绩效工资挂钩。 十、学员成绩和违纪情况由培训办公室汇总后,交由组织人事科按《学员奖惩管理 细则》进行处理。
8、人工井底:油井固井完成留在套管内最 下部一段水泥凝固后的顶面。
三、有关名词解释
9、水泥返高:固井时油层套管和井壁之间 的环形空间的水泥上返高度。 10、水泥塞:固井后,从完钻井底至人工 井底这段水泥柱。
11、油井完井方法:裸眼完井法、射孔完 井法、衬管完井法、砾石充填完井法。
如何使用python做出思维导图
如何使用Python做出思维导图首先,Python是一种跨平台的计算机程序设计语言。
是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。
其次,思维导图,英文是The Mind Map,又叫心智导图,是一种形象的展示各级隶属关系的图形,它具有较强的逻辑性和可视性,能够帮助理清工作思路。
那么,当我们想要通过Python画出思维导图,具体要怎么操作呢?下面将讲述如何用pyecharts画思维导图。
一、基本思维导图from pyecharts import options as optsfrom pyecharts.charts import Treedata = [{"name": "python变量","children": [{"name": "字符串","children": [{"name": "实例1:'abc'"}, {"name": "实例2:'123abc'"}]},{"name": "列表","children": [{"name": "实例1:[a,b,c]"}, {"name": "实例2:'[1,2,3]"}]},{"name": "字典","children": [{"name": "实例1:{1:'a','2':'b'}}"}, {"name": "实例2:'{a:[1,2,3],'2':(1,2))}"}]},{"name": "元组","children": [{"name": "实例1:(1,2,3)}"}, {"name": "实例2:(a,b,c)"}]}]}]c = (Tree().add("", data))c.render_notebook()整个数据是1个列表,列表内只有1个字典元素,字典以“name”为键的值为思维导图的起点,以“children”为键的值为name的下一节点,其值仍为列表格式,依次类推。
井身结构设计
3)对一个油田或区块而言,井身结
构设计常常不能一次完成。随着对 地层情况的更多了解,钻井、钻井 液和固井工艺技术水平的提高,井 身结构应逐步简化和优化。
9
井身结构设计的发展
9.1经验积累阶段(1900~1960)
特点:井不深(3000m左右),地层情况还
不太复杂,井身结构设计靠实践中积累 的经验来做。 任务:为适应工业化大生产的需要,有 关井身结构设计的研究工作主要面临规 范化、标准化问题。 取得的主要成果有:
面面构成一个系统,再根据系统工程的 原理及方法,由压力平衡关系(钻井液压 力、地层孔隙压力、地层破裂压力和盐 岩蠕变压力)、工程约束条件(垮塌井段、 漏失井段和套管挤毁井段)、事故发生概 率等相关因素,采用风险决策技术和优 化技术,进行合理井身结构设计。
对比:常规井身结构设计是一种系统局
部优化方法,而解决复杂地质情况的井 身结构设计方法则是系统全面优化方法。 现状:由于复杂地质情况在不同的构造、 井别将有不同的表现,针对实际情况影 响因素将有不同的取舍,因此,很难找 到一种统一的、适应面极广的井身结构 设计方法,这也是国内外同类研究工作 至今未能成果的主要原因。
完井工程
2011
开课必做
课程介绍:名称/性质/学时/周学时/结课时间。 成绩评定方法:平时20%,结课考试80%。 平时成绩评定方法:1)考勤和课堂纪律;2) 课堂提问;3)作业。 结课考试:时间/题型/题量/分值/考后要求。 答疑:时间和地点。
绪论
完井工程定义:指从钻开油气层到
1)导管及其作用:是最早下入井内的 一层临时性管子。导管的作用是在 钻表层井眼时将钻井液从地表引导 到钻井装置平面上来,这一层管柱 其长度变化较大,在坚硬的岩层中 仅用10~20m,而在沼泽地区则可能 上百米。
井身结构图绘制
明,尊敬教师,团结同学,虚心好学,勤学苦练,争创一流。 六、爱护培训器材设备,维护公共卫生,不准在教室内乱扔杂物,不准在教室内吸
烟。 七、在实际操作过程中,要严格遵守QHSE操作程序。实际操作培训期间必须穿戴
细则》进行处理。
川中油气矿采油采集员技能培训班
井身结构图的绘制
授课人:李忠良 时间:2019年1月
井 身 结 构 图
井身结构图的绘制
一、井别分类 二、井身结构的组成及作用 三、有关名词解释 四、井下工具的作用 五、井身结构图的绘制
一、井别分类
1、生产井:用来采油、气的井。 2、注水井:用来向油、气层内注水的井。 3、探 井:在经过地球物理勘探证实有希
311.2x104.6 215.9x2630.0
大一 大三 射孔数据 人工井底
244.5x102.4
地面
177.8x2627.8
150m
油 层数据 2518.0-2550.8m
2565.6-2596.3m
2518.0-2545.5m 2570.2-2590.0m 2614.7m
四、绘制井身结构图注意事项
1、整体比例不合理、歪斜,应占整体幅面 的1/3。
2、所有字体是楷书或仿宋。 3、井身结构图是粗实线,辅助线是细实线。 4、钻头、套管上大下小。 5、间断线的画法。
四、绘制井身结构图注意事项
6、射孔的箭头应朝外。 7、射孔与油层分层的名称和数据不对称。 8、水泥返高是距离地面的高度,不是距离
采油培训基地培训期间学员管理规定
水平井剖面及井身结构设计
L102-P5 374.6mm×503m+215.9mm×2206m 273.1mm×501.8m+139.7mm×2201m
对于中深层水平井,为了降低施工摩阻扭矩、封
隔高低油气层段和易塌易漏层段,均设计为三开井身
结构,95/8"技术套管封馆陶, 具体下深根据馆陶底深 度、造斜点和井身剖面等方面进行确定,尽力降低下
L102-P4 374.6mm×503m+215.9mm×2327m
L102-P5 374.6mm×503m+215.9mm×2206m
套管程序 339.7mm×150m+244.5mm×1600m+139.7 ×2466m 273.1mm×300m+139.7mm×2365m
273.1mm×300m+139.7mm×2499m
273.1mm×500m+139.7mm×2324m
273.1mm×500m+139.7mm×2203m
L102区块五口水平井实钻井身结构数据 表
井号 L102-P1 L102-P2
钻头程序
444.5mm×163m+311.1mm×1603m+ 215.9×2478m
374.6mm×310m+215.9mm×2368m
有利于降低施工过程中的摩阻扭矩 有利于避免漏、喷、塌、卡等井下复杂情况 有利于岩屑的携带 有利于套管的下入 当发生溢流时,具有压井处理溢流的能力,压井时不压漏地层 能有效保护油气藏,尽量采用较小钻井液密度,减小产层污染 有利于提高钻井速度和降低钻井成本
冀东油田水平井主要用于浅层油气藏,其含油 层系为明化、馆陶组,属高丰度边底水构造油藏, 实施水平井的主要目的是进一步完善开发井网,挖 掘剩余油潜力,提高储量动用程度;其次对新区块 进行高效整体开发,提高单井产量。在实施第一口 水平井时,为了确保施工安全顺利,通过对邻井钻 井 资 料 研 究 分 析 , L102-P1 井 井 身 结 构 设 计 为 : 133/8 " +95/8 " +51/2 "尾管,95/8 "技术套管封至 造斜点以上50m,为下步造斜段和水平段施工提供 保证。
用Python编写简单的图像处理和图形生成工具
用Python编写简单的图像处理和图形生成工具Python是一种强大的编程语言,同时也具有广泛的图像处理和图形生成工具,可以帮助我们进行各种图片编辑和图形生成的任务。
接下来,我将介绍几个常用的Python图像处理和图形生成工具,并且提供一些使用示例。
1. PIL(Python Imaging Library): PIL是Python中最常用的图像处理库之一,可以用来打开、编辑和保存各种图像格式的图片。
它提供了丰富的图像处理函数,如缩放、旋转、剪切、滤镜等,可以满足大部分的图像处理需求。
下面是一个使用PIL库进行图像缩放的示例:```pythonfrom PIL import Image#打开图片img = Image.open('input.jpg')#缩放图片new_img = img.resize((500, 500))#保存缩放后的图片new_img.save('output.jpg')```2. OpenCV:OpenCV是一种开源的计算机视觉库,可以用于处理图像和视频。
它支持各种图像处理和计算机视觉任务,如颜色转换、边缘检测、人脸识别等。
OpenCV具有强大的图像处理功能,而且还可以与其他机器学习库结合使用。
下面是一个使用OpenCV库进行图像边缘检测的示例:```pythonimport cv2#读取图片img = cv2.imread('input.jpg')#转换为灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#边缘检测edges = cv2.Canny(gray, 100, 200)#显示结果cv2.imshow('Edges', edges)cv2.waitKey(0)```3. Matplotlib:Matplotlib是一个绘图库,用于生成各种类型的图形,如折线图、散点图、柱状图等。
卡奔连井制图步骤
卡奔连井制图步骤1.打开bendlinkex软件。
2.选“文件”菜单的“新建”命令,建立新的bendlinkex文档。
3.在“剖面图工具栏”中选中“剖面向导”点击。
4.复制需要处理的井基本信息数据,在剖面向导的黑色图面上鼠标右键点击,然后在子菜单中选中“成批插入井”,在弹出的图框中点击“粘贴数据”然后点击“确定”。
5.在工具栏中点击连接井符号,然后从左向右依次点击鼠标左键连接井,连接完成后在弹出的窗口中点击“是”。
6.点击鼠标左键选中一口井,根据所给的数据如AC、SP、GR、R2.5等更改图道名,若图道不够,则在工具栏中选中“新建曲线道”按钮、“新建文本道”按钮,增加所需要的图道类型。
7.加载曲线数据,先将需要的曲线数据复制粘贴到文本文档中保存,注意每一项对应数据不能混乱,然后再选中该井,点击鼠标右键在弹出菜单中选中“从文件加载曲线数据”,然后在找到放文本文档的位置鼠标左键选中,最后点击“确定”完成成批加载曲线数据。
8.也可以选中曲线道,单机“粘贴”一个道一个道粘贴数据,用此方法还可以加载岩性数据、分层数据,文本数据等。
9.双击某一曲线道如AC道,在弹出的一个窗口名为“编辑测井曲线道”中修改该道的左值和右值大小,标题,曲线颜色,图道背景等。
其编辑其他道方法一样。
10.在一口井的分层道上单机鼠标选中层对象然后在该层上点击鼠标左键移到鼠标至另一口井的分层道上(层名相同的层)然后松开鼠标即可连接成功。
以制作地层对比剖面图。
11.将井解释结论中油水层、油层、水层按着鼠标左键拖动,在地层中形成尖灭。
以制作油藏剖面图。
12.在图面任意空白处双击鼠标左键,在弹出的“编辑页面属性”的框中选择要设置的井名、道名、井深标注字体以及字体的颜色、大小等。
13.在工具栏中选中“插入比例尺”按钮,然后在图的左上角空白处,点击鼠标左键拖动一个框然后松开左键比例尺便会出现,然后在弹出的“设置比例尺”对话框中编辑比例尺数据。
14.在工具栏中选中“插入井位图”按钮,然后在图的空白处,点击鼠标左键拖动一个框然后松开左键,弹出“编辑井位图”对话框中修改井位图的比例尺,颜色等。
井身结构图
1 2 Ra 3 4 5 Ω· m
L
R2
R1
高阻厚层理想电位 电极系视电阻率曲线 R1=R3=1Ω·m ;R2=5Ω·m
A2.25M0.5N
0 5 10 15Ω· m
A3.75B0.5M
0 5 10 15Ω· m
梯度电极系
电位电极系
实测视电阻率曲线的一般特征
横向测井
——五、六十年代的主要测井方法 横向测井是利 0.45m底部梯度电极系 A0.4M0.1N 用电阻率测井资料 1m 底部梯度电极系 A0.95M0.1N 求地层真电阻率的 一种组合测井方法。 2.5m 底部梯度电极系 A2.25M0.5N 4m 底部梯度电极系 A3.75M0.5N 这种测井使用一套 不同电极距的电极 6m 底部梯度电极系 A5.75M0.5N 系,在同一口井的 8m 底部梯度电极系 A7.75M0.5N 某一井段进行视电 1m 顶部梯度电极系 N0.1M0.95A 阻率测量。 还包括0.5m电位电极系、自然 0.25m底部梯度电极系 A0.2M0.1N
电位、微电极和井径。
横向测井实例 六十年代以前,横向测井系列为油气勘探开发发挥 了重要作用。
0.25m 0.45m
1m
2.5m
4m
6m
横 向 测 井 ( 底 部 梯 度 )
0.3m
0.5m
0.75m
1.05m
横 向 测 井 ( 电 位 )
横向测井存在的问题
由于横向测井所测视电阻率曲线较多,野外测井工作 量大,室内解释工作繁琐,特别是薄层有屏蔽影响时误差 较大,很难求准地层真电阻率,除在个别地区新探井中作 对比研究外,一般不采用横向测井。
2.判断水淹层位
SP曲线上出现 基线偏移,偏 移量ΔEsp〉8 mV为高含水层 ;5 mV~8 mV 为中含水层; 当ΔEsp〈5 mV 时,则可能是 低含水层或由 于岩性变化引 起。
python课课程设计井字棋
python课课程设计井字棋一、教学目标本节课的教学目标是让学生掌握Python编程中的基本语法和逻辑思维能力,通过设计并实现一个井字棋游戏,提高学生对编程语言的兴趣和应用能力。
具体的教学目标如下:1.掌握Python的基本语法和数据类型。
2.理解函数的定义和调用。
3.学习使用循环和条件语句。
4.能够独立编写简单的Python程序。
5.学会使用Python进行输入输出操作。
6.能够运用循环和条件语句解决实际问题。
情感态度价值观目标:1.培养学生的创新意识和问题解决能力。
2.激发学生对编程语言的兴趣,提高学习动力。
3.培养学生的团队合作精神和自主学习能力。
二、教学内容本节课的教学内容主要包括以下几个部分:1.Python基本语法和数据类型:介绍Python的基本语法规则,包括变量定义、数据类型、运算符等。
2.函数的定义和调用:讲解函数的定义方法,如何编写和调用函数,以及函数的参数传递。
3.循环和条件语句:学习使用for循环和while循环进行遍历和循环操作,掌握条件语句的编写和运用。
4.输入输出操作:了解如何在Python中进行输入输出操作,包括打印输出和用户输入。
5.井字棋游戏设计:通过编写井字棋游戏的代码,将所学的Python知识应用到实际问题中。
三、教学方法本节课采用多种教学方法相结合的方式,以激发学生的学习兴趣和主动性:1.讲授法:教师讲解Python的基本语法和逻辑思维能力的相关知识,为学生提供理论基础。
2.案例分析法:通过分析井字棋游戏的代码案例,让学生理解和掌握编程方法。
3.实验法:学生动手编写井字棋游戏代码,将理论知识应用到实际问题中,提高编程能力。
4.小组讨论法:学生分组合作,互相交流和讨论井字棋游戏的设计和实现,培养团队合作精神。
四、教学资源本节课的教学资源包括以下几个方面:1.教材:Python编程基础教材,用于提供理论知识的学习。
2.多媒体资料:包括PPT、教学视频等,用于辅助讲解和演示教学内容。
python井字棋设计总结
python井字棋设计总结井字棋(Tic-Tac-Toe)是一个经典的策略游戏,玩家轮流在3x3的棋盘上画X或O,第一个在横、竖或斜线上画满三个标记的玩家获胜。
以下是一个简单的Python井字棋设计总结:1. 棋盘表示使用一个3x3的二维列表来表示棋盘,例如:python复制代码:board = [[' ']*3 for _ in range(3)]2. 玩家标记通常,玩家1使用'X'作为标记,玩家2使用'O'作为标记。
3. 游戏逻辑判断胜负:检查是否有一方获胜。
轮流下棋:让玩家轮流在空位下棋。
检查是否可以下棋:确保玩家不会在已经有标记的位置下棋。
4. 界面设计使用一个简单的控制台界面,将棋盘和玩家的标记显示出来。
可以使用字符串的重复和拼接来创建一个简单的可视化效果。
5. 代码结构将游戏逻辑和界面代码分开,使代码更易于维护和扩展。
例如,可以使用一个函数来处理游戏逻辑,另一个函数来更新界面。
6. AI 玩家的实现可以使用简单的策略,例如尝试在中心位置下棋或者找到空位中距离已下棋位置最远的空位下棋。
也可以使用更复杂的策略,如搜索算法(如蒙特卡洛树搜索)。
7. 扩展功能多人游戏:支持多个玩家同时在线对战。
图形界面:使用GUI库(如PyQt或Tkinter)创建更丰富的界面。
AI对手:可以添加不同难度的AI对手。
历史记录:保存并显示游戏的历史记录。
悔棋功能:允许玩家在一定次数内悔棋。
游戏模式:例如,可以添加计时模式或自由模式。
8. 测试和调试确保代码的健壮性,特别是在处理非法输入和边界情况时。
使用单元测试来验证游戏规则和AI逻辑的正确性。
9. 文档和注释为代码添加注释和文档,解释重要的函数和类的作用,以及它们是如何工作的。
这将使代码更易于阅读和维护,并为其他开发人员提供有用的参考信息。
以上只是一个简化的井字棋设计概述。
实际上,还可以根据需要添加更多的特性和功能,使游戏更加丰富和有趣。
自动化生成图表Python实用技巧
自动化生成图表Python实用技巧在当今数据驱动的时代,能够有效地将数据以直观清晰的图表形式呈现出来至关重要。
Python 作为一种强大且灵活的编程语言,为我们提供了丰富的库和工具,使得自动化生成图表变得简单而高效。
接下来,让我们一起探索一些实用的技巧。
首先,我们要了解 Python 中用于图表生成的几个主要库。
其中,`matplotlib` 是最为常用的一个。
它提供了丰富的绘图功能,包括折线图、柱状图、饼图等等。
安装`matplotlib` 库非常简单,通过`pip install matplotlib` 命令即可完成。
假设我们有一组销售数据,想要绘制一个简单的折线图来展示每个月的销售额变化。
以下是一个示例代码:```pythonimport matplotlibpyplot as pltmonths ='Jan','Feb','Mar','Apr','May','Jun'sales = 1000, 1200, 900, 1500, 1800, 1600pltplot(months, sales)pltxlabel('Month')pltylabel('Sales')plttitle('Monthly Sales')pltshow()```在上述代码中,我们首先导入了`matplotlibpyplot` 模块,并定义了月份和销售额的数据。
然后,使用`plot` 函数绘制折线图,通过`xlabel`、`ylabel` 和`title` 函数设置坐标轴标签和图表标题,最后使用`show` 函数显示图表。
除了折线图,柱状图也是常见的图表类型。
例如,如果我们想要比较不同产品的销售数量,可以这样实现:```pythonimport matplotlibpyplot as pltproducts ='Product A','Product B','Product C'sales_quantity = 500, 800, 600pltbar(products, sales_quantity)pltxlabel('Product')pltylabel('Sales Quantity')plttitle('Product Sales Comparison')pltshow()```对于需要展示数据比例关系的情况,饼图是一个不错的选择。
井身结构
尾管射孔完井优点
可以采用与油层相配伍的钻井液, 以平衡压力,欠平衡压力的方法打开 油层,有利于保护油层;
可以减少套管重量和固井水泥的 用量,从而降低完井成本
完井方式
适用的地质条件
有气顶,或有底水,或有含水夹层及易塌夹层等复杂地质条件, 因而要求实施分隔层段的储层
射孔完井
各分层之间存在压力、岩性等差异,因而要求实施分层测试、分 层采油、分层注水、分层处理的油层 要求实施大规模水力压裂作业的低渗透储层 含油层段长、夹层厚度大、不适于裸眼完井的构造复杂的油气藏 岩性坚硬致密、天然裂隙发育、井壁稳定不坍塌的碳酸盐岩或砂 岩储层
5
8
〃
2、井身结构的组成—— 生产套管
导管 表层套管
作用: 用以封隔油、气、水层,
保证油井的顺利生产。保护井 壁,隔断上履地层和油层的通 路,在套管内形成举升油气的 良好通道。 下入深度:取决于目的层位臵
技术套管
套管尺寸:5½〃和7〃
生产套管 实质:将生产层与其它层分开,使
其不同压力的油、气、水层分开。还 将作为油气生产和井下作业的通道, 并用以实现油气井分层开采、分层测 试、分层注水、分层改造。
裸眼完井
无气顶、无底水、无含水夹层及易塌夹层的储层 单一厚储层,或压力、岩性基本一致的多层储层 不准备实施封隔层段及选择性处理的储层
复合型完井
同裸眼完井
有气顶或储层顶届附近有高压水层,但无底水的储层
二、完井方式——类型
(3)割缝衬管完井方式——改进前
用同尺寸钻头钻穿油层
后,套管柱下端连接衬管 下入油层部位,通过套管 外封隔器和注水泥 接头固 井封隔油层顶界以上的环
岩性疏松且出砂严重的中、粗、细砂粒储层 有气顶,或有底水,或有含水夹层及易塌夹层等复杂地 质条件,因而要求实施分隔层段的储层
基于python实现井字棋小游戏
基于python实现井字棋⼩游戏本⽂为⼤家分享了python实现井字棋⼩游戏,供⼤家参考,具体内容如下周五晚上上了python的选修课,本来以为⽼师是从python的基础语法开始的,没想到是从turtle画图开始,正好补上了我以前⼀些不懂的地⽅,有⼈讲⼀下还是⽐啃书好⼀点。
之前从图书馆借了⼀本python游戏编程,看了前⾯⼏章后就没怎么看了,晚上突然想看看,然后跟着教程写个游戏的。
最后就有了这个井字棋的诞⽣,其实代码并不是很长,主要是思路,需要考虑的周全⼀点。
代码写完后就和电脑下了好久的井字棋,⼀局都没赢,真的是很⽆奈了,⽐不过⽐不过。
开发环境:windows10 + pycharm(因为下棋时候需要输⼊,sublime不知道怎么弄输⼊,所以就⽤了pycharm)需要⽤到的包也只有⼀个:random游戏的话⾸先要弄清楚的是游戏的流程,⾸先做什么然后做什么。
因为井字棋相对来说不算是⼀个复杂的游戏,所以流程就不多讲了,我⾸先做的是画棋盘、电脑和玩家的棋⼦、谁先落⼦等,下⾯通过代码来解释:# 画棋盘的函数,传⼊⼀个放置棋⼦的列表def drawBoard(board) :print(" " + board[7] + " | " + board[8] + " | " + board[9])print("------------")print(" " + board[4] + " | " + board[5] + " | " + board[6])print("------------")print(" " + board[1] + " | " + board[2] + " | " + board[3])# 玩家选择所想⽤的棋⼦种类def inputPlayerLetter() :letter = ''while not (letter == 'X' or letter == 'O') :print("Do you want to be X or O")# ⾃动将⼩写转化为⼤写letter = input().upper()# 如果玩家选择的X,则⾃动将O赋给电脑,反之⼀样if letter == 'X' :return ['X','O']else :return ['O','X']# 这⾥随机⽣成0或者1来表⽰谁先落⼦def whoGoesFirst() :if random.randint(0,1) == 0 :return 'computer'else :return 'player'# 如果玩家选择y或者Y则游戏重新开始def playAgain():print("Do you want to play again?(yes or no)")return input().lower().startswith('y')# 将棋⼦放置到棋盘上⾯# board参数是储存棋⼦的列表# letter参数是棋⼦的类型# move是选择将棋⼦放在哪def makeMove(board, letter, move) :board[move] = letter# 根据井字棋规则判断是否获胜def isWinner(bo, le) :return ((bo[7] == le and bo[8] == le and bo[9] == le) or(bo[4] == le and bo[5] == le and bo[6] == le) or(bo[1] == le and bo[2] == le and bo[3] == le) or(bo[7] == le and bo[4] == le and bo[1] == le) or(bo[8] == le and bo[5] == le and bo[2] == le) or(bo[9] == le and bo[6] == le and bo[3] == le) or(bo[7] == le and bo[5] == le and bo[3] == le) or(bo[9] == le and bo[5] == le and bo[1] == le))# 将已经在棋盘上的棋⼦备份,随时更新def getBoardCopy(board) :dupeBoard = []for i in board :dupeBoard.append(i)return dupeBoard# 判断棋盘是否还有可落⼦的地⽅def isSpaceFree(board, move) :return board[move] == ' '# 获取玩家落⼦的位置def getPlayerMove(board) :move = ' '# 判断落⼦的位置是否正确以及棋盘是否还能落⼦while move not in '1 2 3 4 5 6 7 8 9'.split() or not isSpaceFree(board, int(move)) :print("What is your next move?(1-9)")move = input()return int(move)# 找到可以落⼦的地⽅,主要是计算机使⽤的def chooseRandomMoveFromList(board, moveList) :possibleMoves = []for i in moveList :if isSpaceFree(board, i) :possibleMoves.append(i)if len(possibleMoves) != 0 :return random.choice(possibleMoves)else :return None上述代码实现了部分简单的功能,然后是实现计算机的落⼦部分,毕竟是计算机,得看着不那么傻,所以下⾯相当于是⼀个⼩⼩的AI,电脑能在备份的副本上判断,根据判断的结果来指定落⼦的位置:# 电脑落⼦def getComputerMove(board, computerLetter) :# 给出棋盘上电脑和玩家棋⼦的类型if computerLetter == 'X' :playerLetter = 'O'else :playerLetter = 'X'for i in range(1,10) :# 在备份的棋盘中判断是否有可以落⼦的地⽅copy = getBoardCopy(board)if isSpaceFree(copy, i) :# 如果有可以落⼦的地⽅,则先在备份的棋盘上落⼦makeMove(copy, computerLetter, i)# 落⼦后判断电脑是否能赢,并且返回能赢的落⼦的位置if isWinner(copy, computerLetter) :return ifor i in range(1,10) :copy = getBoardCopy(board)if isSpaceFree(copy, i) :# 在备份的棋盘上模拟玩家落⼦makeMove(copy, playerLetter, i)# 如果下⼀次玩家落⼦就可以赢,返回玩家落⼦的位置,⽤于堵住玩家if isWinner(copy, playerLetter) :return i# 随机在四个⾓处落⼦move = chooseRandomMoveFromList(board,[1,3,7,9])if move != None :return move# 如果⾓处已被占满,则落⼦在中间位置5处if isSpaceFree(board, 5) :return 5# 如果⾓和中间都被占满,则随机选择边上落⼦return chooseRandomMoveFromList(board,[2,4,6,8]) # 判断棋盘是否已满def isBoardFull(board) :for i in range(1,10) :if isSpaceFree(board, i) :return Falsereturn Trueprint("Welcome to Tictactoe ")while True :# 初始化棋盘为空theBoard = [' '] * 10# 玩家和电脑棋⼦类型的选择playerLetter, computerLetter = inputPlayerLetter()# 先后顺序的决定turn = whoGoesFirst()print('The ' + turn + ' will go first')# 游戏开始的标志位,当游戏结束时变成FalsegameIsPlaying = Truewhile gameIsPlaying :# 玩家先⾏if turn == 'player' :drawBoard(theBoard)# 获取玩家下棋的位置move = getPlayerMove(theBoard)# 将玩家的棋⼦传⼊列表相应的位置makeMove(theBoard, playerLetter, move)# 如果玩家获胜,标志位变为Falseif isWinner(theBoard, playerLetter) :drawBoard(theBoard)print("You win !")gameIsPlaying = False# 否则则判断棋盘是否已满else :if isBoardFull(theBoard) :drawBoard(theBoard)print("Tie")break# 若棋盘未满,且玩家已落⼦,则下⼀次落到计算机落⼦ else :turn = 'computer'# 电脑先⾏else :# 电脑随机选择位置落⼦move = getComputerMove(theBoard, computerLetter) makeMove(theBoard, computerLetter, move)# 如果电脑落⼦获胜,则游戏结束if isWinner(theBoard, computerLetter) :drawBoard(theBoard)print("You lose !")gameIsPlaying = Falseelse :if isBoardFull(theBoard) :drawBoard(theBoard)print("Tie")breakelse :turn = 'player'# 玩家没有再次开始游戏,则跳出循环if not playAgain():break上述所有代码实现了井字棋的⼈机对战,整合起来就可以玩了,反正我是没有下赢过的。
python 随机生成中文成语
python 随机生成中文成语
在Python中,我们可以使用random模块来生成随机的中文成语。
首先,我们需要一个包含大量中文成语的列表,然后使用random.choice()函数从列表中随机选择一个成语。
下面是一个简单的示例代码:
python.
import random.
idioms = ['卧虎藏龙', '珠光宝气', '锦上添花', '画龙点睛', '千军万马', '一丝不苟', '水到渠成', '名副其实', '心旷神怡', '井井有条']
random_idiom = random.choice(idioms)。
print(random_idiom)。
在这个示例中,我们首先导入了random模块,然后创建了一个包含多个中文成语的列表idioms。
接下来,我们使用
random.choice()函数从idioms列表中随机选择一个成语,并将其打印出来。
这样,我们就可以使用Python随机生成中文成语。
当然,你也可以使用更大的成语库来增加随机性和多样性。
希望这个示例能够帮到你。
Python一键生成井身结构图
Python一键生成井身结构图1.准备如下.CSV文件井眼轨迹数据及固井数据,如水泥返高等。
如下图2.将程序里面的读取路径更改为上述CSV文件存放路径。
3.运行程序,即可生成如下井身结构图。
4.Python代码如下:import numpy as npimport matplotlib.pyplot as pltimport pandas as pdimport cv2from PIL import Image, ImageDraw, ImageFontdata = pd.read_csv(r'C:\Users\Administrator\Desktop\2.CSV',encoding='gbk')#编码中文# 获取“井眼垂深”,“水平位移”,存放于数组data1 = data['TVD depth'] # 获取名字为TVD depth-列的数据coordinate_H = data1.values.tolist() # 将csv文件中TVD depth列中的数据保存到列表中data1 = data['Closure Distance'] # 获取名字为Closure Distance列的数据coordinate_W = data1.values.tolist() # 将csv文件中Closure Distance列中的数据保存到列表中data1 = data['key_points'] # 获取名字为key_points列的数据key_points = data1.values.tolist() # 将csv文件中key_points列中的数据保存到列表中# 平移函数def pingyi(list, s):list1 = []for i in list:list1.append(i + s)list = list1return list# width = 0.35 # the width of the bars: can also be len(x) sequence# fig, ax = plt.subplots()# ax.plot(coordinate_W, coordinate_H, color='tab:blue')plt.xticks([]) # 去掉x轴plt.yticks([]) # 去掉y轴plt.axis('off') # 去掉坐标轴plt.xlim(-5000, 7000) # 设置X轴范围plt.ylim(-800, 3500) # 设置Y轴范围# 设置plt.plot()划线的线条属性color = (0, 0, 0)linewidth = 1linestyle = '-'#设置文本属性fontsize = 8left = 260right = 0# 初始化向左或向右平移距离s = [-420, 420, -300, 300, -210, 210, -140, 140]# s1 = 350#向左或者向右平移距离# s2 = -350#向左或者向右平移距离# s3 = 300#向左或者向右平移距离# s4 = -300#向左或者向右平移距离# 自定义井口数据a = -100 # 井口垂直增加长度b = 1 # 井口垂直增加长度,起点坐标上移1,避免重复划线# x0 = [coordinate_W[0],coordinate_W[0]+b]#垂直线# y0 = [coordinate_H[0],a+b]#垂直线# plt.plot(x0, y0, color=(0,0,0),linewidth=1, linestyle='-')# plt.plot(coordinate_W, coordinate_H, color=(0,0,0),linewidth=1, linestyle='-')h = 0 # 标记一开、二开及三开等下深位置(垂深)# 中间线middle_point_x = [coordinate_W[h], coordinate_W[h]]middle_point_y = [coordinate_H[h] + b - 350, coordinate_H[h] - 40]plt.plot(middle_point_x, middle_point_y, color='red', linewidth=1,linestyle='-.')plt.plot(coordinate_W, coordinate_H, color='red', linewidth=1, linestyle='-.')#海平面,泥面#左边l = -560r = 560plt.text(coordinate_W[h]-1150+l, coordinate_H[h]-80,r'~~~~~',fontsize=8,color='black')plt.text(coordinate_W[h]-1165+l, coordinate_H[h]-40,r'~~~~~',fontsize=8,color='black')plt.text(coordinate_W[h]-1150+l, coordinate_H[h]-0,r'~~~~~',fontsize=8,color='black')# plt.text(coordinate_W[h]-1165+l, coordinate_H[h]+40,r'~~~~~',fontsize=8,color='black')plt.text(coordinate_W[h]-1150+l, coordinate_H[h]+130,r'############',fontsize=4,color='black')plt.text(coordinate_W[h]-1150+l, coordinate_H[h]+165,r'############',fontsize=4,color='black')# plt.text(coordinate_W[h]-1150+l, coordinate_H[h]+150,r'############',fontsize=4,color='black')#右边plt.text(coordinate_W[h]+680+r, coordinate_H[h]-80,r'~~~~~',fontsize=8,color='black')plt.text(coordinate_W[h]+695+r, coordinate_H[h]-40,r'~~~~~',fontsize=8,color='black')plt.text(coordinate_W[h]+680+r, coordinate_H[h]-0,r'~~~~~',fontsize=8,color='black')# plt.text(coordinate_W[h]+695+r, coordinate_H[h]+40,r'~~~~~',fontsize=8,color='black')plt.text(coordinate_W[h]+680+r, coordinate_H[h]+130,r'############',fontsize=4,color='black')plt.text(coordinate_W[h]+680+r, coordinate_H[h]+165,r'############',fontsize=4,color='black')# plt.text(coordinate_W[h]+680+r, coordinate_H[h]+150,r'############',fontsize=4,color='black')"""i = 0,1,2,3,4,5,6,7。
python实现简单的井字棋游戏(gui界面)
python实现简单的井字棋游戏(gui界⾯)项⽬输出项⽬先决条件要使⽤python构建井字游戏,我们需要tkinter模块和python的基本概念Tkinter模块是⽤于渲染图形的标准图形⽤户界⾯。
Tkinter.messagebox⽤于显⽰消息框要安装tkinter模块,我们在命令提⽰符下使⽤了pip install命令:pip install tkinter项⽬⽂件结构这些是使⽤python构建井字游戏的步骤:导⼊模块初始化窗⼝检查结果的功能检查获胜者的功能定义标签和按钮1.导⼊模块from tkinter import *import tkinter.messagebox as msg在此步骤中,我们导⼊tkinter和messsagebox模块2.初始化窗⼝root= Tk()root.title('TIC-TAC-TOE---DataFlair')digits = [1,2,3,4,5,6,7,8,9]mark = '' “count = 0panels = ["panel"]*10Tk()⽤于初始化窗⼝title()⽤于设置窗⼝的标题3.检查结果的功能def win(panels,sign):return ((panels[1] == panels[2] == panels [3] == sign)or (panels[1] == panels[4] == panels [7] == sign)or (panels[1] == panels[5] == panels [9] == sign)or (panels[2] == panels[5] == panels [8] == sign)or (panels[3] == panels[6] == panels [9] == sign)or (panels[3] == panels[5] == panels [7] == sign)or (panels[4] == panels[5] == panels [6] == sign)or (panels[7] == panels[8] == panels [9] == sign))在此功能中,将通过检查哪个玩家连续打出三个标记(上,下,对⾓或对⾓线)来检查结果。
利用数据绘制井筒图
dfWellProcess模块使用说明一.dfWellProcess模块概述功能:用于数据成井筒图,其中包括录井图、柱状图、对比图、剖面图、栅状图、展布图等。
优点:成图速度快、效果好、建立数据库简明等特点,并能保留完整简明的数据库,从而方便于数据其它方面的使用。
二.数据整理(一)常规成图数据库数据内容及要求:通常使用的数据库类型有FoxPro数据库和Access数据库。
原始的数据表,通常都是按不同的内容存放在不同的文件(大多是Excel表),将这些表整理入库之后,便可使用wellprocess调用数据库。
1.测井曲线数据可用文本编辑软件直接打开,打开后如图1所示说明:(1)曲线数据文件为文本文件,后缀为“.cur”。
(2)文件头说明:“井名”和“单位”根据实际情况而定便可,“深度范围”表示这条测井曲线的起始和终止的深度,代表这条线的总长度。
“空缺值”是表示没有数据的段落,通常要用一个比较特殊的数,但是这个空缺值是曲线数据里面具有的。
“项目名称”数据的原形,每一项之间是用空格隔开。
(至于空格的多少和列是否对其没有特别要求。
)2.成图数据库中各表内容及格式的说明常规测井资料数据库内容如图2所示:(可根据具体成图需求添加相应的数据内容)图2 成图数据库(1)测井曲线索引表(图3)图3 测井曲线索引表说明:<1>内容:包括井号和路径两个字段<2>意义:由于测井曲线并没有直接进入Access数据库,所以通过测井曲线索引表以间接的方式让测井曲线文件入库了;“井号”字段就是井的完整名字,单独放一列;“路径”字段则是这口井的曲线文件所存放的路径文件的名字。
<3>定义路径:单击【系统设置|修改参数|测井曲线对应表】,点击【cur文件路径】按钮定义cur文件路径后,按【确定】即可,如图4。
图4(2)井位坐标及补芯海拔数据表(图5)<1>内容:包括井号、横坐标(X)、纵坐标(Y)和补芯海拔字段。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Python一键生成井身结构图1.准备如下.CSV文件井眼轨迹数据及固井数据,如水泥返高等。
如下图2.将程序里面的读取路径更改为上述CSV文件存放路径。
3.运行程序,即可生成如下井身结构图。
4.Python代码如下:import numpy as npimport matplotlib.pyplot as pltimport pandas as pdimport cv2from PIL import Image, ImageDraw, ImageFontdata = pd.read_csv(r'C:\Users\Administrator\Desktop\2.CSV',encoding='gbk')#编码中文# 获取“井眼垂深”,“水平位移”,存放于数组data1 = data['TVD depth'] # 获取名字为TVD depth-列的数据coordinate_H = data1.values.tolist() # 将csv文件中TVD depth列中的数据保存到列表中data1 = data['Closure Distance'] # 获取名字为Closure Distance列的数据coordinate_W = data1.values.tolist() # 将csv文件中Closure Distance列中的数据保存到列表中data1 = data['key_points'] # 获取名字为key_points列的数据key_points = data1.values.tolist() # 将csv文件中key_points列中的数据保存到列表中# 平移函数def pingyi(list, s):list1 = []for i in list:list1.append(i + s)list = list1return list# width = 0.35 # the width of the bars: can also be len(x) sequence# fig, ax = plt.subplots()# ax.plot(coordinate_W, coordinate_H, color='tab:blue')plt.xticks([]) # 去掉x轴plt.yticks([]) # 去掉y轴plt.axis('off') # 去掉坐标轴plt.xlim(-5000, 7000) # 设置X轴范围plt.ylim(-800, 3500) # 设置Y轴范围# 设置plt.plot()划线的线条属性color = (0, 0, 0)linewidth = 1linestyle = '-'#设置文本属性fontsize = 8left = 260right = 0# 初始化向左或向右平移距离s = [-420, 420, -300, 300, -210, 210, -140, 140]# s1 = 350#向左或者向右平移距离# s2 = -350#向左或者向右平移距离# s3 = 300#向左或者向右平移距离# s4 = -300#向左或者向右平移距离# 自定义井口数据a = -100 # 井口垂直增加长度b = 1 # 井口垂直增加长度,起点坐标上移1,避免重复划线# x0 = [coordinate_W[0],coordinate_W[0]+b]#垂直线# y0 = [coordinate_H[0],a+b]#垂直线# plt.plot(x0, y0, color=(0,0,0),linewidth=1, linestyle='-')# plt.plot(coordinate_W, coordinate_H, color=(0,0,0),linewidth=1, linestyle='-')h = 0 # 标记一开、二开及三开等下深位置(垂深)# 中间线middle_point_x = [coordinate_W[h], coordinate_W[h]]middle_point_y = [coordinate_H[h] + b - 350, coordinate_H[h] - 40]plt.plot(middle_point_x, middle_point_y, color='red', linewidth=1,linestyle='-.')plt.plot(coordinate_W, coordinate_H, color='red', linewidth=1, linestyle='-.')#海平面,泥面#左边l = -560r = 560plt.text(coordinate_W[h]-1150+l, coordinate_H[h]-80,r'~~~~~',fontsize=8,color='black')plt.text(coordinate_W[h]-1165+l, coordinate_H[h]-40,r'~~~~~',fontsize=8,color='black')plt.text(coordinate_W[h]-1150+l, coordinate_H[h]-0,r'~~~~~',fontsize=8,color='black')# plt.text(coordinate_W[h]-1165+l, coordinate_H[h]+40,r'~~~~~',fontsize=8,color='black')plt.text(coordinate_W[h]-1150+l, coordinate_H[h]+130,r'############',fontsize=4,color='black')plt.text(coordinate_W[h]-1150+l, coordinate_H[h]+165,r'############',fontsize=4,color='black')# plt.text(coordinate_W[h]-1150+l, coordinate_H[h]+150,r'############',fontsize=4,color='black')#右边plt.text(coordinate_W[h]+680+r, coordinate_H[h]-80,r'~~~~~',fontsize=8,color='black')plt.text(coordinate_W[h]+695+r, coordinate_H[h]-40,r'~~~~~',fontsize=8,color='black')plt.text(coordinate_W[h]+680+r, coordinate_H[h]-0,r'~~~~~',fontsize=8,color='black')# plt.text(coordinate_W[h]+695+r, coordinate_H[h]+40,r'~~~~~',fontsize=8,color='black')plt.text(coordinate_W[h]+680+r, coordinate_H[h]+130,r'############',fontsize=4,color='black')plt.text(coordinate_W[h]+680+r, coordinate_H[h]+165,r'############',fontsize=4,color='black')# plt.text(coordinate_W[h]+680+r, coordinate_H[h]+150,r'############',fontsize=4,color='black')"""i = 0,1,2,3,4,5,6,7。
标记向左或向右位置"""# 13-3/8"套管x = [s[0], s[0] + b] # 垂直线y = [coordinate_H[h], a + b] # 垂直线plt.plot(x, y, color=color, linewidth=linewidth, linestyle=linestyle) # 井口x = [s[1], s[1] + b] # 垂直线y = [coordinate_H[h], a + b] # 垂直线plt.plot(x, y, color=color, linewidth=linewidth, linestyle=linestyle) # 井口# 隔水管# 左边hh = 150#上下调隔水管高度p = 0while p < 60:x = [s[0] - 10 - 1.8 * p, s[0] - 10 - 1.8 * p]y = [coordinate_H[h] + hh + p, coordinate_H[h] + hh + 60]p = p + 0.1plt.plot(x, y, color=color, linewidth=0.1, linestyle=linestyle)# 右边p = 0while p < 60:x = [s[1] + 16 + 1.8 * p, s[1] + 16 + 1.8 * p]y = [coordinate_H[h] + hh + p, coordinate_H[h] + hh + 60]p = p + 0.1plt.plot(x, y, color=color, linewidth=0.1, linestyle=linestyle)""" 中文注释"""plt.text(s[0] - 10 - 1.8 * 60 - 1500 + left, coordinate_H[h] + hh + 60 + 80,r'24"隔水管:144.00m', fontsize=fontsize,color='black')# 9-5/8"套管x = [s[2], s[2] + b] # 垂直线y = [coordinate_H[h], a + b] # 垂直线plt.plot(x, y, color=color, linewidth=linewidth, linestyle=linestyle) # 井口x = [s[3], s[3] + b] # 垂直线y = [coordinate_H[h], a + b] # 垂直线plt.plot(x, y, color=color, linewidth=linewidth, linestyle=linestyle) # 井口# 7"套管x = [s[4], s[4] + b] # 垂直线y = [coordinate_H[h], a + b] # 垂直线plt.plot(x, y, color=color, linewidth=linewidth, linestyle=linestyle) # 井口x = [s[5], s[5] + b] # 垂直线y = [coordinate_H[h], a + b] # 垂直线plt.plot(x, y, color=color, linewidth=linewidth, linestyle=linestyle) # 井口"""# 7"套管x = [s[6], s[6] + b] # 垂直线y = [coordinate_H[h], a + b] # 垂直线plt.plot(x, y, color=color, linewidth=linewidth, linestyle=linestyle) # 井口x = [s[7], s[7] + b] # 垂直线y = [coordinate_H[h], a + b] # 垂直线plt.plot(x, y, color=color, linewidth=linewidth, linestyle=linestyle) # 井口"""# 对称双水平线longline1 = 1000 # 控制线长m1 = [coordinate_W[h] + s[4] + 65, coordinate_W[h] + s[4] + 65 - longline1] n1 = [coordinate_H[h] + a, coordinate_H[h] + a]plt.plot(m1, n1, color=(0, 0, 0), linewidth=3, linestyle='-')m2 = [coordinate_W[h] - s[4] - 65, coordinate_W[h] - s[4] - 65 + longline1] n2 = [coordinate_H[h] + a, coordinate_H[h] + a]plt.plot(m2, n2, color=(0, 0, 0), linewidth=3, linestyle='-')# 井口长水平线m3 = [coordinate_W[h] + s[4] + 65 - longline1, coordinate_W[h] - s[4] - 65 + longline1]n3 = [coordinate_H[h] + a - 80, coordinate_H[h] + a - 80]plt.plot(m3, n3, color=(0, 0, 0), linewidth=3, linestyle='-')"""中文-转盘面,泥面等"""r1 = 650plt.text(coordinate_W[h] - s[4] - 65 + longline1+r1, coordinate_H[h] + a - 80+40, r'转盘面:0.00m',fontsize=fontsize,color='black')plt.text(coordinate_W[h] - s[4] - 65 + longline1+r1, coordinate_H[h] + a - 80+40+100, r'海平面:58.00m',fontsize=fontsize,color='black')plt.text(coordinate_W[h] - s[4] - 65 + longline1+r1, coordinate_H[h] + a - 80+40+200, r'水深:36.00m',fontsize=fontsize,color='black')plt.text(coordinate_W[h] - s[4] - 65 + longline1+r1, coordinate_H[h] + a - 80+40+300, r'泥面:94.00m',fontsize=fontsize,color='black')# 井口短水平线m4 = [coordinate_W[h] + s[4] + 25, coordinate_W[h] - s[4] - 25]n4 = [coordinate_H[h] + a - 80 - 55, coordinate_H[h] + a - 80 - 55]plt.plot(m4, n4, color=(0, 0, 0), linewidth=3, linestyle='-')# 井口双短垂直线m5 = [coordinate_W[h] + s[4] + 25, coordinate_W[h] + s[4] + 25]n5 = [coordinate_H[h] + a - 80 - 55, coordinate_H[h] + a - 80]plt.plot(m5, n5, color=(0, 0, 0), linewidth=3, linestyle='-')m6 = [coordinate_W[h] - s[4] - 25, coordinate_W[h] - s[4] - 25]n6 = [coordinate_H[h] + a - 80 - 55, coordinate_H[h] + a - 80]plt.plot(m6, n6, color=(0, 0, 0), linewidth=3, linestyle='-')k = 7#控制绘制水平线时与垂直线不重复#z1控制上水平线上移;z2控制下水平线下移z1 = 4z2 = 4while h < len(coordinate_H):"""# 13-3/8"套管"""#套管鞋if coordinate_H[h] == key_points[0]:h1 = h#左边--双水平线m7 = [pingyi([coordinate_W[h]], s[0]+k), pingyi([coordinate_W[h]],s[2]-k)]n7 = [coordinate_H[h]+z2, coordinate_H[h]+z2]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle) # 右边--双水平线m7 = [pingyi([coordinate_W[h]], s[1] - k), pingyi([coordinate_W[h]],s[3] + k)]n7 = [coordinate_H[h]+z2, coordinate_H[h]+z2]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle)"""中文注释"""plt.text(coordinate_W[h]-2150+left, coordinate_H[h]+z2-50, r'13-3/8"套管:1800m',fontsize=fontsize,color='black')plt.text(coordinate_W[h] - 2150+left, coordinate_H[h] + z2 + 100, r'16"井眼:1805m', fontsize=fontsize, color='black')# 套管鞋底部水泥返高if coordinate_H[h] == key_points[1]:h2 = h#左边m7 = [pingyi([coordinate_W[h]], s[0]+k), pingyi([coordinate_W[h]],s[2]-k)]n7 = [coordinate_H[h]-z1, coordinate_H[h]-z1]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle) # 右边m7 = [pingyi([coordinate_W[h]], s[1] - k), pingyi([coordinate_W[h]],s[3] + k)]n7 = [coordinate_H[h]-z1, coordinate_H[h]-z1]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle)"""中文注释"""plt.text(coordinate_W[h] + 670+right, coordinate_H[h] + z2 + 200, r'13-3/8"套管固井尾浆:1400-1800m', fontsize=fontsize,color='black')# 套管顶部水泥返高(上)if coordinate_H[h] == key_points[2]:h3 = h# 左边m7 = [pingyi([coordinate_W[h]], s[0] + k), pingyi([coordinate_W[h]],s[2] - k)]n7 = [coordinate_H[h]-z1, coordinate_H[h]-z1]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle) # 右边m7 = [pingyi([coordinate_W[h]], s[1] - k), pingyi([coordinate_W[h]],s[3] + k)]n7 = [coordinate_H[h]-z1, coordinate_H[h]-z1]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle)"""中文注释"""plt.text(coordinate_W[h] + 540+right, coordinate_H[h] + z2 + 200, r'13-3/8"套管固井首浆:150-600m', fontsize=fontsize, color='black')# 套管顶部水泥返高(下)if coordinate_H[h] == key_points[3]:h4 = h# 左边m7 = [pingyi([coordinate_W[h]], s[0] + k), pingyi([coordinate_W[h]],s[2] - k)]n7 = [coordinate_H[h]+z2, coordinate_H[h]+z2]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle) # 右边m7 = [pingyi([coordinate_W[h]], s[1] - k), pingyi([coordinate_W[h]],s[3] + k)]n7 = [coordinate_H[h]+z2, coordinate_H[h]+z2]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle)"""# 9-5/8"套管"""# 套管鞋if coordinate_H[h] == key_points[4]:h5 = h# 左边--双水平线m7 = [pingyi([coordinate_W[h]], s[2] + k), pingyi([coordinate_W[h]],s[4] - k)]n7 = [coordinate_H[h]+z2, coordinate_H[h]+z2]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle) # 右边--双水平线m7 = [pingyi([coordinate_W[h]], s[3] - k), pingyi([coordinate_W[h]],s[5] + k)]n7 = [coordinate_H[h]+z2, coordinate_H[h]+z2]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle)"""中文注释"""plt.text(coordinate_W[h] - 1950+left, coordinate_H[h] + z2 - 50, r'9-5/8"套管:3355m', fontsize=fontsize, color='black')plt.text(coordinate_W[h] - 1950+left, coordinate_H[h] + z2 + 100, r'12-1/4"井眼:3360m', fontsize=fontsize, color='black')# 套管鞋底部水泥返高if coordinate_H[h] == key_points[5]:h6 = h# 左边m7 = [pingyi([coordinate_W[h]], s[2] + k), pingyi([coordinate_W[h]],s[4] - k)]n7 = [coordinate_H[h]-z1, coordinate_H[h]-z1]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle) # 右边m7 = [pingyi([coordinate_W[h]], s[3] - k), pingyi([coordinate_W[h]],s[5] + k)]n7 = [coordinate_H[h]-z1, coordinate_H[h]-z1]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle)"""中文注释"""plt.text(coordinate_W[h] + 570+right, coordinate_H[h] + z2 + 200, r'9-5/8"套管固井尾浆:2950-3350m', fontsize=fontsize,color='black')# 套管顶部水泥返高(上)if coordinate_H[h] == key_points[6]:h7 = h# 左边m7 = [pingyi([coordinate_W[h]], s[2] + k), pingyi([coordinate_W[h]],s[4] - k)]n7 = [coordinate_H[h]-z1, coordinate_H[h]-z1]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle) # 右边m7 = [pingyi([coordinate_W[h]], s[3] - k), pingyi([coordinate_W[h]],s[5] + k)]n7 = [coordinate_H[h]-z1, coordinate_H[h]-z1]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle)"""中文注释"""plt.text(coordinate_W[h] + 600+right, coordinate_H[h] + z2 + 200, r'9-5/8"套管固井首浆:1650-2050m', fontsize=fontsize,color='black')# 套管顶部水泥返高(下)if coordinate_H[h] == key_points[7]:h8 = h# 左边m7 = [pingyi([coordinate_W[h]], s[2] + k), pingyi([coordinate_W[h]],s[4] - k)]n7 = [coordinate_H[h]+z2, coordinate_H[h]+z2]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle) # 右边m7 = [pingyi([coordinate_W[h]], s[3] - k), pingyi([coordinate_W[h]],s[5] + k)]n7 = [coordinate_H[h]+z2, coordinate_H[h]+z2]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle)"""# 7"套管"""# 套管鞋if coordinate_H[h] == key_points[8]:h9 = h# 左边--双水平线m7 = [pingyi([coordinate_W[h]], s[4] + k), pingyi([coordinate_W[h]],s[5] - k)]# n7 = [coordinate_H[h]+z2, coordinate_H[h]+z2]# plt.plot(m7, n7, color=color, linewidth=linewidth,linestyle=linestyle)# # 右边--双水平线# m7 = [pingyi([coordinate_W[h]], s[5] - k), pingyi([coordinate_W[h]], s[7] + k)]n7 = [coordinate_H[h]+z2, coordinate_H[h]+z2]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle)"""中文注释"""plt.text(coordinate_W[h]-1800+left, coordinate_H[h] + z2 - 50, r'7"套管:3883m', fontsize=fontsize, color='black')plt.text(coordinate_W[h]-1800+left, coordinate_H[h] + z2 + 100, r'8-1/2"井眼:3888m', fontsize=fontsize, color='black')# 套管顶部水泥返高if coordinate_H[h] == key_points[9]:h10 = h# 左边m7 = [pingyi([coordinate_W[h]], s[4] + k), pingyi([coordinate_W[h]],s[6] - k)]n7 = [coordinate_H[h]-z1, coordinate_H[h]-z1]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle) # 右边m7 = [pingyi([coordinate_W[h]], s[5] - k), pingyi([coordinate_W[h]],s[7] + k)]n7 = [coordinate_H[h]-z1, coordinate_H[h]-z1]plt.plot(m7, n7, color=color, linewidth=linewidth, linestyle=linestyle)"""中文注释"""plt.text(coordinate_W[h] + 570+right, coordinate_H[h] + z2 + 200, r'7"套管固井首浆:-3200m', fontsize=fontsize,color='black')plt.text(coordinate_W[h] + 570+right, coordinate_H[h] + z2 + 350, r'7"套管固井尾浆:返至油层顶以上150m', fontsize=fontsize,color='black')h = h + 1"""各层套管井身""""""# 13-3/8"套管"""# 左边--套管plt.plot(pingyi(coordinate_W[0:h1 + 1], s[0]), coordinate_H[0:h1 + 1],color=color, linewidth=linewidth,linestyle=linestyle)# 右边--套管plt.plot(pingyi(coordinate_W[0:h1 + 1], s[1]), coordinate_H[0:h1 + 1],color=color, linewidth=linewidth,linestyle=linestyle)"""# 9-5/8"套管"""# 左边--套管plt.plot(pingyi(coordinate_W[0:h5+1], s[2]), coordinate_H[0:h5+1], color=color, linewidth=linewidth, linestyle=linestyle)# 右边--套管plt.plot(pingyi(coordinate_W[0:h5+1], s[3]), coordinate_H[0:h5+1], color=color, linewidth=linewidth, linestyle=linestyle)"""# 7"套管"""# 左边--套管plt.plot(pingyi(coordinate_W, s[4]), coordinate_H, color=color,linewidth=linewidth, linestyle=linestyle)# 右边--套管plt.plot(pingyi(coordinate_W, s[5]), coordinate_H, color=color,linewidth=linewidth, linestyle=linestyle)"""# 7"套管"""# 左边--套管plt.plot(pingyi(coordinate_W[h10:], s[6]), coordinate_H[h10:], color=color, linewidth=linewidth, linestyle=linestyle)# 右边--套管plt.plot(pingyi(coordinate_W[h10:], s[7]), coordinate_H[h10:], color=color, linewidth=linewidth, linestyle=linestyle)"""颜色填充"""color1 = (0.4,0.4,0.4)linewidth1 = 0.1linestyle1 = '-'# 13-3/8"套管k1 = 16while k1 < 120-16:"""套管鞋"""# 左边--套管plt.plot(pingyi(coordinate_W[h2:h1 + 1], s[0]+k1), coordinate_H[h2:h1 + 1], color=color1, linewidth=linewidth1,linestyle=linestyle1)# 右边--套管plt.plot(pingyi(coordinate_W[h2:h1 + 1], s[1]-k1), coordinate_H[h2:h1 + 1], color=color1, linewidth=linewidth1,linestyle=linestyle1)"""套管顶"""# 左边--套管plt.plot(pingyi(coordinate_W[h3:h4 + 1], s[0] + k1), coordinate_H[h3:h4 + 1], color=color1, linewidth=linewidth1,linestyle=linestyle1)# 右边--套管plt.plot(pingyi(coordinate_W[h3:h4 + 1], s[1] - k1), coordinate_H[h3:h4 + 1], color=color1, linewidth=linewidth1,linestyle=linestyle1)k1 = k1 + 0.1# 9-5/8"套管k2 = 16while k2 < 90-16:"""套管鞋"""# 左边--套管plt.plot(pingyi(coordinate_W[h6:h5 + 1], s[2]+k2), coordinate_H[h6:h5 + 1],color=color1, linewidth=linewidth1,linestyle=linestyle1)# 右边--套管plt.plot(pingyi(coordinate_W[h6:h5 + 1], s[3]-k2), coordinate_H[h6:h5 + 1], color=color1, linewidth=linewidth1,linestyle=linestyle1)"""套管顶"""plt.plot(pingyi(coordinate_W[h7:h8+1], s[2]+k2), coordinate_H[h7:h8+1], color=color1, linewidth=linewidth1,linestyle=linestyle1)# 右边--套管plt.plot(pingyi(coordinate_W[h7:h8+1], s[3]-k2), coordinate_H[h7:h8+1], color=color1, linewidth=linewidth1,linestyle=linestyle1)k2 = k2 + 0.1# 7"套管k3 = 16while k3 < 70-16:# 左边--套管plt.plot(pingyi(coordinate_W[h10:], s[4]+k3), coordinate_H[h10:],color=color1, linewidth=linewidth1, linestyle=linestyle1)# 右边--套管plt.plot(pingyi(coordinate_W[h10:], s[5]-k3), coordinate_H[h10:],color=color1, linewidth=linewidth1, linestyle=linestyle1)k3 = k3 + 0.1# 符号和线型之间的对应关系# - 实线# -- 短线# -. 短点相间线# :虚点线ax = plt.gca() # 获取到当前坐标轴信息ax.xaxis.set_ticks_position('top') # 将X坐标轴移到上面ax.invert_yaxis() # 反转Y坐标轴plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']"""黑体/SimHei,仿宋/FangSong,楷体/KaiTi,微软雅黑体/Microsoft YaHei,宋体/SimSun, 隶书/LiSu,幼圆/YouYuan,华文细黑/STXihei,华文楷体/STKaiti,华文宋体,STSong,华文中宋/STZhongsong,华文仿宋/STFangsong,方正舒体/FZShuTi,方正姚体/FZYaoti, 华文彩云/STCaiyun,华文琥珀,STHupo,华文隶书/STLiti,华文行楷/STXingkai,华文新魏/STXinwei"""plt.show()。