lucky邪神 发表于 2019-8-8 07:52:20

开始征途

一元二次方程的求解。排除非二次方可能
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))

zltzlt 发表于 2019-8-8 08:09:18

原谅我是小学生,看不懂{:10_269:}

输入二次项系数a:5
输入一次项系数b:6
输入常数项c:7
方程的第一个解:(-15+4.079215610874227j) 方程的第二个解:(-15-4.079215610874227j)

lucky邪神 发表于 2019-8-8 08:21:02

刚刚想到,如果将int改为float,那么输入系数就可以是小数了
def trans_int(num):
    try :
      num=float(num)
       # x=1/num
      return num
    except (ValueError,ZeroDivisionError):#如果加上x=1/num,排除系数为0的可能

lucky邪神 发表于 2019-9-3 08:19:22

#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()
   


劳动节过完了。继续。。。。

lucky邪神 发表于 2019-9-4 01:42:13

这是一个魔法方法,可以统计每一个列表元素被访问次数
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-4 06:10:01

本帖最后由 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)|()|())

lucky邪神 发表于 2019-9-4 07:24:47

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 03:34:39

本帖最后由 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)成立。停止


lucky邪神 发表于 2019-9-19 11:41:30

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-9-25 01:44:52

这两天只是做做每日一题,明天就可以回国了。想弄清楚怎么装载需要装的东西或是库

lucky邪神 发表于 2019-9-28 22:09:15

刚回国,这两天调整下

lucky邪神 发表于 2019-10-18 22:06:09

今天武汉军运会开幕,第一次收到一个最佳答案,大受鼓舞。努力继续加油

lucky邪神 发表于 2019-11-4 21:36:17

好久没有上了,最近考虑买车,挑懵了

lucky邪神 发表于 2019-11-12 21:17:19

本帖最后由 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']

lucky邪神 发表于 2019-11-13 21:17:28

今天使用32位电脑写的python程序,其中一个关于I2C的一个dll文件,导入的时候,老是说找不到,明天继续想办法,同事说是因为电脑64位的原因。搞定了,再来记录

lucky邪神 发表于 2020-4-1 22:15:46

今天初步实现了自己的一个想法,这是私人电脑上一部分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]
查看完整版本: 开始征途