leetcode Day3 complement number 【补码】

李魔佛 发表了文章 • 0 个评论 • 605 次浏览 • 2017-02-27 21:47 • 来自相关话题

Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.

Note:


The given integer is guaranteed to fit within the range of a 32-bit signed integer.
You could assume no leading zero bit in the integer’s binary representation.

Example 1:
 
Input: 5
Output: 2
Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.
Input: 1
Output: 0
Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.
解决方法:
class Solution(object):
def findComplement(self, num):
"""
:type num: int
:rtype: int
"""
result=[]
while num!=0:
remainder=num%2
num=num/2
result.append(remainder)
l=len(result)

for i in range(l/2):
temp=result[i]
result[i]=result[l-i-1]
result[l-i-1]=temp
lam=lambda x:abs(x-1)

for i in range(l):
result[i]=lam(result[i])

#print result
sum=0
for i in range(l):
sum=sum+result[l-i-1]*pow(2,i)
return sum
PS: 上面的方法是第一次开始做的最原始的方法,巨傻无比。 完全就是一个没学过计算机原理或者微机原理的人的代码哈。 连一个数的补码这种计算机第一节课的内容都还给老师了。。
 
附上最简便的一个解法:
class Solution(object):
def findComplement(self, num):
i = 1
while i <= num:
i = i << 1
return (i - 1) ^ num
以为其实一个补码就是一个数与另外一个全1的数进行异或处理哈。
鄙视自己!!!
 
  查看全部
Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.

Note:


The given integer is guaranteed to fit within the range of a 32-bit signed integer.
You could assume no leading zero bit in the integer’s binary representation.

Example 1:
 
Input: 5
Output: 2
Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.

Input: 1
Output: 0
Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.

解决方法:
class Solution(object):
def findComplement(self, num):
"""
:type num: int
:rtype: int
"""
result=[]
while num!=0:
remainder=num%2
num=num/2
result.append(remainder)
l=len(result)

for i in range(l/2):
temp=result[i]
result[i]=result[l-i-1]
result[l-i-1]=temp
lam=lambda x:abs(x-1)

for i in range(l):
result[i]=lam(result[i])

#print result
sum=0
for i in range(l):
sum=sum+result[l-i-1]*pow(2,i)
return sum

PS: 上面的方法是第一次开始做的最原始的方法,巨傻无比。 完全就是一个没学过计算机原理或者微机原理的人的代码哈。 连一个数的补码这种计算机第一节课的内容都还给老师了。。
 
附上最简便的一个解法:
class Solution(object):
def findComplement(self, num):
i = 1
while i <= num:
i = i << 1
return (i - 1) ^ num

以为其实一个补码就是一个数与另外一个全1的数进行异或处理哈。
鄙视自己!!!
 
 

leetcode Day2 Hamming Distance 海明距离

李魔佛 发表了文章 • 0 个评论 • 652 次浏览 • 2017-02-26 21:57 • 来自相关话题

The Hamming distance between two integers is the number of positions at which the corresponding bits are different.

Given two integers x and y, calculate the Hamming distance.

Note:
0 ≤ x, y < 231.

Example:
 
Input: x = 1, y = 4

Output: 2

Explanation:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑

The above arrows point to positions where the corresponding bits are different.

中文的大概意思是,两个数取异或,然后看异或后,1的个数,也就是二进制数中不同位的个数。 这编码常用于信道编码。
 
python中异或用符号^, 然后python自带一个函数bin(),可以把一个数转换为二进制。
转为为二进制后,再用一个循环计算1出现的个数。
 
上代码:
 
x=10
y=20
z=x^y
#solution 1
s=bin(z)
print type(s)
distance=0
for i in s[2:]:
if i=='1':
distance+=1
print "distance is %d" %distance 查看全部
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.

Given two integers x and y, calculate the Hamming distance.

Note:
0 ≤ x, y < 231.

Example:
 
Input: x = 1, y = 4

Output: 2

Explanation:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑

The above arrows point to positions where the corresponding bits are different.

中文的大概意思是,两个数取异或,然后看异或后,1的个数,也就是二进制数中不同位的个数。 这编码常用于信道编码。
 
python中异或用符号^, 然后python自带一个函数bin(),可以把一个数转换为二进制。
转为为二进制后,再用一个循环计算1出现的个数。
 
上代码:
 
x=10
y=20
z=x^y
#solution 1
s=bin(z)
print type(s)
distance=0
for i in s[2:]:
if i=='1':
distance+=1
print "distance is %d" %distance

leetcode Day1 Two Sum 两数之和

李魔佛 发表了文章 • 0 个评论 • 638 次浏览 • 2017-02-25 18:39 • 来自相关话题

题目:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:
Given 
nums = [2, 7, 11, 15], target = 9, 
Because nums[0] + nums[1] = 2 + 7 = 9, 
return [0, 1].
 
中文意思就是,给定输入一个列表和一个目标数, 输出的是两个数的下标,这个数的对应的值相加,等于目标数。
 
上代码:

def twoSum(nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
indics=[]
for i in range(len(nums)-1):
#使用两次循环,类似于冒泡算法,尝试每个数和另外一个数的和,枚举
for j in range(i+1,len(nums)):
if target== nums[i]+nums[j]:
indics.append(i)
indics.append(j)
return indics
  查看全部
题目:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:
Given 
nums = [2, 7, 11, 15], target = 9, 
Because nums[0] + nums[1] = 2 + 7 = 9, 
return [0, 1].
 
中文意思就是,给定输入一个列表和一个目标数, 输出的是两个数的下标,这个数的对应的值相加,等于目标数。
 
上代码:

def twoSum(nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
indics=[]
for i in range(len(nums)-1):
#使用两次循环,类似于冒泡算法,尝试每个数和另外一个数的和,枚举
for j in range(i+1,len(nums)):
if target== nums[i]+nums[j]:
indics.append(i)
indics.append(j)
return indics

 

python 遍历文件夹 删除 txt后缀的文件(或者其他符合规律的文件)

李魔佛 发表了文章 • 0 个评论 • 678 次浏览 • 2017-02-19 21:23 • 来自相关话题

使用cabilre生产的电子书文件目录下,会有一个txt和aw3格式的两个文件,但是放入电子书kindle中只需要一个aw3就好了,不然重复的文件会在kindle上显示2本一样的书
 
代码如下:
# -*-coding=utf-8-*-
__author__ = 'Rocky'
import os,re

cwd=os.getcwd()
p=re.compile('\.txt')
print cwd
for dirpath, dirname,filename in os.walk(cwd):
#print dirpath,dirname,filename
#print dirpath
print dirname
print type(filename)
if filename is not None:
for i in filename:
#if filename is not None:

if p.search(i):
os.remove(os.path.join(dirpath,i)) 查看全部
使用cabilre生产的电子书文件目录下,会有一个txt和aw3格式的两个文件,但是放入电子书kindle中只需要一个aw3就好了,不然重复的文件会在kindle上显示2本一样的书
 
代码如下:
# -*-coding=utf-8-*-
__author__ = 'Rocky'
import os,re

cwd=os.getcwd()
p=re.compile('\.txt')
print cwd
for dirpath, dirname,filename in os.walk(cwd):
#print dirpath,dirname,filename
#print dirpath
print dirname
print type(filename)
if filename is not None:
for i in filename:
#if filename is not None:

if p.search(i):
os.remove(os.path.join(dirpath,i))

在学习装饰器的过程中遇到的奇怪的输出

回复

李魔佛 发起了问题 • 1 人关注 • 0 个回复 • 835 次浏览 • 2017-02-09 18:56 • 来自相关话题

淘宝每天自动领取金币/京东每天自动领取金豆/苏宁打卡获取云钻

李魔佛 发表了文章 • 7 个评论 • 4961 次浏览 • 2017-02-09 18:31 • 来自相关话题

看到某些人天天手动打卡,领取这些小奖励。虽然很少,不过,也是财富嘛。 白送白不要。 这些奖励在购物的时候可以抵消相应的金额。
 
所以写了个小程序来模拟人工,每天帮你自动打卡哈。(需要连接你的手机在电脑,然后执行程序。)
手机配置是1920x1080的屏幕分辨率,如果不是的话修改下代码(主要是触摸的坐标),就可以运行的啦。
 #京东京豆
def jd():
d.screen.on()
d.press.home()
activity_name='com.jingdong.app.mall/.main.MainActivity'
launch_app(activity_name)

if not d(text=u'领京豆').wait.exists(timeout=20*1000):
print "Failed to get the page"
return
d(text=u'领京豆').click()
dou_x=853
dou_y=400

#glaxy_x=yun_x*gallery*full/cuizi_full
time.sleep(15)
d.click(dou_x,dou_y)
print "JD done" 
#苏宁云钻
def suning():
#苏宁在6点之后
global displayWidth
global displayHeight
d.screen.on()
d.press.home()
'''
#解锁,没有密码的情况下
sx=560
sy=1700
ex=560
ey=900
#d.swipe(sx,sy,ex,ey,steps=2)

#d(scrollable=True).fling.horiz.forward()
#d(text=u'苏宁易购').swipe.right()
home_swipe_sx=950
home_swipe_sy=1350
home_swipe_ex=450
home_swipe_ey=1350
while not d(text=u"苏宁易购").exists:
d.swipe(home_swipe_sx,home_swipe_sy,home_swipe_ex,home_swipe_ey,steps=2)
time.sleep(3)
d(text=u'苏宁易购').click()
#time.sleep(10)
'''
activity_name='com.suning.mobile.ebuy/.base.host.InitialActivity'
launch_app(activity_name)
if not d(text=u'领云钻').wait.exists(timeout=20*1000):
print "Failed to get the page"
return
d(text=u'领云钻').click()
yun_x=372
yun_y=1524

#glaxy_x=yun_x*gallery*full/cuizi_full
time.sleep(15)
d.click(yun_x,yun_y)
time.sleep(10)

daka_x=displayWidth/2
daka_y=displayHeight/2
d.click(daka_x,daka_y)
time.sleep(20)
print "Sunning Done"
#淘宝的金币
def taobao_cuizi():
d.screen.on()
d.press.home()
#解锁,没有密码的情况下
'''
sx=560
sy=1700
ex=560
ey=900
#d.swipe(sx,sy,ex,ey,steps=2)

#d(scrollable=True).fling.horiz.forward()
home_swipe_sx=950
home_swipe_sy=1350
home_swipe_ex=450
home_swipe_ey=1350
while not d(text=u"手机淘宝").exists:
d.swipe(home_swipe_sx,home_swipe_sy,home_swipe_ex,home_swipe_ey,steps=2)
time.sleep(3)
d(text=u'手机淘宝').click()
'''
activity_name='com.taobao.taobao/com.taobao.tao.homepage.MainActivity3'
launch_app(activity_name)
if d(text=u'领金币').wait.exists(timeout=12*1000):
#print "Dismiss update"
d(text=u'领金币').click()
#登录账号,刷新下即可

time.sleep(15)
jb_x=900
jb_y=370
d.click(jb_x,jb_y)

完整代码:
https://github.com/Rockyzsu/red_bag
  查看全部
看到某些人天天手动打卡,领取这些小奖励。虽然很少,不过,也是财富嘛。 白送白不要。 这些奖励在购物的时候可以抵消相应的金额。
 
所以写了个小程序来模拟人工,每天帮你自动打卡哈。(需要连接你的手机在电脑,然后执行程序。)
手机配置是1920x1080的屏幕分辨率,如果不是的话修改下代码(主要是触摸的坐标),就可以运行的啦。
 
#京东京豆
def jd():
d.screen.on()
d.press.home()
activity_name='com.jingdong.app.mall/.main.MainActivity'
launch_app(activity_name)

if not d(text=u'领京豆').wait.exists(timeout=20*1000):
print "Failed to get the page"
return
d(text=u'领京豆').click()
dou_x=853
dou_y=400

#glaxy_x=yun_x*gallery*full/cuizi_full
time.sleep(15)
d.click(dou_x,dou_y)
print "JD done"
 
#苏宁云钻
def suning():
#苏宁在6点之后
global displayWidth
global displayHeight
d.screen.on()
d.press.home()
'''
#解锁,没有密码的情况下
sx=560
sy=1700
ex=560
ey=900
#d.swipe(sx,sy,ex,ey,steps=2)

#d(scrollable=True).fling.horiz.forward()
#d(text=u'苏宁易购').swipe.right()
home_swipe_sx=950
home_swipe_sy=1350
home_swipe_ex=450
home_swipe_ey=1350
while not d(text=u"苏宁易购").exists:
d.swipe(home_swipe_sx,home_swipe_sy,home_swipe_ex,home_swipe_ey,steps=2)
time.sleep(3)
d(text=u'苏宁易购').click()
#time.sleep(10)
'''
activity_name='com.suning.mobile.ebuy/.base.host.InitialActivity'
launch_app(activity_name)
if not d(text=u'领云钻').wait.exists(timeout=20*1000):
print "Failed to get the page"
return
d(text=u'领云钻').click()
yun_x=372
yun_y=1524

#glaxy_x=yun_x*gallery*full/cuizi_full
time.sleep(15)
d.click(yun_x,yun_y)
time.sleep(10)

daka_x=displayWidth/2
daka_y=displayHeight/2
d.click(daka_x,daka_y)
time.sleep(20)
print "Sunning Done"

#淘宝的金币
def taobao_cuizi():
d.screen.on()
d.press.home()
#解锁,没有密码的情况下
'''
sx=560
sy=1700
ex=560
ey=900
#d.swipe(sx,sy,ex,ey,steps=2)

#d(scrollable=True).fling.horiz.forward()
home_swipe_sx=950
home_swipe_sy=1350
home_swipe_ex=450
home_swipe_ey=1350
while not d(text=u"手机淘宝").exists:
d.swipe(home_swipe_sx,home_swipe_sy,home_swipe_ex,home_swipe_ey,steps=2)
time.sleep(3)
d(text=u'手机淘宝').click()
'''
activity_name='com.taobao.taobao/com.taobao.tao.homepage.MainActivity3'
launch_app(activity_name)
if d(text=u'领金币').wait.exists(timeout=12*1000):
#print "Dismiss update"
d(text=u'领金币').click()
#登录账号,刷新下即可

time.sleep(15)
jb_x=900
jb_y=370
d.click(jb_x,jb_y)

完整代码:
https://github.com/Rockyzsu/red_bag
 

微信自动回复 微信小助手

李魔佛 发表了文章 • 0 个评论 • 1863 次浏览 • 2017-02-04 15:30 • 来自相关话题

无意中发现itchat这个库,python太牛了,只有想不到,没有做不到哈。
 
用法很简单。
 
#-*-coding=utf-8-*-
import itchat

@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
reply_msg=u'新年快乐! 我是xxx的小秘书,你的消息已收到,主人正忙,稍后会回复你哦~'
return reply_msg

itchat.auto_login(hotReload=True)
itchat.run()
然后运行上面的python文件,用自己的微信扫码登录就可以了。
只要别人发微信给你,对方就可以收到你的自动回复的内容。
 
  查看全部
无意中发现itchat这个库,python太牛了,只有想不到,没有做不到哈。
 
用法很简单。
 
#-*-coding=utf-8-*-
import itchat

@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
reply_msg=u'新年快乐! 我是xxx的小秘书,你的消息已收到,主人正忙,稍后会回复你哦~'
return reply_msg

itchat.auto_login(hotReload=True)
itchat.run()

然后运行上面的python文件,用自己的微信扫码登录就可以了。
只要别人发微信给你,对方就可以收到你的自动回复的内容。
 
 

使用android系统对wifi密码进行枚举破解

李魔佛 发表了文章 • 0 个评论 • 786 次浏览 • 2017-01-25 12:31 • 来自相关话题

 
ETA 1.28
Link: https://github.com/Rockyzsu/crack_wifi_by_android
 

pyautogui 在Windows下遇到 WindowsError: [Error 5] Access is denied. 错误

回复

李魔佛 发起了问题 • 1 人关注 • 0 个回复 • 1174 次浏览 • 2017-01-16 02:03 • 来自相关话题

python爬虫出现问题的调试真的好耗时间呀

李魔佛 发表了文章 • 3 个评论 • 520 次浏览 • 2017-01-08 01:44 • 来自相关话题

不同的异常都要调试。 而且每次异常都不一样。
不同的异常都要调试。 而且每次异常都不一样。

ubuntu python安装MySQL (MySQLdb)

李魔佛 发表了文章 • 0 个评论 • 634 次浏览 • 2016-12-29 17:53 • 来自相关话题

首先安装mysql数据库
sudo apt-get install mysql-server
设置好用户密码

然后安装pyMySQLdb,使用pip安装最方便。

pip install MySQL-python

如果遇到错误:
EnvironmentError: mysql_config not found

说明没找到配置文件, 需要安装:
libmysqlclient-dev

安装命令:

sudo apt-get install libmysqlclient-dev

安装完成之后在python命令行中输入

import MySQLdb

没有出错的话就说明安装成功了。



  查看全部
首先安装mysql数据库
sudo apt-get install mysql-server
设置好用户密码

然后安装pyMySQLdb,使用pip安装最方便。

pip install MySQL-python

如果遇到错误:
EnvironmentError: mysql_config not found

说明没找到配置文件, 需要安装:
libmysqlclient-dev

安装命令:

sudo apt-get install libmysqlclient-dev

安装完成之后在python命令行中输入

import MySQLdb

没有出错的话就说明安装成功了。



 

python NoneType的判断

李魔佛 发表了文章 • 0 个评论 • 846 次浏览 • 2016-10-22 15:26 • 来自相关话题

比如在爬虫过程中 
content = urllib2.urlopen("http://www.qq1.com").read() 
title=bs.title.string.strip()
 
上面由于网址写错了, 那么title的值如果为NoneType (不同于null 类型) 
那么 需要用的判断和null不一样
 
if title is None:
 print "No title"
 
这样就可以避免 title哪里出错。
(TypeError: object of type 'NoneType' has no len()
或者
TypeError: object of type 'NoneType' has no strip()
查看全部
比如在爬虫过程中 
content = urllib2.urlopen("http://www.qq1.com").read() 
title=bs.title.string.strip()
 
上面由于网址写错了, 那么title的值如果为NoneType (不同于null 类型) 
那么 需要用的判断和null不一样
 
if title is None:
 print "No title"
 
这样就可以避免 title哪里出错。
(TypeError: object of type 'NoneType' has no len()
或者
TypeError: object of type 'NoneType' has no strip()

深圳汽车摇号系统的登录验证码 就是一坨垃圾学生做的

李魔佛 发表了文章 • 0 个评论 • 609 次浏览 • 2016-10-05 23:46 • 来自相关话题

每次填完一次就自动更新,时间能不能慢点呀? 所以每次填入验证码都是提示错误。
 
网站是学生做的,漏洞百出,垃圾中的战斗机。
每次填完一次就自动更新,时间能不能慢点呀? 所以每次填入验证码都是提示错误。
 
网站是学生做的,漏洞百出,垃圾中的战斗机。

python中的 if __name__ == __main__ 语句

李魔佛 发表了文章 • 0 个评论 • 625 次浏览 • 2016-08-16 17:24 • 来自相关话题

python中 的

if "__name__" == "__main__" :

    不一定会在开头执行, 因为前面还有语句呢。
比如:

print "Hello"
if "__name__"=="__main__":
    print "Main"

这个就会打印
Hello
Mian
  查看全部

python中 的

if "__name__" == "__main__" :

    不一定会在开头执行, 因为前面还有语句呢。
比如:

print "Hello"
if "__name__"=="__main__":
    print "Main"

这个就会打印
Hello
Mian
 

使用requests 访问https的网页 返回错误: InsecurePlatformWarning: A true SSLContext object is not available

回复

李魔佛 回复了问题 • 1 人关注 • 1 个回复 • 2233 次浏览 • 2016-08-13 22:52 • 来自相关话题

python 判断sqlite数据库中的表是否存在,不存在就创建

李魔佛 发表了文章 • 0 个评论 • 3319 次浏览 • 2016-08-11 22:26 • 来自相关话题

#判断表存不存在来创建表
def create_table():

conn = sqlite3.connect(db_name)
try:
create_tb_cmd='''
CREATE TABLE IF NOT EXISTS USER
(NAME TEXT,
AGE INT,
SALARY REAL);
'''
#主要就是上面的语句
conn.execute(create_tb_cmd)
except:
print "Create table failed"
return False
insert_dt_cmd='''
INSERT INTO USER (NAME,AGE,SALARY) VALUES ("Rocky",10,20.1);
'''
conn.execute(insert_dt_cmd)
conn.commit()
conn.close() 
代码如上,主要就是 
CREATE TABLE IF NOT EXISTS USER 查看全部
#判断表存不存在来创建表
def create_table():

conn = sqlite3.connect(db_name)
try:
create_tb_cmd='''
CREATE TABLE IF NOT EXISTS USER
(NAME TEXT,
AGE INT,
SALARY REAL);
'''
#主要就是上面的语句
conn.execute(create_tb_cmd)
except:
print "Create table failed"
return False
insert_dt_cmd='''
INSERT INTO USER (NAME,AGE,SALARY) VALUES ("Rocky",10,20.1);
'''
conn.execute(insert_dt_cmd)
conn.commit()
conn.close()
 
代码如上,主要就是 
CREATE TABLE IF NOT EXISTS USER

datetime weekday (可以返回某天是一个星期的第几天)的源码只有return 0

回复

李魔佛 回复了问题 • 1 人关注 • 1 个回复 • 954 次浏览 • 2016-08-07 17:57 • 来自相关话题

python @classmethod 的使用场合

李魔佛 发表了文章 • 0 个评论 • 5437 次浏览 • 2016-08-07 11:01 • 来自相关话题

官方的说法: 
classmethod(function)
中文说明:
classmethod是用来指定一个类的方法为类方法,没有此参数指定的类的方法为实例方法,使用方法如下:class C:
@classmethod
def f(cls, arg1, arg2, ...): ...
 
 看后之后真是一头雾水。说的啥子东西呢???
 
自己到国外的论坛看其他的例子和解释,顿时就很明朗。 下面自己用例子来说明。
 
看下面的定义的一个时间类:class Data_test(object):
day=0
month=0
year=0
def __init__(self,year=0,month=0,day=0):
self.day=day
self.month=month
self.year=year

def out_date(self):
print "year :"
print self.year
print "month :"
print self.month
print "day :"
print self.day



t=Data_test(2016,8,1)
t.out_date()




输出: year :
2016
month :
8
day :
1
符合期望。
 
如果用户输入的是 "2016-8-1" 这样的字符格式,那么就需要调用Date_test 类前做一下处理:string_date='2016-8-1'
year,month,day=map(int,string_date.split('-'))
s=Data_test(year,month,day)
先把‘2016-8-1’ 分解成 year,month,day 三个变量,然后转成int,再调用Date_test(year,month,day)函数。 也很符合期望。
 
那我可不可以把这个字符串处理的函数放到 Date_test 类当中呢?
 
那么@classmethod 就开始出场了class Data_test2(object):
day=0
month=0
year=0
def __init__(self,year=0,month=0,day=0):
self.day=day
self.month=month
self.year=year

@classmethod
def get_date(cls,
string_date):
#这里第一个参数是cls, 表示调用当前的类名
year,month,day=map(int,string_date.split('-'))
date1=cls(year,month,day)
#返回的是一个初始化后的类
return date1

def out_date(self):
print "year :"
print self.year
print "month :"
print self.month
print "day :"
print self.day
在Date_test类里面创建一个成员函数, 前面用了@classmethod装饰。 它的作用就是有点像静态类,比静态类不一样的就是它可以传进来一个当前类作为第一个参数。
 
那么如何调用呢?r=Data_test2.get_date("2016-8-6")
r.out_date()输出:year :
2016
month :
8
day :
1
这样子等于先调用get_date()对字符串进行处理,然后才使用Data_test的构造函数初始化。
 
这样的好处就是你以后重构类的时候不必要修改构造函数,只需要额外添加你要处理的函数,然后使用装饰符 @classmethod 就可以了。
 
 
本文原创
转载请注明出处:http://30daydo.com/article/89
  查看全部
官方的说法: 
classmethod(function)
中文说明:
classmethod是用来指定一个类的方法为类方法,没有此参数指定的类的方法为实例方法,使用方法如下:
class C:
@classmethod
def f(cls, arg1, arg2, ...): ...

 
 看后之后真是一头雾水。说的啥子东西呢???
 
自己到国外的论坛看其他的例子和解释,顿时就很明朗。 下面自己用例子来说明。
 
看下面的定义的一个时间类:
class Data_test(object):
day=0
month=0
year=0
def __init__(self,year=0,month=0,day=0):
self.day=day
self.month=month
self.year=year

def out_date(self):
print "year :"
print self.year
print "month :"
print self.month
print "day :"
print self.day



t=Data_test(2016,8,1)
t.out_date()




输出: 
year :
2016
month :
8
day :
1

符合期望。
 
如果用户输入的是 "2016-8-1" 这样的字符格式,那么就需要调用Date_test 类前做一下处理:
string_date='2016-8-1'
year,month,day=map(int,string_date.split('-'))
s=Data_test(year,month,day)

先把‘2016-8-1’ 分解成 year,month,day 三个变量,然后转成int,再调用Date_test(year,month,day)函数。 也很符合期望。
 
那我可不可以把这个字符串处理的函数放到 Date_test 类当中呢?
 
那么@classmethod 就开始出场了
class Data_test2(object):
day=0
month=0
year=0
def __init__(self,year=0,month=0,day=0):
self.day=day
self.month=month
self.year=year

@classmethod
def get_date(cls,
string_date):
#这里第一个参数是cls, 表示调用当前的类名
year,month,day=map(int,string_date.split('-'))
date1=cls(year,month,day)
#返回的是一个初始化后的类
return date1

def out_date(self):
print "year :"
print self.year
print "month :"
print self.month
print "day :"
print self.day

在Date_test类里面创建一个成员函数, 前面用了@classmethod装饰。 它的作用就是有点像静态类,比静态类不一样的就是它可以传进来一个当前类作为第一个参数。
 
那么如何调用呢?
r=Data_test2.get_date("2016-8-6")
r.out_date()
输出:
year :
2016
month :
8
day :
1

这样子等于先调用get_date()对字符串进行处理,然后才使用Data_test的构造函数初始化。
 
这样的好处就是你以后重构类的时候不必要修改构造函数,只需要额外添加你要处理的函数,然后使用装饰符 @classmethod 就可以了。
 
 
本文原创
转载请注明出处:http://30daydo.com/article/89
 

怎么segmentfault上的问题都这么入门级别的?

李魔佛 发表了文章 • 0 个评论 • 565 次浏览 • 2016-07-28 16:37 • 来自相关话题

遇到一些问题,上去segmentfault上搜索答案,以为segmentfault是中文版的stackoverflow。 结果大失所望。
基本都是一些菜鸟的问题。
 
搜索关键字: python
出来的是





 
结果都是怎么安装python,选择python2还是python3 这一类的问题。 着实无语。
看来在中国肯义务分享技术的人并不像国外那么多,那么慷慨。
(也有可能大神们都在忙于做项目,没空帮助小白们吧) 查看全部
遇到一些问题,上去segmentfault上搜索答案,以为segmentfault是中文版的stackoverflow。 结果大失所望。
基本都是一些菜鸟的问题。
 
搜索关键字: python
出来的是

segenfault.PNG

 
结果都是怎么安装python,选择python2还是python3 这一类的问题。 着实无语。
看来在中国肯义务分享技术的人并不像国外那么多,那么慷慨。
(也有可能大神们都在忙于做项目,没空帮助小白们吧)

AttributeError: 'module' object has no attribute 'pyplot'

回复

李魔佛 回复了问题 • 1 人关注 • 1 个回复 • 1799 次浏览 • 2016-07-28 12:31 • 来自相关话题

ubuntu的pycharm中文注释显示乱码 ?

回复

李魔佛 回复了问题 • 1 人关注 • 1 个回复 • 2629 次浏览 • 2016-07-25 12:22 • 来自相关话题

python sqlite 插入的数据含有变量,结果不一致

回复

李魔佛 回复了问题 • 1 人关注 • 1 个回复 • 1766 次浏览 • 2016-07-18 07:50 • 来自相关话题

使用pandas的dataframe数据进行操作的总结

李魔佛 发表了文章 • 0 个评论 • 771 次浏览 • 2016-07-17 16:47 • 来自相关话题

t = df.iloc[0]<class 'pandas.core.series.Series'>
 
#使用iloc后,t已经变成了一个子集。 已经不再是一个dataframe数据。 所以你使用 t['high'] 返回的是一个值。此时t已经没有index了,如果这个时候调用 t.index
 
t=df[:1]
class 'pandas.core.frame.DataFrame'>
 
#这是返回的是一个DataFrame的一个子集。 此时 你可以继续用dateFrame的一些方法进行操作。
 
 
 
 
 
删除dataframe中某一行
 
df.drop()
 
df的内容如下:





 
    df.drop(df[df[u'代码']==300141.0].index,inplace=True)
    print df
 
输出如下





 
记得参数inplace=True, 因为默认的值为inplace=False,意思就是你不添加的话就使用Falase这个值。
这样子原来的df不会被修改, 只是会返回新的修改过的df。 这样的话需要用一个新变量来承接它
new_df=df.drop(df[df[u'代码']==300141.0].index)
 

判断DataFrame为None
  if df is None:
print "None len==0"
return False
  查看全部
t = df.iloc[0]<class 'pandas.core.series.Series'>
 
#使用iloc后,t已经变成了一个子集。 已经不再是一个dataframe数据。 所以你使用 t['high'] 返回的是一个值。此时t已经没有index了,如果这个时候调用 t.index
 
t=df[:1]
class 'pandas.core.frame.DataFrame'>
 
#这是返回的是一个DataFrame的一个子集。 此时 你可以继续用dateFrame的一些方法进行操作。
 
 
 
 
 
删除dataframe中某一行
 
df.drop()
 
df的内容如下:

drop.PNG

 
    df.drop(df[df[u'代码']==300141.0].index,inplace=True)
    print df
 
输出如下

after_drop.PNG

 
记得参数inplace=True, 因为默认的值为inplace=False,意思就是你不添加的话就使用Falase这个值。
这样子原来的df不会被修改, 只是会返回新的修改过的df。 这样的话需要用一个新变量来承接它
new_df=df.drop(df[df[u'代码']==300141.0].index)
 

判断DataFrame为None
 
    if df is None:
print "None len==0"
return False

 

pycharm 添加了中文注释后无法运行?

回复

李魔佛 回复了问题 • 1 人关注 • 1 个回复 • 1187 次浏览 • 2016-07-14 17:56 • 来自相关话题

python 爬虫下载的图片打不开?

李魔佛 发表了文章 • 0 个评论 • 948 次浏览 • 2016-07-09 17:33 • 来自相关话题

 
代码如下片段
 
__author__ = 'rocky'
import urllib,urllib2,StringIO,gzip
url="http://image.xitek.com/photo/2 ... ot%3B
filname=url.split("/")[-1]
req=urllib2.Request(url)
resp=urllib2.urlopen(req)
content=resp.read()
#data = StringIO.StringIO(content)
#gzipper = gzip.GzipFile(fileobj=data)
#html = gzipper.read()
f=open(filname,'w')
f.write()
f.close()

运行后生成的文件打开后不显示图片。
 
后来调试后发现,如果要保存为图片格式, 文件的读写需要用'wb', 也就是上面代码中
f=open(filname,'w') 改一下 改成

f=open(filname,'wb')
 
就可以了。
  查看全部
 
代码如下片段
 
__author__ = 'rocky'
import urllib,urllib2,StringIO,gzip
url="http://image.xitek.com/photo/2 ... ot%3B
filname=url.split("/")[-1]
req=urllib2.Request(url)
resp=urllib2.urlopen(req)
content=resp.read()
#data = StringIO.StringIO(content)
#gzipper = gzip.GzipFile(fileobj=data)
#html = gzipper.read()
f=open(filname,'w')
f.write()
f.close()

运行后生成的文件打开后不显示图片。
 
后来调试后发现,如果要保存为图片格式, 文件的读写需要用'wb', 也就是上面代码中
f=open(filname,'w') 改一下 改成

f=open(filname,'wb')
 
就可以了。