python print 打印 % 百分号

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

记得以前困扰过自己的一个问题.
当时的解决方式是这样的:
 

a = 1
print "a values is ", a, "%"
 
把百分号切割开来.
 
后来才知道,正确显示百分号的方法:
 
 print 'a values is %d%%' %a
 用2个百分号来标示.
 
 
  查看全部
记得以前困扰过自己的一个问题.
当时的解决方式是这样的:
 

a = 1
print "a values is ", a, "%"
 
把百分号切割开来.
 
后来才知道,正确显示百分号的方法:
 
 
print 'a values is %d%%' %a

 用2个百分号来标示.
 
 
 

Python 学习笔记2.1 ——数据类型和结构

sicily02 发表了文章 • 2 个评论 • 717 次浏览 • 2017-08-29 13:22 • 来自相关话题

电脑配置:windows 64位
Python版本:3.6.0
 
学习内容: 量化分析师的Python日记【第1天:谁来给我讲讲Python?】 以下为转载加自己的笔记
         
一、容器
1,什么是容器

Python中有一种名为容器的数据结构,包括序列和字典,序列又包括列表、元组、字符串等
 




 
列表的基本形式比如:[1,3,6,10]或者[‘yes’,’no’,’OK’]

元组的基本形式比如:(1,3,6,10)或者(‘yes’,’no’,’OK’)

字符串的基本形式比如:’hello’
 
以上几种属于序列,序列中的每一个元素都被分配一个序号——即元素的位置,也称为“索引”,第一个索引,即第一个元素的位置是0,第二个是1,依次类推。列表和元组的区别主要在于,列表可以修改,而元组不能(注意列表用中括号而元组用括号)。
 
索引是从0开始的





 
2. 序列的一些通用操作

除了上面说到的索引,列表、元组、字符串等这些序列还有一些共同的操作。

(1)索引(补充上面)

序列的最后一个元素的索引,也可以是-1,倒数第二个也可以用-2,依次类推:





 
(2)分片

使用分片操作来访问一定范围内的元素,它的格式为:

a[开始索引:结束索引:步长]

那么访问的是,从开始索引号的那个元素,到结束索引号-1的那个元素,每间隔步长个元素访问一次,步长可以忽略,默认步长为1。





 
 
  查看全部
电脑配置:windows 64位
Python版本:3.6.0
 
学习内容: 量化分析师的Python日记【第1天:谁来给我讲讲Python?】 以下为转载加自己的笔记
         
一、容器
1,什么是容器

Python中有一种名为容器的数据结构,包括序列和字典,序列又包括列表、元组、字符串等
 
1.png

 
列表的基本形式比如:[1,3,6,10]或者[‘yes’,’no’,’OK’]

元组的基本形式比如:(1,3,6,10)或者(‘yes’,’no’,’OK’)

字符串的基本形式比如:’hello’
 
以上几种属于序列,序列中的每一个元素都被分配一个序号——即元素的位置,也称为“索引”,第一个索引,即第一个元素的位置是0,第二个是1,依次类推。列表和元组的区别主要在于,列表可以修改,而元组不能(注意列表用中括号而元组用括号)。
 
索引是从0开始的

2.png

 
2. 序列的一些通用操作

除了上面说到的索引,列表、元组、字符串等这些序列还有一些共同的操作。

(1)索引(补充上面)

序列的最后一个元素的索引,也可以是-1,倒数第二个也可以用-2,依次类推:

微信截图_20170908173242.png

 
(2)分片

使用分片操作来访问一定范围内的元素,它的格式为:

a[开始索引:结束索引:步长]

那么访问的是,从开始索引号的那个元素,到结束索引号-1的那个元素,每间隔步长个元素访问一次,步长可以忽略,默认步长为1。

微信截图_20170908173417.png

 
 
 

Python 学习笔记1.2——第三方库安装

sicily02 发表了文章 • 0 个评论 • 528 次浏览 • 2017-08-27 18:23 • 来自相关话题

电脑配置:windows 64位
python版本:3.6.0
 
一、前往第三方网站下载所需要的包
 
http://www.lfd.uci.edu/~gohlke/pythonlibs/ 
 
二、使用pip安装
 
pip install xxx




  查看全部
电脑配置:windows 64位
python版本:3.6.0
 
一、前往第三方网站下载所需要的包
 
http://www.lfd.uci.edu/~gohlke/pythonlibs/ 
 
二、使用pip安装
 
pip install xxx
5.png

 

Python 学习笔记 1.1——cmd操作

sicily02 发表了文章 • 2 个评论 • 649 次浏览 • 2017-08-27 15:21 • 来自相关话题

电脑配置:64位 windows
安装的python版本:3.6.0

一、目录切换

1、如果要访问D盘,先输入D:
 



2、如果要进入D盘里某一个文件夹,再输入cd Python(比如我要进入D盘下的Python文件夹)
  如果还要再往里 继续cd XXX 
  



3、返回上级目录 cd..

二、如何在cmd中使用复制粘贴 

  右键cmd窗口的标题栏,点击属性,勾选快速编辑模式,再确定 
 



 
  粘贴时,按 Alt space E P
  
        查看全部
电脑配置:64位 windows
安装的python版本:3.6.0

一、目录切换

1、如果要访问D盘,先输入D:
 
1.png

2、如果要进入D盘里某一个文件夹,再输入cd Python(比如我要进入D盘下的Python文件夹)
  如果还要再往里 继续cd XXX 
  
2.png

3、返回上级目录 cd..

二、如何在cmd中使用复制粘贴 

  右键cmd窗口的标题栏,点击属性,勾选快速编辑模式,再确定 
 
4.png

 
  粘贴时,按 Alt space E P
  
       

python redis 笔记

李魔佛 发表了文章 • 0 个评论 • 475 次浏览 • 2017-08-24 20:33 • 来自相关话题

刚接触redis,难免会有那么一些坑,新人一定会踩到的。 把自己的坑写出来,让以后新人少踩点吧。 
踩坑也不是什么坏事,不过浪费点时间而已。
 
1. 配置文件redis.config
 
如果你要远程访问你的redis服务器,那么里面有一行你一定要注释掉:

# bind 127.0.0.1
 
 
解释:

#  指定 redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1
 
 
当时调了半天没连上去,就是被这个参数给害的。
 
2. redis-cli 连接本地redis服务器。 本地服务器端口已经改变。
开始使用redis-cli 127.0.0.1:8888 结果是一直都出错。
然后在某个配置文档看到测试本地端口,使用的命令是 redis-cli -p 8888
不然上面的永远都会连着6379.
 
待续。 不定期更新。 
 
 
 
 
 
 
 
 
  查看全部
刚接触redis,难免会有那么一些坑,新人一定会踩到的。 把自己的坑写出来,让以后新人少踩点吧。 
踩坑也不是什么坏事,不过浪费点时间而已。
 
1. 配置文件redis.config
 
如果你要远程访问你的redis服务器,那么里面有一行你一定要注释掉:

# bind 127.0.0.1
 
 
解释:

#  指定 redis 只接收来自于该 IP 地址的请求,如果不进行设置,那么将处理所有请求
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1
 
 
当时调了半天没连上去,就是被这个参数给害的。
 
2. redis-cli 连接本地redis服务器。 本地服务器端口已经改变。
开始使用redis-cli 127.0.0.1:8888 结果是一直都出错。
然后在某个配置文档看到测试本地端口,使用的命令是 redis-cli -p 8888
不然上面的永远都会连着6379.
 
待续。 不定期更新。 
 
 
 
 
 
 
 
 
 

修改python的默认最大递归层数

李魔佛 发表了文章 • 0 个评论 • 741 次浏览 • 2017-08-10 16:00 • 来自相关话题

python里面为了性能,默认的递归次数不能超过1000次。
 
运行下面的代码:
def recursion(n):
if(n <= 0):
print n
return
print n
recursion(n - 1)

if __name__ == "__main__":
recursion(1200)
返回下面的错误:
 
  File "C:/Git/base_function/resursion_usage.py", line 7, in recursion
    recursion(n - 1)
RuntimeError: maximum recursion depth exceeded
 
解决办法: 修改python默认的递归层数。
在程序开头的地方添加以下语句:
 
import sys
sys.setrecursionlimit(1500)
然后再次运行,就不会有上面的错误信息了。
  查看全部
python里面为了性能,默认的递归次数不能超过1000次。
 
运行下面的代码:
def recursion(n): 
if(n <= 0):
print n
return
print n
recursion(n - 1)

if __name__ == "__main__":
recursion(1200)

返回下面的错误:
 
  File "C:/Git/base_function/resursion_usage.py", line 7, in recursion
    recursion(n - 1)
RuntimeError: maximum recursion depth exceeded
 
解决办法: 修改python默认的递归层数。
在程序开头的地方添加以下语句:
 
import sys
sys.setrecursionlimit(1500)

然后再次运行,就不会有上面的错误信息了。
 

python matplotlib 中的plot legend的用法

李魔佛 发表了文章 • 0 个评论 • 1971 次浏览 • 2017-07-13 11:59 • 来自相关话题

官方有链接说明:https://matplotlib.org/users/legend_guide.html
不过对于大部分人来说,英文教程,加上上面的例子有点晦涩。
 
所以以个人的理解,简单地用代码介绍下。 import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)
print x
fig = plt.figure()
ax = plt.subplot(111)

for i in xrange(5):
#ax.plot(x, i * x, label='y=%dx' %i)
ax.plot(x, i * x, label='$y = %ix$' % i)

ax.legend()

plt.show()
 
运行上面的代码后,得到的结果是:
 





 
如果把那句legend() 的语句去掉,那么图形上的图例也就会消失了。
 
所以legend()的主要只用就是用于在图上标明一个图例,用于说明每条曲线的文字显示。 你也可以把图例控制在左边,右边,底下等等。
 
 
实际使用中,legend()有一个loc参数,用于控制图例的位置。 比如 plot.legend(loc=2) , 这个位置就是4象项中的第二象项,也就是左上角。 loc可以为1,2,3,4 这四个数字。
原文连接:
http://30daydo.com/article/215
转载请注明出处 查看全部
官方有链接说明:https://matplotlib.org/users/legend_guide.html
不过对于大部分人来说,英文教程,加上上面的例子有点晦涩。
 
所以以个人的理解,简单地用代码介绍下。
    import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)
print x
fig = plt.figure()
ax = plt.subplot(111)

for i in xrange(5):
#ax.plot(x, i * x, label='y=%dx' %i)
ax.plot(x, i * x, label='$y = %ix$' % i)

ax.legend()

plt.show()

 
运行上面的代码后,得到的结果是:
 

legend.PNG

 
如果把那句legend() 的语句去掉,那么图形上的图例也就会消失了。
 
所以legend()的主要只用就是用于在图上标明一个图例,用于说明每条曲线的文字显示。 你也可以把图例控制在左边,右边,底下等等。
 
 
实际使用中,legend()有一个loc参数,用于控制图例的位置。 比如 plot.legend(loc=2) , 这个位置就是4象项中的第二象项,也就是左上角。 loc可以为1,2,3,4 这四个数字。
原文连接:
http://30daydo.com/article/215
转载请注明出处

为什么使用dataframe自带的plot函数绘图 没有输出图像?

李魔佛 发表了文章 • 0 个评论 • 1453 次浏览 • 2017-07-11 18:32 • 来自相关话题

比如:
df=pd.read_csv('LoanStats_2017Q1.csv',header=0)
print df.head(10)
print df.describe()

analysis_columns = ['issue_d','term','int_rate','emp_title','grade','home_ownership','verification_status','purpose','loan_amnt','total_pymnt','out_prncp','total_rec_int','total_rec_prncp','installment','annual_inc','dti','fico_range_low','fico_range_high','last_fico_range_low','last_fico_range_high','open_acc','loan_status','delinq_amnt','acc_now_delinq','tot_coll_amt']
deal_data = df.loc[:,analysis_columns]
print deal_data
deal_data.groupby('issue_d').agg({'loan_amnt':'sum'}).plot(kind="bar")
deal_data.groupby('issue_d').agg({'issue_d':'count'}).plot(kind = 'bar')
在pycharm中程序运行完了就直接退出,没有输出任何的图像。
 
然后看了下源码后,需要在后面手工添加一句 plt.show()
 
这样就能够正常显示图像了。 查看全部
比如:
    df=pd.read_csv('LoanStats_2017Q1.csv',header=0)
print df.head(10)
print df.describe()

analysis_columns = ['issue_d','term','int_rate','emp_title','grade','home_ownership','verification_status','purpose','loan_amnt','total_pymnt','out_prncp','total_rec_int','total_rec_prncp','installment','annual_inc','dti','fico_range_low','fico_range_high','last_fico_range_low','last_fico_range_high','open_acc','loan_status','delinq_amnt','acc_now_delinq','tot_coll_amt']
deal_data = df.loc[:,analysis_columns]
print deal_data
deal_data.groupby('issue_d').agg({'loan_amnt':'sum'}).plot(kind="bar")
deal_data.groupby('issue_d').agg({'issue_d':'count'}).plot(kind = 'bar')

在pycharm中程序运行完了就直接退出,没有输出任何的图像。
 
然后看了下源码后,需要在后面手工添加一句 plt.show()
 
这样就能够正常显示图像了。

numpy/dataframe 中cumsum 的用法

李魔佛 发表了文章 • 0 个评论 • 1704 次浏览 • 2017-07-11 17:54 • 来自相关话题

用途:cumsum                 样本值的累计和
 
例子:
 
x=np.arange(101)
y=x.cumsum()
print y
print len(y)
x为一个0到100的array, 那么对这个array进行cumsum操作后
y现在的值为:
 
[ 0 1 3 6 10 15 21 28 36 45 55 66 78 91 105
120 136 153 171 190 210 231 253 276 300 325 351 378 406 435
465 496 528 561 595 630 666 703 741 780 820 861 903 946 990
1035 1081 1128 1176 1225 1275 1326 1378 1431 1485 1540 1596 1653 1711 1770
1830 1891 1953 2016 2080 2145 2211 2278 2346 2415 2485 2556 2628 2701 2775
2850 2926 3003 3081 3160 3240 3321 3403 3486 3570 3655 3741 3828 3916 4005
4095 4186 4278 4371 4465 4560 4656 4753 4851 4950 5050]
 
从结果很明显看到 cumsum是将样本逐渐累加,第一个是0,第二个是0+1,第三个是0+1+2,所以第三个是3,第4个是0+1+2+3=6,如此类推,最后一个就是这101个数的累加和,5050
 
  查看全部
用途:cumsum                 样本值的累计和
 
例子:
 
    x=np.arange(101)
y=x.cumsum()
print y
print len(y)

x为一个0到100的array, 那么对这个array进行cumsum操作后
y现在的值为:
 
[   0    1    3    6   10   15   21   28   36   45   55   66   78   91  105
120 136 153 171 190 210 231 253 276 300 325 351 378 406 435
465 496 528 561 595 630 666 703 741 780 820 861 903 946 990
1035 1081 1128 1176 1225 1275 1326 1378 1431 1485 1540 1596 1653 1711 1770
1830 1891 1953 2016 2080 2145 2211 2278 2346 2415 2485 2556 2628 2701 2775
2850 2926 3003 3081 3160 3240 3321 3403 3486 3570 3655 3741 3828 3916 4005
4095 4186 4278 4371 4465 4560 4656 4753 4851 4950 5050]

 
从结果很明显看到 cumsum是将样本逐渐累加,第一个是0,第二个是0+1,第三个是0+1+2,所以第三个是3,第4个是0+1+2+3=6,如此类推,最后一个就是这101个数的累加和,5050
 
 

python uiautomator 安卓自动化测试

再坚持一下就好了 发表了文章 • 0 个评论 • 1306 次浏览 • 2017-06-18 16:46 • 来自相关话题

本教程使用的是win7 系统 - python 2.7
1. 安装uiautomator 同pip install uiautomator
 时确保你的手机连上电脑后,adb可以正常使用, 在命令行运行adb devices,能够有设备的id输出

2. 获取手机的基本信息:
导入uiautomator包: 

from uiautomator import device as d

这样子就可以使用d操作手机,获取手机信息。info= d.info
print info
print type(info)
for i in info:
print i,info[i]
输出的内容:
 {u'displayRotation': 0, u'displaySizeDpY': 640, u'displaySizeDpX': 360, u'screenOn': False, u'currentPackageName': u'com.smartisanos.keyguard', u'productName': u'icesky_msm8992', u'displayWidth': 1080, u'sdkInt': 22, u'displayHeight': 1920, u'naturalOrientation': True}
<type 'dict'>
displayRotation 0
displaySizeDpY 640
displaySizeDpX 360
screenOn False
currentPackageName com.smartisanos.keyguard
productName icesky_msm8992
displayWidth 1080
sdkInt 22
displayHeight 1920
naturalOrientation True

手机的分辨率
displayWidth 1080
displayHeight 1920

当前打开的包名: currentPackageName com.smartisanos.keyguard
 
3.d.press.home()
result=d(text=u'设置').wait.exists(timeout=10000)
#单位是毫秒, 如果timeout还没有找到,就返回false
print "next"
if result:
print "You press setting"
else:
print "You don't touch any thing"

打开home主界面,然后查看时候有设置这个选项或者图标文字。
d(text=u'设置').wait.exists(timeout=10000)

如果在10s内找到这个字符,那么这一行就返回True, 否则返回False
 
  查看全部
本教程使用的是win7 系统 - python 2.7
1. 安装uiautomator 同
pip install uiautomator

 时确保你的手机连上电脑后,adb可以正常使用, 在命令行运行adb devices,能够有设备的id输出

2. 获取手机的基本信息:
导入uiautomator包: 

from uiautomator import device as d

这样子就可以使用d操作手机,获取手机信息。
info= d.info
print info
print type(info)
for i in info:
print i,info[i]

输出的内容:
 
{u'displayRotation': 0, u'displaySizeDpY': 640, u'displaySizeDpX': 360, u'screenOn': False, u'currentPackageName': u'com.smartisanos.keyguard', u'productName': u'icesky_msm8992', u'displayWidth': 1080, u'sdkInt': 22, u'displayHeight': 1920, u'naturalOrientation': True}
<type 'dict'>
displayRotation 0
displaySizeDpY 640
displaySizeDpX 360
screenOn False
currentPackageName com.smartisanos.keyguard
productName icesky_msm8992
displayWidth 1080
sdkInt 22
displayHeight 1920
naturalOrientation True


手机的分辨率
displayWidth 1080
displayHeight 1920

当前打开的包名: currentPackageName com.smartisanos.keyguard
 
3.
d.press.home()
result=d(text=u'设置').wait.exists(timeout=10000)
#单位是毫秒, 如果timeout还没有找到,就返回false
print "next"
if result:
print "You press setting"
else:
print "You don't touch any thing"


打开home主界面,然后查看时候有设置这个选项或者图标文字。
d(text=u'设置').wait.exists(timeout=10000)

如果在10s内找到这个字符,那么这一行就返回True, 否则返回False
 
 

dataframe读取excel文件第一行是列名如何跳过

李魔佛 发表了文章 • 0 个评论 • 1579 次浏览 • 2017-06-13 01:15 • 来自相关话题

比如数据如下:
 股票代码 股票简称 涨跌幅(%) 现价(元) 收盘价:前复权(元) 区间涨跌幅:前复权(%) 交易状态
2016.07.13 2016.07.13 2016.07.13
300501.SZ 海顺新材 10.00 144.65 131.50 3.06 交易
300384.SZ 三联虹普 -0.67 57.63 58.02 5.97 交易
300506.SZ 名家汇 5.98 60.98 57.54 5.52 交易
002572.SZ 索菲亚 1.03 56.80 56.22 -0.65 交易
600419.SH 天润乳业 4.66 57.10 54.56 0.06 交易
300494.SZ 盛天网络 4.86 54.19 51.68 2.64 交易
300369.SZ 绿盟科技 2.36 45.50 44.45 -0.96 交易
002113.SZ 天润数娱 -1.89 43.55 44.39 7.14 交易
002190.SZ 成飞集成 10.01 47.17 42.88 10.01 交易
600391.SH 成发科技 3.39 43.56 42.13 1.54 交易
002699.SZ 美盛文化 3.25 40.99 39.70 9.97 交易
603027.SH 千禾味业 3.70 40.39 38.95 -1.77 交易
600893.SH 中航动力 2.03 39.29 38.51 0.44 交易
603005.SH 晶方科技 4.34 40.16 38.49 2.89 交易
300339.SZ 润和软件 2.50 36.98 36.08 1.32 交易
300246.SZ 宝莱特 3.92 37.42 36.01 -0.91 交易
002368.SZ 太极股份 4.23 37.50 35.98 1.75 交易
000555.SZ 神州信息 0.35 34.66 34.54 -0.75 交易
002745.SZ 木林森 9.15 37.10 33.99 -0.23 交易
002589.SZ 瑞康医药 -1.49 33.00 33.50 4.82 交易
002007.SZ 华兰生物 3.31 33.36 32.29 -0.89 交易
002456.SZ 欧菲光 0.32 31.60 31.50 7.88 交易
002759.SZ 天际股份 9.99 34.01 30.92 0.00 重大事项,停牌自2016-07-12起连续停牌


那么怎样不把第一行的数据读入呢? 或者说把第一行的数据给忽略掉呢?
 sheet1 = pd.read_excel('test.xls', header=0, skiprows=[0] ) 
 
原文链接:http://30daydo.com/article/209
欢迎转载,转载请注明出处。 查看全部
比如数据如下:
 
股票代码	股票简称	涨跌幅(%)	现价(元)	收盘价:前复权(元)	区间涨跌幅:前复权(%)	交易状态
2016.07.13 2016.07.13 2016.07.13
300501.SZ 海顺新材 10.00 144.65 131.50 3.06 交易
300384.SZ 三联虹普 -0.67 57.63 58.02 5.97 交易
300506.SZ 名家汇 5.98 60.98 57.54 5.52 交易
002572.SZ 索菲亚 1.03 56.80 56.22 -0.65 交易
600419.SH 天润乳业 4.66 57.10 54.56 0.06 交易
300494.SZ 盛天网络 4.86 54.19 51.68 2.64 交易
300369.SZ 绿盟科技 2.36 45.50 44.45 -0.96 交易
002113.SZ 天润数娱 -1.89 43.55 44.39 7.14 交易
002190.SZ 成飞集成 10.01 47.17 42.88 10.01 交易
600391.SH 成发科技 3.39 43.56 42.13 1.54 交易
002699.SZ 美盛文化 3.25 40.99 39.70 9.97 交易
603027.SH 千禾味业 3.70 40.39 38.95 -1.77 交易
600893.SH 中航动力 2.03 39.29 38.51 0.44 交易
603005.SH 晶方科技 4.34 40.16 38.49 2.89 交易
300339.SZ 润和软件 2.50 36.98 36.08 1.32 交易
300246.SZ 宝莱特 3.92 37.42 36.01 -0.91 交易
002368.SZ 太极股份 4.23 37.50 35.98 1.75 交易
000555.SZ 神州信息 0.35 34.66 34.54 -0.75 交易
002745.SZ 木林森 9.15 37.10 33.99 -0.23 交易
002589.SZ 瑞康医药 -1.49 33.00 33.50 4.82 交易
002007.SZ 华兰生物 3.31 33.36 32.29 -0.89 交易
002456.SZ 欧菲光 0.32 31.60 31.50 7.88 交易
002759.SZ 天际股份 9.99 34.01 30.92 0.00 重大事项,停牌自2016-07-12起连续停牌


那么怎样不把第一行的数据读入呢? 或者说把第一行的数据给忽略掉呢?
 
sheet1 = pd.read_excel('test.xls', header=0, skiprows=[0] )
 
 
原文链接:http://30daydo.com/article/209
欢迎转载,转载请注明出处。

请教您,为什么把您的语句用来出错了?

苦竹居士 回复了问题 • 2 人关注 • 2 个回复 • 988 次浏览 • 2017-06-04 23:02 • 来自相关话题

ImportError: No module named _tkinter

李魔佛 发表了文章 • 0 个评论 • 2176 次浏览 • 2017-05-28 21:33 • 来自相关话题

ImportError: No module named _tkinter, please install the python-tk package ubuntu运行tkinter错误
 
 这是由于Python的版本没有包含tkinter的模块,只需要把tk的package安装就可以了。 一般在Linux才出现,windows版本一般已经包含了tkinter模块。

apt-get install python-tk 查看全部
ImportError: No module named _tkinter, please install the python-tk package ubuntu运行tkinter错误
 
 这是由于Python的版本没有包含tkinter的模块,只需要把tk的package安装就可以了。 一般在Linux才出现,windows版本一般已经包含了tkinter模块。

apt-get install python-tk

破解安卓锁屏图案

李魔佛 发表了文章 • 0 个评论 • 3535 次浏览 • 2017-05-23 23:56 • 来自相关话题

http://30daydo.com/article/194
 目前成功的有2种方法:
 
方法1: 暴力,快速。 只需几秒钟的时间就可以了。 不过前提需要你的手机又root权限。
 
具体操作: ADB连接手机,然后运行“adb rm /data/system/gesture.key”删除掉gesture.key文件,此时图形锁就失效了,随意画一下就能解锁。
 
方法2: 速度慢,但是可以还原你的锁屏图案。 这个方法同样需要root





 
 # -*- coding: cp936 -*-
import itertools
import hashlib
import time
import os

#调用cmd,ADB连接到手机,读取SHA1加密后的字符串
os.system("adb pull /data/system/gesture.key gesture.key")
time.sleep(5)
f=open('gesture.key','r')
pswd=f.readline()
f.close()
pswd_hex=pswd.encode('hex')
print '加密后的密码为:%s'%pswd_hex

#生成解锁序列,得到['00','01','02','03','04','05','06','07','08']
matrix=
for i in range(0,9):
str_temp = '0'+str(i)
matrix.append(str_temp)

#将00——08的字符进行排列,至少取4个数排列,最多全部进行排列

min_num=4
max_num=len(matrix)

for num in range(min_num,max_num+1):#从04 -> 08
iter1 = itertools.permutations(matrix,num)#从9个数字中挑出n个进行排列
list_m=
list_m.append(list(iter1))#将生成的排列全部存放到 list_m 列表中
for el in list_m[0]:#遍历这n个数字的全部排列
strlist=''.join(el)#将list转换成str。[00,03,06,07,08]-->0003060708
strlist_sha1 = hashlib.sha1(strlist.decode('hex')).hexdigest()#将字符串进行SHA1加密
if pswd_hex==strlist_sha1:#将手机文件里的字符串与加密字符串进行对比
print '解锁密码为:',strlist
原理分析
 
首先科普一下,安卓手机是如何标记这9个点的。通过阅读安卓系统源码可知,每个点都有其编号,组成了一个3×3的矩阵,形如:
 00 01 02
03 04 05
06 07 08
假如设定解锁图形为一个“L”形,如图:
 





 
那么这几个点的排列顺序是这样的:00 03 06 07 08。系统就记下来了这一串数字,然后将这一串数字(以十六进制的方式)进行SHA1加密,存储在了手机里的/data/system/gesture.key 文件中
 
WinHex等十六进制编辑程序打开gesture.key,会发现文件内是SHA1加密过的字符串:c8c0b24a15dc8bbfd411427973574695230458f0
 
当你下次解锁的时候,系统就对比你画的图案,看对应的数字串是不是0003060708对应的加密结果。如果是,就解锁;不是就继续保持锁定。那么,如果穷举所有的数字串排列,会有多少呢?联想到高中的阶乘,如果用4个点做解锁图形的话,就是9x8x7x6=3024种可能性,那5个点就是15120,6个点的话60480,7个点181440,8个点362880,9个点362880。总共是985824种可能性‍‍(但这么计算并不严密,因为同一条直线上的点只能和他们相邻的点相连)‍‍。

满打满算,也不到985824种可能性。乍一看很大,但在计算机面前,穷举出来这些东西用不了几秒钟。
 
当你下次解锁的时候,系统就对比你画的图案,看对应的数字串是不是0003060708对应的加密结果。如果是,就解锁;不是就继续保持锁定。那么,如果穷举所有的数字串排列,会有多少呢?联想到高中的阶乘,如果用4个点做解锁图形的话,就是9x8x7x6=3024种可能性,那5个点就是15120,6个点的话60480,7个点181440,8个点362880,9个点362880。总共是985824种可能性‍‍(但这么计算并不严密,因为同一条直线上的点只能和他们相邻的点相连)‍‍。

满打满算,也不到985824种可能性。乍一看很大,但在计算机面前,穷举出来这些东西用不了几秒钟。
 
 
  查看全部
http://30daydo.com/article/194
 目前成功的有2种方法:
 
方法1: 暴力,快速。 只需几秒钟的时间就可以了。 不过前提需要你的手机又root权限。
 
具体操作: ADB连接手机,然后运行“adb rm /data/system/gesture.key”删除掉gesture.key文件,此时图形锁就失效了,随意画一下就能解锁。
 
方法2: 速度慢,但是可以还原你的锁屏图案。 这个方法同样需要root

14255226989905.jpg

 
 
# -*- coding: cp936 -*-
import itertools
import hashlib
import time
import os

#调用cmd,ADB连接到手机,读取SHA1加密后的字符串
os.system("adb pull /data/system/gesture.key gesture.key")
time.sleep(5)
f=open('gesture.key','r')
pswd=f.readline()
f.close()
pswd_hex=pswd.encode('hex')
print '加密后的密码为:%s'%pswd_hex

#生成解锁序列,得到['00','01','02','03','04','05','06','07','08']
matrix=
for i in range(0,9):
str_temp = '0'+str(i)
matrix.append(str_temp)

#将00——08的字符进行排列,至少取4个数排列,最多全部进行排列

min_num=4
max_num=len(matrix)

for num in range(min_num,max_num+1):#从04 -> 08
iter1 = itertools.permutations(matrix,num)#从9个数字中挑出n个进行排列
list_m=
list_m.append(list(iter1))#将生成的排列全部存放到 list_m 列表中
for el in list_m[0]:#遍历这n个数字的全部排列
strlist=''.join(el)#将list转换成str。[00,03,06,07,08]-->0003060708
strlist_sha1 = hashlib.sha1(strlist.decode('hex')).hexdigest()#将字符串进行SHA1加密
if pswd_hex==strlist_sha1:#将手机文件里的字符串与加密字符串进行对比
print '解锁密码为:',strlist

原理分析
 
首先科普一下,安卓手机是如何标记这9个点的。通过阅读安卓系统源码可知,每个点都有其编号,组成了一个3×3的矩阵,形如:
 
00 01 02
03 04 05
06 07 08

假如设定解锁图形为一个“L”形,如图:
 

77681425522640.png

 
那么这几个点的排列顺序是这样的:00 03 06 07 08。系统就记下来了这一串数字,然后将这一串数字(以十六进制的方式)进行SHA1加密,存储在了手机里的/data/system/gesture.key 文件中
 
WinHex等十六进制编辑程序打开gesture.key,会发现文件内是SHA1加密过的字符串:c8c0b24a15dc8bbfd411427973574695230458f0
 
当你下次解锁的时候,系统就对比你画的图案,看对应的数字串是不是0003060708对应的加密结果。如果是,就解锁;不是就继续保持锁定。那么,如果穷举所有的数字串排列,会有多少呢?联想到高中的阶乘,如果用4个点做解锁图形的话,就是9x8x7x6=3024种可能性,那5个点就是15120,6个点的话60480,7个点181440,8个点362880,9个点362880。总共是985824种可能性‍‍(但这么计算并不严密,因为同一条直线上的点只能和他们相邻的点相连)‍‍。

满打满算,也不到985824种可能性。乍一看很大,但在计算机面前,穷举出来这些东西用不了几秒钟。
 
当你下次解锁的时候,系统就对比你画的图案,看对应的数字串是不是0003060708对应的加密结果。如果是,就解锁;不是就继续保持锁定。那么,如果穷举所有的数字串排列,会有多少呢?联想到高中的阶乘,如果用4个点做解锁图形的话,就是9x8x7x6=3024种可能性,那5个点就是15120,6个点的话60480,7个点181440,8个点362880,9个点362880。总共是985824种可能性‍‍(但这么计算并不严密,因为同一条直线上的点只能和他们相邻的点相连)‍‍。

满打满算,也不到985824种可能性。乍一看很大,但在计算机面前,穷举出来这些东西用不了几秒钟。
 
 
 

dataframe重新设置index

回复

李魔佛 回复了问题 • 1 人关注 • 1 个回复 • 1028 次浏览 • 2017-05-09 23:05 • 来自相关话题

This probably means that Tcl wasn't installed properly [matplotlib][win7]

回复

李魔佛 发起了问题 • 1 人关注 • 0 个回复 • 1263 次浏览 • 2017-05-05 17:25 • 来自相关话题

python 求2个list列表的相关系数

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

相关系数的一些介绍:相关系数用来表示两个数据是否具有相关性,比如人每天吃饭的饭量和他的体重具有正相关系,也就是吃的饭量越多,体重会越重。 当然也会有例外,所以这个相关系数不会为1. 如果为1就是说明完全的正相关。
比如 c=[2,4,6,8,10,12,14,16,18] ,和d=[4,8,12,20,24,28,32,36], 这两组数据,相关系数为1,因为二者的数据都在同一条直线上。 存在必然的因果关系。
 





 
其计算公式为:





 
 
实际上python的中pandas已经提供了很简单的内置函数,可以自己计算这个相关系数。 在《python数据分析》这本书就有,不过网上查到的资料就比较少。
 
参考代码: c=[2,4,6,8,10,12,14,16,18]
d= [i*2 for i in c]
print d
s1=Series(c) #转为series类型
s2=Series(d)
corr=s1.corr(s2) #计算相关系数
print corrcorr()就是计算相关系数的函数。
 
上面的例子中,计算出的corr的值为1,如果修改一下d的某个值,比如 d[0]=3 把d的第一个值改为3,那么相关系数就不为1,但是他的相关系数为0.987503379952, 也差不多接近1. 说明这两组数据也是相关性很大的。c=[2,4,6,8,10,12,14,16,18]
d= [i*2 for i in c]
print d
d[0]=3 # 修改d[0]的值
s1=Series(c) #转为series类型
s2=Series(d)
corr=s1.corr(s2) #计算相关系数
print corr 
原创地址:http://www.30daydo.com/article/178​
欢迎转载,请注明出处。
 
  查看全部
相关系数的一些介绍:相关系数用来表示两个数据是否具有相关性,比如人每天吃饭的饭量和他的体重具有正相关系,也就是吃的饭量越多,体重会越重。 当然也会有例外,所以这个相关系数不会为1. 如果为1就是说明完全的正相关。
比如 c=[2,4,6,8,10,12,14,16,18] ,和d=[4,8,12,20,24,28,32,36], 这两组数据,相关系数为1,因为二者的数据都在同一条直线上。 存在必然的因果关系。
 

相关系数.png

 
其计算公式为:

01300000432684142233939909878_s.jpg

 
 
实际上python的中pandas已经提供了很简单的内置函数,可以自己计算这个相关系数。 在《python数据分析》这本书就有,不过网上查到的资料就比较少。
 
参考代码:
    c=[2,4,6,8,10,12,14,16,18]
d= [i*2 for i in c]
print d
s1=Series(c) #转为series类型
s2=Series(d)
corr=s1.corr(s2) #计算相关系数
print corr
corr()就是计算相关系数的函数。
 
上面的例子中,计算出的corr的值为1,如果修改一下d的某个值,比如 d[0]=3 把d的第一个值改为3,那么相关系数就不为1,但是他的相关系数为0.987503379952, 也差不多接近1. 说明这两组数据也是相关性很大的。
c=[2,4,6,8,10,12,14,16,18]
d= [i*2 for i in c]
print d
d[0]=3 # 修改d[0]的值
s1=Series(c) #转为series类型
s2=Series(d)
corr=s1.corr(s2) #计算相关系数
print corr
 
原创地址:http://www.30daydo.com/article/178​
欢迎转载,请注明出处。
 
 

numpy 中的ndarray类型转为list类型 / list转为ndarray类型

李魔佛 发表了文章 • 0 个评论 • 11418 次浏览 • 2017-04-22 22:50 • 来自相关话题

numpy的ndarry的类型是这样的[ 1  2 3 4  5] 中间是没有逗号的。
 
而python的基本类型list 是[ 1  ,2, 3,4,  5]这样的。
 
那么二者可以互换
 
ndarray转换为list d=np.array([1, 2, 3,4,5 ])
print d
e=d.tolist()
print e 或者直接调用list()
 
d=np.array([1, 2, 3,4,5 ])
print d
e=list(d)
print e
而list转为ndarry就依照上面的代码就可以了lst=[1, 2, 3,4,5 ]
d=np.array(lst)
原创地址:http://www.30daydo.com/article/174
转载请注明出处 查看全部
numpy的ndarry的类型是这样的[ 1  2 3 4  5] 中间是没有逗号的。
 
而python的基本类型list 是[ 1  ,2, 3,4,  5]这样的。
 
那么二者可以互换
 
ndarray转换为list 
d=np.array([1, 2, 3,4,5 ])
print d
e=d.tolist()
print e
 或者直接调用list()
 
d=np.array([1, 2, 3,4,5 ])
print d
e=list(d)
print e

而list转为ndarry就依照上面的代码就可以了
lst=[1, 2, 3,4,5 ]
d=np.array(lst)

原创地址:http://www.30daydo.com/article/174
转载请注明出处

Dataframe的数据print输出 显示为...省略号

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

例如: def get_achievement(self):
fc=ts.forecast_data(2016,4)
print fc 
上面这个简单的代码意思是获取已经发布的2016年第4季度的业绩预告的上市公司。
 
默认输出的结果是:





 
 
中间多了个省略号,就是中间若干的数据因为太多而没有被显示。 那么要怎样才能正常显示所有数据呢???
 
查看了pandas的官方文档。
 





 
 
pandas.set_option() 可以设置pandas相关的参数,从而改变默认参数。 打印pandas数据事,默认是输出100行,多的话会输出....省略号。
 
那么可以添加: pandas.set_option('display.max_rows',None)
这样就可以显示全部数据:
 
def get_achievement(self):

fc=ts.forecast_data(2016,4)
pandas.set_option('display.max_rows',None)
print fc
  查看全部
例如:
    def get_achievement(self):
fc=ts.forecast_data(2016,4)
print fc
 
上面这个简单的代码意思是获取已经发布的2016年第4季度的业绩预告的上市公司。
 
默认输出的结果是:

pandas省略号.PNG

 
 
中间多了个省略号,就是中间若干的数据因为太多而没有被显示。 那么要怎样才能正常显示所有数据呢???
 
查看了pandas的官方文档。
 

max_row.PNG

 
 
pandas.set_option() 可以设置pandas相关的参数,从而改变默认参数。 打印pandas数据事,默认是输出100行,多的话会输出....省略号。
 
那么可以添加: pandas.set_option('display.max_rows',None)
这样就可以显示全部数据:
 
    def get_achievement(self):

fc=ts.forecast_data(2016,4)
pandas.set_option('display.max_rows',None)
print fc

 

Python 机器学习之 SVM 预测买卖

littleDream 发表了文章 • 1 个评论 • 952 次浏览 • 2017-03-25 18:13 • 来自相关话题

 
Python入门简单策略 sklearn 机器学习库的使用

回测系统自带的库有
numpy pandas TA-Lib scipy statsmodels sklearn cvxopt hmmlearn pykalman arch matplotlib

实盘需要在托管者所在机器安装策略需要的库
基于BotVS 量化平台,测试的标的物是 数字货币 ,当然BotVS 也支持 商品期货,源码如下:
 from sklearn import svm
import numpy as np

def main():
preTime = 0
n = 0
success = 0
predict = None
pTime = None
marketPosition = 0
initAccount = exchange.GetAccount()
Log("Running...")
while True:
r = exchange.GetRecords()
if len(r) < 60:
continue
bar = r[len(r)-1]
if bar.Time > preTime:
preTime = bar.Time
if pTime is not None and r[len(r)-2].Time == pTime:
diff = r[len(r)-2].Close - r[len(r)-3].Close
if diff > SpreadVal:
success += 1 if predict == 0 else 0
elif diff < -SpreadVal:
success += 1 if predict == 1 else 0
else:
success += 1 if predict == 2 else 0
pTime = None
LogStatus("预测次数", n, "成功次数", success, "准确率:", '%.3f %%' % round(float(success) * 100 / n, 2))
else:
Sleep(1000)
continue
inputs_X, output_Y = ,
sets = [None, None, None]
for i in xrange(1, len(r)-2, 1):
inputs_X.append([r[i].Open, r[i].Close])
Y = 0
diff = r[i+1].Close - r[i].Close
if diff > SpreadVal:
Y = 0
sets[0] = True
elif diff < -SpreadVal:
Y = 1
sets[1] = True
else:
Y = 2
sets[2] = True
output_Y.append(Y)
if None in sets:
Log("样本不足, 无法预测 ...")
continue
n += 1
clf = svm.LinearSVC()
clf.fit(inputs_X, output_Y)
predict = clf.predict(np.array([bar.Open, bar.Close]).reshape((1, -1)))
pTime = bar.Time

Log("预测当前Bar结束:", bar.Time, ['涨', '跌', '横'][predict])
if marketPosition == 0:
if predict == 0:
exchange.Buy(initAccount.Balance/2)
marketPosition = 1
elif predict == 1:
exchange.Sell(initAccount.Stocks/2)
marketPosition = -1
else:
nowAccount = exchange.GetAccount()
if marketPosition > 0 and predict != 0:
exchange.Sell(nowAccount.Stocks - initAccount.Stocks)
nowAccount = exchange.GetAccount()
marketPosition = 0
elif marketPosition < 0 and predict != 1:
while True:
dif = initAccount.Stocks - nowAccount.Stocks
if dif < 0.01:
break
ticker = exchange.GetTicker()
exchange.Buy(ticker.Sell + (ticker.Sell-ticker.Buy)*2, dif)
while True:
Sleep(1000)
orders = exchange.GetOrders()
for order in orders:
exchange.CancelOrder(order.Id)
if len(orders) == 0:
break
nowAccount = exchange.GetAccount()
marketPosition = 0
if marketPosition == 0:
LogProfit(_N(nowAccount.Balance - initAccount.Balance, 4), nowAccount)
[/i][/i] 查看全部
 
Python入门简单策略 sklearn 机器学习库的使用

回测系统自带的库有
numpy pandas TA-Lib scipy statsmodels sklearn cvxopt hmmlearn pykalman arch matplotlib

实盘需要在托管者所在机器安装策略需要的库
基于BotVS 量化平台,测试的标的物是 数字货币 ,当然BotVS 也支持 商品期货,源码如下:
 
from sklearn import svm
import numpy as np

def main():
preTime = 0
n = 0
success = 0
predict = None
pTime = None
marketPosition = 0
initAccount = exchange.GetAccount()
Log("Running...")
while True:
r = exchange.GetRecords()
if len(r) < 60:
continue
bar = r[len(r)-1]
if bar.Time > preTime:
preTime = bar.Time
if pTime is not None and r[len(r)-2].Time == pTime:
diff = r[len(r)-2].Close - r[len(r)-3].Close
if diff > SpreadVal:
success += 1 if predict == 0 else 0
elif diff < -SpreadVal:
success += 1 if predict == 1 else 0
else:
success += 1 if predict == 2 else 0
pTime = None
LogStatus("预测次数", n, "成功次数", success, "准确率:", '%.3f %%' % round(float(success) * 100 / n, 2))
else:
Sleep(1000)
continue
inputs_X, output_Y = ,
sets = [None, None, None]
for i in xrange(1, len(r)-2, 1):
inputs_X.append([r[i].Open, r[i].Close])
Y = 0
diff = r[i+1].Close - r[i].Close
if diff > SpreadVal:
Y = 0
sets[0] = True
elif diff < -SpreadVal:
Y = 1
sets[1] = True
else:
Y = 2
sets[2] = True
output_Y.append(Y)
if None in sets:
Log("样本不足, 无法预测 ...")
continue
n += 1
clf = svm.LinearSVC()
clf.fit(inputs_X, output_Y)
predict = clf.predict(np.array([bar.Open, bar.Close]).reshape((1, -1)))
pTime = bar.Time

Log("预测当前Bar结束:", bar.Time, ['涨', '跌', '横'][predict])
if marketPosition == 0:
if predict == 0:
exchange.Buy(initAccount.Balance/2)
marketPosition = 1
elif predict == 1:
exchange.Sell(initAccount.Stocks/2)
marketPosition = -1
else:
nowAccount = exchange.GetAccount()
if marketPosition > 0 and predict != 0:
exchange.Sell(nowAccount.Stocks - initAccount.Stocks)
nowAccount = exchange.GetAccount()
marketPosition = 0
elif marketPosition < 0 and predict != 1:
while True:
dif = initAccount.Stocks - nowAccount.Stocks
if dif < 0.01:
break
ticker = exchange.GetTicker()
exchange.Buy(ticker.Sell + (ticker.Sell-ticker.Buy)*2, dif)
while True:
Sleep(1000)
orders = exchange.GetOrders()
for order in orders:
exchange.CancelOrder(order.Id)
if len(orders) == 0:
break
nowAccount = exchange.GetAccount()
marketPosition = 0
if marketPosition == 0:
LogProfit(_N(nowAccount.Balance - initAccount.Balance, 4), nowAccount)
[/i][/i]

sys.std.write和print的区别

李魔佛 发表了文章 • 0 个评论 • 544 次浏览 • 2017-03-13 22:00 • 来自相关话题

看别人写的程序,很多地方用sys.std.write,甚少用print。
于是google了下,主要区别在于sys.std.write输出没有换行符,而使用print有换行符
 
引用stackoverflow的例子

print 99


等同于
import sys 
sys.stdout.write(str(99) + '\n')

  查看全部
看别人写的程序,很多地方用sys.std.write,甚少用print。
于是google了下,主要区别在于sys.std.write输出没有换行符,而使用print有换行符
 
引用stackoverflow的例子

print 99


等同于
import sys 
sys.stdout.write(str(99) + '\n')

 

淘宝试用 每天自动申请 python程序

李魔佛 发表了文章 • 2 个评论 • 797 次浏览 • 2017-03-13 16:39 • 来自相关话题

手机上安装淘宝,并且登陆你的帐号,然后连接usb线到电脑,运行下面的程序
 
def taobao_shiyong():

d.screen.on()
d.press.home()

activity_name='com.taobao.taobao/com.taobao.tao.homepage.MainActivity3'
launch_app(activity_name)
mid_x=displayWidth/2

try:

d(text=u'我的淘宝').click()
time.sleep(3)
d(text='查看更多工具').click()
time.sleep(3)
d(scrollable=True).scroll.to(text=u'免费试用')
time.sleep(2)
d(text=u'免费试用').click()
time.sleep(3)


delta_y=144
full_y=1920
full_x=1080
fix_x=880
origin_y=222
d.swipe(fix_x,full_y-delta_y,fix_x,origin_y)
time.sleep(3)
#d.swipe(fix_x,952,fix_x,origin_y)
time.sleep(5)

sumakeji=displayWidth/8*3
jiayongdianqi=displayWidth/8*5
d.click(jiayongdianqi,1660)
time.sleep(3)

#each_dianpu()
#d.click(jiayongdianqi,300)

delta_each=400
time.sleep(3)

for dragtime in range(20):
for i in range(3):
d.click(919,600+i*delta_each)
time.sleep(8)
each_dianpu()

d.swipe(919,1600,919,400)

except:
print "Can't find items"
程序会一直运行,等到达到每天申请的最大次数。
  查看全部
手机上安装淘宝,并且登陆你的帐号,然后连接usb线到电脑,运行下面的程序
 
def taobao_shiyong():

d.screen.on()
d.press.home()

activity_name='com.taobao.taobao/com.taobao.tao.homepage.MainActivity3'
launch_app(activity_name)
mid_x=displayWidth/2

try:

d(text=u'我的淘宝').click()
time.sleep(3)
d(text='查看更多工具').click()
time.sleep(3)
d(scrollable=True).scroll.to(text=u'免费试用')
time.sleep(2)
d(text=u'免费试用').click()
time.sleep(3)


delta_y=144
full_y=1920
full_x=1080
fix_x=880
origin_y=222
d.swipe(fix_x,full_y-delta_y,fix_x,origin_y)
time.sleep(3)
#d.swipe(fix_x,952,fix_x,origin_y)
time.sleep(5)

sumakeji=displayWidth/8*3
jiayongdianqi=displayWidth/8*5
d.click(jiayongdianqi,1660)
time.sleep(3)

#each_dianpu()
#d.click(jiayongdianqi,300)

delta_each=400
time.sleep(3)

for dragtime in range(20):
for i in range(3):
d.click(919,600+i*delta_each)
time.sleep(8)
each_dianpu()

d.swipe(919,1600,919,400)

except:
print "Can't find items"

程序会一直运行,等到达到每天申请的最大次数。
 

Day6 leetcode Fizz Buzz 字符转换游戏(实在不知道该怎么翻译这个)

李魔佛 发表了文章 • 0 个评论 • 679 次浏览 • 2017-03-07 11:06 • 来自相关话题

Fizz BuzzWrite a program that outputs the string representation of numbers from 1 to n.

But for multiples of three it should output “Fizz” instead of the number and for the multiples of five output “Buzz”. For numbers which are multiples of both three and five output “FizzBuzz”.

Example:
n = 15,

Return:
[
"1",
"2",
"Fizz",
"4",
"Buzz",
"Fizz",
"7",
"8",
"Fizz",
"Buzz",
"11",
"Fizz",
"13",
"14",
"FizzBuzz"
]
中文解释:
输入一个数字,返回从1到这个数字的所有数字的字符串,如果遇到3的倍数,就替换成Fizz, 遇到5的倍数,就tihu替换成Buzz,同时是3和5的倍数,就tihu替换成FizzBuzz。
 
我的代码:
def fizzBuzz(self, n):
"""
:type n: int
:rtype: List[str]
"""

result=[]
for i in range(1,n+1):
remainder1=i%3
remainder2=i%5
if remainder1 != 0 and remainder2!=0:
result.append(str(i))
elif remainder1==0 and remainder2!=0:
result.append('Fizz')
elif remainder1!=0 and remainder2 == 0:
result.append("Buzz")
else:
result.append("FizzBuzz")

return result 查看全部
Fizz BuzzWrite a program that outputs the string representation of numbers from 1 to n.

But for multiples of three it should output “Fizz” instead of the number and for the multiples of five output “Buzz”. For numbers which are multiples of both three and five output “FizzBuzz”.

Example:
n = 15,

Return:
[
"1",
"2",
"Fizz",
"4",
"Buzz",
"Fizz",
"7",
"8",
"Fizz",
"Buzz",
"11",
"Fizz",
"13",
"14",
"FizzBuzz"
]

中文解释:
输入一个数字,返回从1到这个数字的所有数字的字符串,如果遇到3的倍数,就替换成Fizz, 遇到5的倍数,就tihu替换成Buzz,同时是3和5的倍数,就tihu替换成FizzBuzz。
 
我的代码:
    def fizzBuzz(self, n):
"""
:type n: int
:rtype: List[str]
"""

result=[]
for i in range(1,n+1):
remainder1=i%3
remainder2=i%5
if remainder1 != 0 and remainder2!=0:
result.append(str(i))
elif remainder1==0 and remainder2!=0:
result.append('Fizz')
elif remainder1!=0 and remainder2 == 0:
result.append("Buzz")
else:
result.append("FizzBuzz")

return result

Day5 leetcode Next Greater Element 下一个更大的元素

李魔佛 发表了文章 • 0 个评论 • 1294 次浏览 • 2017-03-03 09:30 • 来自相关话题

You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of nums2. Find all the next greater numbers for nums1's elements in the corresponding places of nums2.

The Next Greater Number of a number x in nums1 is the first greater number to its right in nums2. If it does not exist, output -1 for this number.
 
Example 1:
Input: nums1 = [4,1,2], nums2 = [1,3,4,2].
Output: [-1,3,-1]
Explanation:
For number 4 in the first array, you cannot find the next greater number for it in the second array, so output -1.
For number 1 in the first array, the next greater number for it in the second array is 3.
For number 2 in the first array, there is no next greater number for it in the second array, so output -1.Example 2:
Input: nums1 = [2,4], nums2 = [1,2,3,4].
Output: [3,-1]
Explanation:
For number 2 in the first array, the next greater number for it in the second array is 3.
For number 4 in the first array, there is no next greater number for it in the second array, so
Note:


All elements in nums1 and nums2 are unique.
The length of both nums1 and nums2 would not exceed 1000.
 
中文解释下:
有2个数组(列表) num1,和num2,

nums1 = [4,1,2], nums2 = [1,3,4,2].
 
nums1是num2的子集
 
然后在nums1中每个元素,在num2中找到第一个比它大的元素,比如nums1中第一个是4,在nums2中没有比4更大的,所以返回的是-1,nums第二个是1,在nums2中第一个比1大的是3,所以返回的是3,第三个的是2,nums2中第一个比2大的数是3,所以返回的是3
所以上面的结果需要返回:
[-1,3,3] 查看全部
You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of nums2. Find all the next greater numbers for nums1's elements in the corresponding places of nums2.

The Next Greater Number of a number x in nums1 is the first greater number to its right in nums2. If it does not exist, output -1 for this number.
 
Example 1:
Input: nums1 = [4,1,2], nums2 = [1,3,4,2].
Output: [-1,3,-1]
Explanation:
For number 4 in the first array, you cannot find the next greater number for it in the second array, so output -1.
For number 1 in the first array, the next greater number for it in the second array is 3.
For number 2 in the first array, there is no next greater number for it in the second array, so output -1.
Example 2:
Input: nums1 = [2,4], nums2 = [1,2,3,4].
Output: [3,-1]
Explanation:
For number 2 in the first array, the next greater number for it in the second array is 3.
For number 4 in the first array, there is no next greater number for it in the second array, so

Note:


All elements in nums1 and nums2 are unique.
The length of both nums1 and nums2 would not exceed 1000.

 
中文解释下:
有2个数组(列表) num1,和num2,

nums1 = [4,1,2], nums2 = [1,3,4,2].
 
nums1是num2的子集
 
然后在nums1中每个元素,在num2中找到第一个比它大的元素,比如nums1中第一个是4,在nums2中没有比4更大的,所以返回的是-1,nums第二个是1,在nums2中第一个比1大的是3,所以返回的是3,第三个的是2,nums2中第一个比2大的数是3,所以返回的是3
所以上面的结果需要返回:
[-1,3,3]

leetcode Day4 Keyboard Row 键盘中的行

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

Given a List of words, return the words that can be typed using letters of alphabet on only one row's of American keyboard like the image below.





 
Example 1:
Input: ["Hello", "Alaska", "Dad", "Peace"]
Output: ["Alaska", "Dad"]Note:


You may use one character in the keyboard more than once.
You may assume the input string will only contain letters of alphabet.
 
中文解释:
输入一个字符串列表,如果这个字符串的字母在键盘上的位置为同一行,就输出这个字符串,否则不输出。
 
def findWords( words):
"""
:type words: List[str]
:rtype: List[str]
"""

kb={'q':['q','w','e','r','t','y','u','i','o','p'],
'a':['a','s','d','f','g','h','j','k','l'],
'z':['z','x','c','v','b','n','m']}

rList=[]
qRow= kb['q']
aRow= kb['a']
zRow= kb['z']
for wi in words:
w=wi.lower()
i=0
l=len(w)

if w[0] in qRow:
row=qRow
if w[0] in aRow:
row=aRow
if w[0] in zRow:
row=zRow

#row=kb[w[0]]
for i in range(len(w)):
if w[i] not in row:
break
else:
if i==l-1:
rList.append(wi)
return rList
解释:
首先将字母转换为统一的小写字母,然后根据首字母确定该字符串会属于键盘上的哪一列,因为键盘上只有3列,分别为q,a,z行,如果确定属于q行,接下来将剩下的字符一直在q行内循环,一旦遇到不在q行,就退出这一次的循环,进行下一个字符串的判断。
  查看全部
Given a List of words, return the words that can be typed using letters of alphabet on only one row's of American keyboard like the image below.

keyboard.png

 
Example 1:
Input: ["Hello", "Alaska", "Dad", "Peace"]
Output: ["Alaska", "Dad"]
Note:


You may use one character in the keyboard more than once.
You may assume the input string will only contain letters of alphabet.
 
中文解释:
输入一个字符串列表,如果这个字符串的字母在键盘上的位置为同一行,就输出这个字符串,否则不输出。
 
    def findWords( words):
"""
:type words: List[str]
:rtype: List[str]
"""

kb={'q':['q','w','e','r','t','y','u','i','o','p'],
'a':['a','s','d','f','g','h','j','k','l'],
'z':['z','x','c','v','b','n','m']}

rList=[]
qRow= kb['q']
aRow= kb['a']
zRow= kb['z']
for wi in words:
w=wi.lower()
i=0
l=len(w)

if w[0] in qRow:
row=qRow
if w[0] in aRow:
row=aRow
if w[0] in zRow:
row=zRow

#row=kb[w[0]]
for i in range(len(w)):
if w[i] not in row:
break
else:
if i==l-1:
rList.append(wi)
return rList

解释:
首先将字母转换为统一的小写字母,然后根据首字母确定该字符串会属于键盘上的哪一列,因为键盘上只有3列,分别为q,a,z行,如果确定属于q行,接下来将剩下的字符一直在q行内循环,一旦遇到不在q行,就退出这一次的循环,进行下一个字符串的判断。