开始征途
一元二次方程的求解。排除非二次方可能import math
#求解方程ax^2+bx+c=0
'''常规二次一元方程的解为
x1=(b+sqrt(b^2-4ac))/2a
x2=(b-sqrt(b^2-4ac))/2a
'''
def trans_int(num):
try :
num=int(num)
# x=1/num
return num
except (ValueError,ZeroDivisionError):#如果加上x=1/num,排除系数为0的可能
print(num+'是非法参数,非数字')
num=input('请重新输入合法数字:')
return trans_int(num)
#return num
a = input('输入二次项系数a:')
a = trans_int(a)
if a==0:
print('非二次方程')
exit()
b = input('输入一次项系数b:')
b = trans_int(b)
c = input('输入常数项c:')
c = trans_int(c)
#print('二次项系数是:'+str(a),'一次项系数是:'+str(b),'常数项是:'+str(c))
'''====================================================================================
#使用判断方法
temp=b**2-4*a*c
m=-b/2*a
if temp == 0:
print('方程有两个相同的解:'+str(m))
else:
if temp >= 0:
temp=math.sqrt(temp)
temp=temp/2*a
x1=m+temp
x2=m-temp
else:
temp=abs(temp)
temp=math.sqrt(temp)
temp=temp/a*2
x1=complex(m,temp)
x2=complex(m,-temp)
#temp=math.sqrt(temp)
print('方程的第一个解:'+str(x1),'方程的第二个解:'+str(x2))
======================================================================================='''
#使用try方式
m=-b/2*a
try:
temp=b**2-4*a*c
1/temp
temp=math.sqrt(temp)
temp=temp/2*a
x1=m+temp
x2=m-temp
print('方程的第一个解:'+str(x1),'方程的第二个解:'+str(x2))
except ZeroDivisionError:
print('方程有两个相同的解:'+str(m))
except ValueError:
temp=abs(temp)
temp=math.sqrt(temp)
temp=temp/a*2
x1=complex(m,temp)
x2=complex(m,-temp)
print('方程的第一个解:'+str(x1),'方程的第二个解:'+str(x2))
原谅我是小学生,看不懂{:10_269:}
输入二次项系数a:5
输入一次项系数b:6
输入常数项c:7
方程的第一个解:(-15+4.079215610874227j) 方程的第二个解:(-15-4.079215610874227j) 刚刚想到,如果将int改为float,那么输入系数就可以是小数了
def trans_int(num):
try :
num=float(num)
# x=1/num
return num
except (ValueError,ZeroDivisionError):#如果加上x=1/num,排除系数为0的可能
#import time
import re #导入正则
def newreserve(num): #数字反转方法
listnum=[]
flag='' #默认为无符号
strnum=str(num)
#print(strnum)
for index in range(len(strnum)):
listnum.append(strnum)
if num<0: #有符号,需要考虑符号后变换
flag=listnum.pop(0)
listnum.reverse() #列表反向
result=flag
for index in range(len(listnum)):
result+=listnum
if int(result)<(-2**31) or int(result)>(2**31-1):
return 0
else :
return int(result)
#print(newreserve(-2012390011284))
#print(newreserve(321))
'''
1、写一个矩形类,默认有宽和高两个属性
2、如果为一个叫square的属性赋值,那么说明这是一个正方形,值就是正方形的边长,此时宽和高都应该等于边长
'''
class rectangle:
def __init__(self,width,height):
self.width = width
self.height = height
def __setattr__(self,name,value): #设置新属性
if name == 'square': #如果新属性名称是’square'
self.width = value
self.height = value
else:
#self.name = value #这样存在赋值,就会调用__setattr__(self,name,value),自己调用自己进入死循环
super().__setattr__(name,value) #方式一:调用基类赋值,推荐使用此方式
self.__dict__ = value #方式二
def getarea(self):
return self.width * self.height
#给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。
def fmatch(str1): #在一个字符串中查找目标字符串
str2=str1 #保留原字符串
#re.match(pattern,string) 从string的开始匹配pattern,如果开始不能匹配返回none
#re.search(pattern,string)从整个string中匹配pattern,直到匹配上
while re.findall('\(\)',str2) !=[]: #判断str2中是否存在'()'
str2=str2.replace('()','X') #将‘()'替换为’X‘
list1=re.findall('X+',str2)
list1.sort()
return len(list1[-1])
print(fmatch('(())()()((()))))(()()()))(()'))
'''
先定义一个温度的类,然后定义两个描述符类用于描述摄氏度和华氏度两个属性
要求两个属性会自动进行转换,也就是说你可以给摄氏度这个属性赋值,然后打印的华氏度属性是自动转换后的结果
'''
class Stemp:
def __init__(self,value=25):
self.value=float(value)
def __set__(self,instance,value):
self.instance=float(value)
def __get__(self,instance,owner):
return self.instance
class Ftemp:
def __set__(self,instance,value):
instance.st=(float(value)-32)/1.8
def __get__(self,instance,owner):
return instance.st * 1.8 +32
class Temperature:
def __init__(self,value,M):
if M=='C':
self.st=value
else:
self.ft=value
st=Stemp()
ft=Ftemp()
劳动节过完了。继续。。。。 这是一个魔法方法,可以统计每一个列表元素被访问次数
class Mylist():
def __init__(self,*args):
self.values =
self.count = {}.fromkeys(range(len(self.values)),0)#将列表index为字典key并赋值0
def __getitem__(self,item): #item为列表项的index
self.count +=1
return self.values
def __setitem__(self,item,value):
self.values=value
def __delitem__(self,item):
#length=len(self.values) #原列表长度
self.values.pop(item)
for index in range(item,len(self.values)):#统计对象刷新
self.count=self.count
self.count.pop(index+1) #删除对已删除对象的统计 本帖最后由 lucky邪神 于 2019-9-19 12:14 编辑
关于正则的,用 () 来划定原字符串的组,{} 中表示数字的个数,r 即后面的字符串为原始字符串,防止计算机将 \ 理解为转义字符,2,3,1 为输入的字符串三段的序号。
s = '2017-11-27'
import re
print(re.sub('(\d{4})-(\d{2})-(\d{2})',r'\2/\3/\1', s))
IP地址的查找,列举:
二进制:11111111111111111111111111111111
分为四部分:11111111.11111111.11111111.11111111
转化:2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0=255
转为十进制范围:0~255.0~255.0~255.0~255
这就是IP地址的范围。
根据这个生成IP的规则和范围,我们可以用正则表达式来匹配出IP地址,但怎么匹配呢?各人有各人的方法,这里我讲解一下我的思路。
根据IP地址的字符串规律,我把匹配IP地址的表达式分为两部分来考虑。
第一部分:匹配3个0~255.(注意后面的一个点)
第二部分:匹配最后的数字0~255
也就是说,先匹配出 0~255.(注意后面的一个点) 这个字符串,然后重复匹配3次,然后再匹配最后的数字部分0~255。这就是我匹配IP地址的思路。
首先,我要提一下,正则是没有办法做数字运算的,所以,我们无法用数字运算的方式筛选出IP的数字范围。既然没法用数字运算的方式筛选出IP的数字范围,那么我们应该用什么其他方式来筛选这个数字范围呢?我的思路是分组讨论,然后再把这些分组合并起来组成IP的数字范围。
①、假设IP的数字是百位数,那么根据IP的数字范围,我们可以得出下面几种情况。假设第一个数字为1,那么这个数字的范围就为1。这个应该不难理解,就不解释。
②、假设第一个数字为2,那么根据IP数字的范围规则,这里又要分为两种情况,为什么?你想想,最大数字是255,当十位数为5时,个位数最大只能为5是吧?而当十位数为0到4时,个位数可以是任意数字对吧?
所以,这里的两种情况分别为:
A、2
B、25
③、分析完了百位数的情况,接下来就是十位数的情况了,假如是十位数,那么十位数的前面第一个数不能为零是吧?
所以十位数的情况可以是:
④、剩下的就是个位数的情况了,个位数的情况,大家应该很容易得出结论,就是:。
四种情况分析下来,我们得出了IP数字的范围分组为:
1
2
25
怎么把上面的分组用正则表达式表示出来呢?很简单,用正则的或符号|和分组符号()就可以了,所以上面的分组正则表达式为:
(1)|(2)|(25)|()|()
写到这里,数字的匹配范围正则表达式已经写好了,那么根据我前面的思路: 第一部分:匹配3个0~255.(注意后面的一个点)
第二部分:匹配最后的数字0~255
我们来匹配IP地址的第一部分,正则表达式如下:
(1\.)|(2\.)|(25\.)|(\.)|(\.)
我在每个数字的后面加了一个点就是匹配出0~255.(注意后面的一个点)
那么怎么重复匹配三次呢?很简单,我们只要把这五个分组当成整体,再重复匹配三次就行了,正则表达式如下:
((1\.)|(2\.)|(25\.)|(\.)|()\.)){3}
第一部分已经匹配出来了,接下来就是拼接上第二部分的数字了,数字部分上面已经写得很清楚了,就不再解释了,下面是完整的正则表达式:
((1\.)|(2\.)|(25\.)|(\.)|(\.)){3}((1)|(2)|(25)|()|())
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身 本帖最后由 lucky邪神 于 2019-9-5 13:19 编辑
关于迭代器:iter()和next()
把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__()
__iter__() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成。
__next__() 方法会返回下一个迭代器对象。
例如一个数按步进增加:class hk:
def __init__(self,a,b):
self.num=a
self.step=b
def __iter__(self):
return self
def __next__(self):
self.num=self.num+self.step
print(self.num)
return self.num
关于yield,在 Python 中,使用了 yield 的函数被称为生成器(generator),跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作.
def fibonacci(n): # 生成器函数 - 斐波那契
a, b, counter = 0, 1, 0
while True:
print('if比较的counter是:%d'%counter)
if (counter > n):
return
yield a
yield b
print('yield后的a是:%d'%a)
a, b = b, a + b
counter += 1
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
while True:
try:
print (next(f), end="*_* ")
except StopIteration:
break
运行结果如下:
if比较的counter是:0
0*_* 1*_* yield后的a是:0
if比较的counter是:1
1*_* 1*_* yield后的a是:1
if比较的counter是:2
1*_* 2*_* yield后的a是:1
if比较的counter是:3
2*_* 3*_* yield后的a是:2
if比较的counter是:4
3*_* 5*_* yield后的a是:3
if比较的counter是:5
5*_* 8*_* yield后的a是:5
if比较的counter是:6
8*_* 13*_* yield后的a是:8
if比较的counter是:7
13*_* 21*_* yield后的a是:13
if比较的counter是:8
21*_* 34*_* yield后的a是:21
if比较的counter是:9
34*_* 55*_* yield后的a是:34
if比较的counter是:10
55*_* 89*_* yield后的a是:55
if比较的counter是:11
结果说明:在print (next(f), end="*_* ")执行时,首先调用了next(f),接着是f = fibonacci(10)
fibonacci(10)运行:第一个输出是print('if比较的counter是:%d'%counter),接着遇到yied a,即return a。 print (next(f), end="*_* ")输出此时a的值0并以*_*结尾
while True判断再次执行print (next(f), end="*_* "):调用next(f),根据上一次循环 fibonacci(10)运行到yield a,从此处继续执行接着就是yield b,即return b。 print (next(f), end="*_* ")输出此时b的值1并以*_*结尾
第三次while True:执行print (next(f), end="*_* "):调用next(f),根据上一次循环 fibonacci(10)运行到yield b,从此处继续执行接着就是一个输出print('yield后的a是:%d'%a),继续执行,a,b=1,1,counter=1
fibonacci(10)中的while True继续执行,一个输出print('if比较的counter是:%d'%counter),继续遇到yied a,即return a。 print (next(f), end="*_* ")输出此时a的值1并以*_* 结尾
第四次while True:重复第二次那样的操作
第五次while True:类似第三次那样的操作
直至fibonacci(10)中if(counter>10)成立。停止
import urllib.request
import urllib.parse
import json
import easygui
import tkinter
title='YD Translate Dict'
def gettext():
text1=win1.get('0.0','end')
return text1
def clearbox():
win1.delete('0.0','end')
win2.delete('0.0','end')
def translation():
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
headers={}
headers['User-Agent']='Mozilla/5.0 (Windows NT 10.0; Win64; x64)\
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 \
Safari/537.36 Edge/17.17134'
data={}
data['doctype']='json'
data['from']='AUTO'
data['i']=gettext().strip()
data['keyfrom']='fanyi.web'
if data['i'].strip()=='': #如果没有输入时
win2.delete('0.0','end')
else:
#resdata=urllib.parse.urlencode(data).encode('utf-8')
resdata=urllib.parse.urlencode(data)
resdata=resdata.encode('utf-8')
#打开页面,发送请求
response=urllib.request.urlopen(url=url,data=resdata)
'''
res=urllib.request.request(url,resdata,headers)
res.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134')
response=urllib.request.urlopen(res)
'''
#获取响应,提取翻译的结果
htlm=response.read().decode('utf-8')
htlm=json.loads(htlm)['translateResult']
htlm=htlm
length = len(htlm)
win2.delete('0.0','end')
for index in range(length):
result=htlm
result=result['tgt']
#win2.delete('0.0','end')
win2.insert('end',result)
ydw=tkinter.Tk(className=title)
#输入对话框
win1=tkinter.Text(ydw,bg='green',cursor='arrow',width=100,height=10)
win1.grid(padx=10)
#翻译按钮
button=tkinter.Button(ydw,text='翻译',command=translation)
button.grid(row=5,column=0)
button2=tkinter.Button(ydw,text='清空',command=clearbox)
button2.grid(row=5,column=1)
#翻译输出对话框
win2=tkinter.Text(ydw,width=100,height=10)
win2.grid(row=7)
这几天好疲惫啊,不想动,希望快点回国 这两天只是做做每日一题,明天就可以回国了。想弄清楚怎么装载需要装的东西或是库 刚回国,这两天调整下 今天武汉军运会开幕,第一次收到一个最佳答案,大受鼓舞。努力继续加油 好久没有上了,最近考虑买车,挑懵了 本帖最后由 lucky邪神 于 2019-11-12 22:10 编辑
今天在电脑上安装了GPIB的驱动,开始尝试学习控制测试设备,目前了解的第三方模块是pyvisa
>>> import pyvisa
>>> tm=pyvisa.ResourceManager()
>>> tm1=tm.list_resources()
>>> tm1
()
>>> tm.open_resource()
打开本地路径/文件
>>> import tkinter
>>> file=tkinter.filedialog.askopenfile()
>>> dir(tkinter.filedialog)
['ACTIVE', 'ALL', 'ANCHOR', 'ARC', 'BASELINE', 'BEVEL', 'BOTH', 'BOTTOM', 'BROWSE', 'BUTT', 'BaseWidget', 'BitmapImage', 'BooleanVar', 'Button', 'CASCADE', 'CENTER', 'CHAR', 'CHECKBUTTON', 'CHORD', 'COMMAND', 'CURRENT', 'CallWrapper', 'Canvas', 'Checkbutton', 'DISABLED', 'DOTBOX', 'Dialog', 'Directory', 'DoubleVar', 'E', 'END', 'EW', 'EXCEPTION', 'EXTENDED', 'Entry', 'Event', 'EventType', 'FALSE', 'FIRST', 'FLAT', 'FileDialog', 'Frame', 'GROOVE', 'Grid', 'HIDDEN', 'HORIZONTAL', 'INSERT', 'INSIDE', 'Image', 'IntVar', 'LAST', 'LEFT', 'Label', 'LabelFrame', 'Listbox', 'LoadFileDialog', 'MITER', 'MOVETO', 'MULTIPLE', 'Menu', 'Menubutton', 'Message', 'Misc', 'N', 'NE', 'NO', 'NONE', 'NORMAL', 'NS', 'NSEW', 'NUMERIC', 'NW', 'NoDefaultRoot', 'OFF', 'ON', 'OUTSIDE', 'Open', 'OptionMenu', 'PAGES', 'PIESLICE', 'PROJECTING', 'Pack', 'PanedWindow', 'PhotoImage', 'Place', 'RADIOBUTTON', 'RAISED', 'READABLE', 'RIDGE', 'RIGHT', 'ROUND', 'Radiobutton', 'S', 'SCROLL', 'SE', 'SEL', 'SEL_FIRST', 'SEL_LAST', 'SEPARATOR', 'SINGLE', 'SOLID', 'SUNKEN', 'SW', 'SaveAs', 'SaveFileDialog', 'Scale', 'Scrollbar', 'Spinbox', 'StringVar', 'TOP', 'TRUE', 'Tcl', 'TclError', 'TclVersion', 'Text', 'Tk', 'TkVersion', 'Toplevel', 'UNDERLINE', 'UNITS', 'VERTICAL', 'Variable', 'W', 'WORD', 'WRITABLE', 'Widget', 'Wm', 'X', 'XView', 'Y', 'YES', 'YView', '_Dialog', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'askdirectory', 'askopenfile', 'askopenfilename', 'askopenfilenames', 'askopenfiles', 'asksaveasfile', 'asksaveasfilename', 'commondialog', 'constants', 'dialogstates', 'enum', 'fnmatch', 'getboolean', 'getdouble', 'getint', 'image_names', 'image_types', 'mainloop', 'os', 're', 'sys', 'test', 'wantobjects']
今天使用32位电脑写的python程序,其中一个关于I2C的一个dll文件,导入的时候,老是说找不到,明天继续想办法,同事说是因为电脑64位的原因。搞定了,再来记录 今天初步实现了自己的一个想法,这是私人电脑上一部分import tkinter as tk
from tkinter import filedialog
import os
def filedirselect():
filedir = filedialog.askdirectory()
#filenamelist=
filenamelist= os.listdir(filedir)
print(filenamelist)
if filedir != "":
entry1.delete(0,'end')
entry1.insert(0,filedir)
pass
root= tk.Tk(className='Code TXT trans')
root.geometry("400x250+200+150")
label1= tk.Label(root,text='选择文件位置')
label1.grid(row=0,rowspan=1,column=1,padx=20,pady=15)
entry1=tk.Entry(root)
entry1.grid(row=0,column=2,columnspan=3,padx=20,pady=15)
button1=tk.Button(root,text='浏览',command=filedirselect)
button1.grid(row=0,column=5,columnspan=1,padx=20,pady=15)
页:
[1]