python 用eval(input)画这样四个圆 提示用户输入半径

Python015

python 用eval(input)画这样四个圆 提示用户输入半径,第1张

python有两种编程方式,交互式和文件式。

交互式:对每个输入语句即时运行结果------适合语法练习

文件式:批量执行一组语句并运行结果------编程的主要方式

实例1:圆面积的计算(根据半径r计算圆面积)

上图明显是交互式运行的结果,如果想编辑文件式运行,则先编辑一个calcircle.py文件,将上述代码写进去。

然后输入代码 python calcircle.py,命令界面即可输出代码结果。

下面我们试试绘制多个同心圆的代码:

1 import turtle 2 turtle.pensize(2) 3 turtle.circle(10) 4 turtle.circle(40) 5 turtle.circle(80) 6 turtle.circle(160) 7 turtle.done()

运行结果,如下图所示

下面我们稍微分析一下这段代码

import turtle#导入海龟库 turtle.pensize(2)#设置画笔的大小 turtle.circle(10)#画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆 turtle.circle(40) turtle.circle(80) turtle.circle(160) turtle.done()#必须是乌龟图形程序中的最后一个语句

关于turtle库的使用,之后还会提及,turtle库是python的自带库,绘制图像相对来说比较方便,容易理解

当然上述的代码也可以这样写

1 from turtle import * 2 pensize(2) 3 circle(10) 4 circle(40) 5 circle(80) 6 circle(160) 7 done()

大家很容易发现他们的不同,就是第一句的区别,关于import的用法也将在后续章节详细讲述。

下面我们来画一个难一点的图形

from turtle import * color('red','black')#前一个颜色是线条色,后一个是填充色 begin_fill()#从这里开始填充 for i in range(5):#画五笔就可以结束 fd(200) rt(144)#向右旋转144度 end_fill()#结束填充 done()

下面我们从一个简单的小程序来分析python的语法体系

我们大家都知道,华氏温度和摄氏温度之间的转换,我们可以用python编程实现

TempStr = input("请输入带有符号的温度值: ")#input显示的内容出现在屏幕上,且返回一个str类型的字符串 if TempStr[-1] in ['F', 'f']:#如果最后一个字符是F C = (eval(TempStr[0:-1]) - 32)/1.8#eval将字符串转换成数字 print("转换后的温度是{:.2f}C".format(C))#格式化输出 elif TempStr[-1] in ['C', 'c']: F = 1.8*eval(TempStr[0:-1]) + 32 print("转换后的温度是{:.2f}F".format(F)) else: print("输入格式错误")

缩进:缩进表达程序的格式框架

1、严格明确:缩进是语法的一部分,缩进不正确程序运行错误

2、所属关系:表达代码间包含层次关系的唯一手段

3、长度一致:使用TAB键即可

python编程语言有一个重要的特点就是取消了{ }而用缩进的方式进行代码块的分割,初学者可能不习惯,多写几次就习惯了这种写法。

注释:不被程序执行的辅助性说明信息

单行注释:

#这是单行注释

多行注释:

1 '''  这是多行注释 2 3 23333333333333 '''

变量:程序中用于保存和表示数据的占位符号

变量采用标识符(名字)来表示,关联标识符的过程叫命名

TempStr是变量名字

可以使用等号(=)向变量赋值或修改值,=被称为赋值符

TempStr="82F" #向变量TempStr赋值"82F"

命名规则:大小写字母、数字、下划线和汉字等字符

如:TempStr、Python_Great

注意事项:大小写敏感、首字符不能是数字、不与保留字相同

python与Python是不同的变量,123Python是不合法变量

保留字

被编程语言内部定义并保留使用的标识符

python语言有33个保留字(也叫关键字)

if,elif,else,in

保留字是编程语言的基本单词,大小写敏感

if是保留字,If是变量

保留字

数据类型

字符串、整数、浮点数、列表

10011101该如何解释呢?

这是一个二进制数字或十进制数字

作为二进制数字,10011101的值是十进制157

这是一段文本或者用逗号分隔3个数字

作为一段文本,逗号是文本中的一部分,一共包含10个字符

整数类型10011101

字符串类型:"10,011,101"

列表类型:[10,011,101]

字符串:由0个或多个字符组成的有序字符序列

由一对双引号或一对单引号表示

"helloworld"或'GOOD'

字符串是字符的有序序列,可以对其中字符进行索引

如"你"是"你好啊"这个字符串的第0个字符

python的字符串序号,正向递增,反向递减

字符串的使用

使用[ ]获取字符串中一个或多个字符

1 TempStr = input("请输入带有符号的温度值: ") 2 if TempStr[-1] in ['F', 'f']:#TempStr[-1]指的是最后一个字符 3 C = (eval(TempStr[0:-1]) - 32)/1.8#TempStr[0:-1]指的是字符串从第一个到最后一个之前的所有字符串 4 print("转换后的温度是{:.2f}C".format(C)) 5 elif TempStr[-1] in ['C', 'c']: 6 F = 1.8*eval(TempStr[0:-1]) + 32 7 print("转换后的温度是{:.2f}F".format(F)) 8 else: 9 print("输入格式错误")

数字类型:整数和浮点数

整数:数学中的整数

32或-89

浮点数:数学中的实数,带有小数部分

1.8或者-1.8或者-1.0

列表类型:由0个或多个数据组成的有序序列

列表使用[ ]表示,采用逗号分隔各元素

[ 'F' , 'f' ]表示列表里含义两个元素'F'和'f'

使用保留字in判断一个元素是否在列表中

TempStr[-1] in ['C' , 'c']判断前者是否与列表中的某个元素相同

赋值语句:由赋值符号构成的一行代码

赋值符号笔者之前提过,就是我们俗称的等于号,但等于号在编程语言中通常表示赋值,不表示等于号的含义。

1、赋值语句用来给变量赋予新的数据值

C = (eval(TempStr[0:-1]) - 32)/1.8 #右侧运算结果值赋值给C

2、赋值语句右侧的数据类型同时作用于变量

TempStr = input("请输入带有符号的温度值: ") #input返回一个字符串,所以TempStr也是字符串

分支语句:由判断条件决定程序运行方向的语句

1 if TempStr[-1] in ['F', 'f']:

如果条件为True则执行冒号后的语句

2、每个保留字所在行最后存在一个冒号:,是语法的一部分

冒号及后续缩进用来表示后续语句与条件的所属关系

函数:根据输入参数产生不同输出的功能过程

类似于数学中的函数,y=f(x)

print("输入格式错误") #打印出 输入格式错误

函数采用<函数名>(<参数>)的方式使用

1 eval(TempStr[0:-1])#TempStr[0:-1]是参数

python的输入输出

input():从控制台获得用户输入的函数

input()函数的使用格式:

1 <变量>=input (<提示信息字符串>)

用户输入的信息以字符串类型保存在<变量>中

1 TempStr=input("请输入") #TempStr保存用户输入的信息

输出函数print()

以字符形式向控制台输出结果的函数

print()函数的基本使用格式

1 print(<拟输出字符串或字符串变量>)

字符串类型的一对引号仅在程序内部使用,输出无引用

1 print("输入格式错误")#向控制台输出 输入格式错误

print函数的格式化:

1  print("转换后的温度是{:.2f}C".format(C))

{ }表示槽,后续变量填充到槽中

{:.2f}表示将变量C填充到这个位置时取小数点后2位

如果C的值是123.456789,则输出结果为123.45C

评估函数eval():去掉参数最外侧引号并执行余下语句的函数

eval的基本使用格式

1 eval(<字符串或字符串变量>)

>>>eval("1") 1

这个例子我做了好几天:

1)官网C++的源码,改写成PyQt5版本的代码,好多细节不会转化

2)网上的PyQt的例子根本运行不了

填了无数个坑,结合二者,终于能完成了一个关于绘图的东西。这个过程也掌握了很多新的知识点

【知识点】

1、关于多个点的使用

poitns = [QPoint(10, 80), QPoint(20, 10), QPoint(80, 30), QPoint(90, 70)]

请看:

1      # 定义多个点 2      points = [QPoint(10, 80), QPoint(20, 10), QPoint(80, 30), QPoint(90, 70)] 3  4      # ===直接使用 points 会报错!========= 5      # ... 6      elif self.shape == self.Points: 7            painter.drawPoints(points) 8  9      elif self.shape == self.Polyline:10            painter.drawPolyline(points)11 12      elif self.shape == self.Polygon:13            painter.drawPolygon(points, 4)14 15      # ...16 17      # ===把 points 用 QPolygon()包裹起来才正确!=========18      # ...19      elif self.shape == self.Points:20            painter.drawPoints(QPolygon(points))21 22      elif self.shape == self.Polyline:23            painter.drawPolyline(QPolygon(points))24 25      elif self.shape == self.Polygon:26            painter.drawPolygon(QPolygon(points), 4)27 28      # ...

2、在QDialog窗体中显示QWidget部件

【效果图】

【资源】

【代码】

import sysfrom PyQt5.QtCore import *from PyQt5.QtGui import *from PyQt5.QtWidgets import *class StockDialog(QWidget):    def __init__(self, parent=None):

super(StockDialog, self).__init__(parent)

self.setWindowTitle("利用QPainter绘制各种图形")

mainSplitter = QSplitter(Qt.Horizontal)

mainSplitter.setOpaqueResize(True)

frame = QFrame(mainSplitter)

mainLayout = QGridLayout(frame)        #mainLayout.setMargin(10)

mainLayout.setSpacing(6)

label1=QLabel("形状:")

label2=QLabel("画笔线宽:")

label3=QLabel("画笔颜色:")

label4=QLabel("画笔风格:")

label5=QLabel("画笔顶端:")

label6=QLabel("画笔连接点:")

label7=QLabel("画刷风格:")

label8=QLabel("画刷颜色:")

self.shapeComboBox = QComboBox()

self.shapeComboBox.addItem("Line", "Line")

self.shapeComboBox.addItem("Rectangle", "Rectangle")

self.shapeComboBox.addItem('Rounded Rectangle','Rounded Rectangle')

self.shapeComboBox.addItem('Ellipse','Ellipse')

self.shapeComboBox.addItem('Pie','Pie')

self.shapeComboBox.addItem('Chord','Chord')

self.shapeComboBox.addItem('Path','Path')

self.shapeComboBox.addItem('Polygon','Polygon')

self.shapeComboBox.addItem('Polyline','Polyline')

self.shapeComboBox.addItem('Arc','Arc')

self.shapeComboBox.addItem('Points','Points')

self.shapeComboBox.addItem('Text','Text')

self.shapeComboBox.addItem('Pixmap','Pixmap')

self.widthSpinBox = QSpinBox()

self.widthSpinBox.setRange(0,20)

self.penColorFrame = QFrame()

self.penColorFrame.setAutoFillBackground(True)

self.penColorFrame.setPalette(QPalette(Qt.blue))

self.penColorPushButton = QPushButton("更改")

self.penStyleComboBox = QComboBox()

self.penStyleComboBox.addItem("Solid",Qt.SolidLine)

self.penStyleComboBox.addItem('Dash',  Qt.DashLine)

self.penStyleComboBox.addItem('Dot',  Qt.DotLine)

self.penStyleComboBox.addItem('Dash Dot',  Qt.DashDotLine)

self.penStyleComboBox.addItem('Dash Dot Dot',  Qt.DashDotDotLine)

self.penStyleComboBox.addItem('None',  Qt.NoPen)

self.penCapComboBox = QComboBox()

self.penCapComboBox.addItem("Flat",Qt.FlatCap)

self.penCapComboBox.addItem('Square', Qt.SquareCap)

self.penCapComboBox.addItem('Round', Qt.RoundCap)

self.penJoinComboBox = QComboBox()

self.penJoinComboBox.addItem("Miter",Qt.MiterJoin)

self.penJoinComboBox.addItem('Bebel', Qt.BevelJoin)

self.penJoinComboBox.addItem('Round', Qt.RoundJoin)

self.brushStyleComboBox = QComboBox()

self.brushStyleComboBox.addItem("Linear Gradient",Qt.LinearGradientPattern)

self.brushStyleComboBox.addItem('Radial Gradient', Qt.RadialGradientPattern)

self.brushStyleComboBox.addItem('Conical Gradient', Qt.ConicalGradientPattern)

self.brushStyleComboBox.addItem('Texture', Qt.TexturePattern)

self.brushStyleComboBox.addItem('Solid', Qt.SolidPattern)

self.brushStyleComboBox.addItem('Horizontal', Qt.HorPattern)

self.brushStyleComboBox.addItem('Vertical', Qt.VerPattern)

self.brushStyleComboBox.addItem('Cross', Qt.CrossPattern)

self.brushStyleComboBox.addItem('Backward Diagonal', Qt.BDiagPattern)

self.brushStyleComboBox.addItem('Forward Diagonal', Qt.FDiagPattern)

self.brushStyleComboBox.addItem('Diagonal Cross', Qt.DiagCrossPattern)

self.brushStyleComboBox.addItem('Dense 1', Qt.Dense1Pattern)

self.brushStyleComboBox.addItem('Dense 2', Qt.Dense2Pattern)

self.brushStyleComboBox.addItem('Dense 3', Qt.Dense3Pattern)

self.brushStyleComboBox.addItem('Dense 4', Qt.Dense4Pattern)

self.brushStyleComboBox.addItem('Dense 5', Qt.Dense5Pattern)

self.brushStyleComboBox.addItem('Dense 6', Qt.Dense6Pattern)

self.brushStyleComboBox.addItem('Dense 7', Qt.Dense7Pattern)

self.brushStyleComboBox.addItem('None', Qt.NoBrush)

self.brushColorFrame = QFrame()

self.brushColorFrame.setAutoFillBackground(True)

self.brushColorFrame.setPalette(QPalette(Qt.green))

self.brushColorPushButton = QPushButton("更改")

labelCol=0

contentCol=1

#建立布局

mainLayout.addWidget(label1,1,labelCol)

mainLayout.addWidget(self.shapeComboBox,1,contentCol)

mainLayout.addWidget(label2,2,labelCol)

mainLayout.addWidget(self.widthSpinBox,2,contentCol)

mainLayout.addWidget(label3,4,labelCol)

mainLayout.addWidget(self.penColorFrame,4,contentCol)

mainLayout.addWidget(self.penColorPushButton,4,3)

mainLayout.addWidget(label4,6,labelCol)

mainLayout.addWidget(self.penStyleComboBox,6,contentCol)

mainLayout.addWidget(label5,8,labelCol)

mainLayout.addWidget(self.penCapComboBox,8,contentCol)

mainLayout.addWidget(label6,10,labelCol)

mainLayout.addWidget(self.penJoinComboBox,10,contentCol)

mainLayout.addWidget(label7,12,labelCol)

mainLayout.addWidget(self.brushStyleComboBox,12,contentCol)

mainLayout.addWidget(label8,14,labelCol)

mainLayout.addWidget(self.brushColorFrame,14,contentCol)

mainLayout.addWidget(self.brushColorPushButton,14,3)

mainSplitter1 = QSplitter(Qt.Horizontal)

mainSplitter1.setOpaqueResize(True)

stack1 = QStackedWidget()

stack1.setFrameStyle(QFrame.Panel|QFrame.Raised)

self.area = PaintArea()

stack1.addWidget(self.area)

frame1 = QFrame(mainSplitter1)

mainLayout1 = QVBoxLayout(frame1)        #mainLayout1.setMargin(10)

mainLayout1.setSpacing(6)

mainLayout1.addWidget(stack1)

layout = QGridLayout(self)

layout.addWidget(mainSplitter1,0,0)

layout.addWidget(mainSplitter,0,1)

self.setLayout(layout)

#信号和槽函数        self.shapeComboBox.activated.connect(self.slotShape)

self.widthSpinBox.valueChanged.connect(self.slotPenWidth)

self.penColorPushButton.clicked.connect(self.slotPenColor)

self.penStyleComboBox.activated.connect(self.slotPenStyle)

self.penCapComboBox.activated.connect(self.slotPenCap)

self.penJoinComboBox.activated.connect(self.slotPenJoin)

self.brushStyleComboBox.activated.connect(self.slotBrush)

self.brushColorPushButton.clicked.connect(self.slotBrushColor)

self.slotShape(self.shapeComboBox.currentIndex())

self.slotPenWidth(self.widthSpinBox.value())

self.slotBrush(self.brushStyleComboBox.currentIndex())

def slotShape(self,value):

shape =  self.area.Shape[value]

self.area.setShape(shape)

def slotPenWidth(self,value):

color = self.penColorFrame.palette().color(QPalette.Window)

style = Qt.PenStyle(self.penStyleComboBox.itemData(self.penStyleComboBox.currentIndex(),Qt.UserRole))

cap = Qt.PenCapStyle(self.penCapComboBox.itemData(self.penCapComboBox.currentIndex(),Qt.UserRole))

join = Qt.PenJoinStyle(self.penJoinComboBox.itemData(self.penJoinComboBox.currentIndex(),Qt.UserRole))

self.area.setPen(QPen(color,value,style,cap,join))

def slotPenStyle(self,value):

self.slotPenWidth(value)

def slotPenCap(self,value):

self.slotPenWidth(value)

def slotPenJoin(self,value):

self.slotPenWidth(value)

def slotPenColor(self):

color = QColorDialog.getColor(Qt.blue)

self.penColorFrame.setPalette(QPalette(color))

self.area.setPen(QPen(color))

def slotBrushColor(self):

color = QColorDialog.getColor(Qt.blue)

self.brushColorFrame.setPalette(QPalette(color))

self.slotBrush(self.brushStyleComboBox.currentIndex())

def slotBrush(self,value):

color = self.brushColorFrame.palette().color(QPalette.Window)

style = Qt.BrushStyle(self.brushStyleComboBox.itemData(value,Qt.UserRole))

if(style == Qt.Lin