用Google API抓取搜索结果
#!/usr/bin/env python import urllib import simplejson query = urllib.urlencode({'q':'ixyzero.com'}) url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s'%(query) search_results = urllib.urlopen(url) json = simplejson.loads(search_results.read()) print(json) results = json['responseData']['results'] print len(results) for i in results: print i['title'] + ": " + i['url']
用Python生成随机密码
import string, random def makePassword(minlength = 5, maxlength = 25): length = random.randint(minlength, maxlength) letters = string.ascii_letters + string.digits return ''.join([random.choice(letters) for _ in range(length)]) print makePassword() print (sorted(random.sample(range(1,36), 5)) + sorted(random.sample(range(1,13),2)))
用Python生成随机密码_2
import random class Dictor(): CSet='abcdefghijklmnopqrstuvwxyz0123456789' def __init__(self, minlen, maxlen): if maxlen>minlen: self.__minlen=minlen self.__maxlen=maxlen else: self.__minlen=maxlen self.__maxlen=minlen def __iter__(self): return self def next(self): ret = '' for i in range(0, random.randrange(self.__minlen, self.__maxlen+1)): ret += random.choice(Dictor.CSet) return ret for word in Dictor(3, 3): print str(word)
用Python生成中文验证码
#!/usr/bin/env python # -*- coding: utf-8 -*- from PIL import Image, ImageDraw, ImageFont import random import math, string class RandomChar(): """用于随机生成汉字""" @staticmethod def Unicode(): val = random.randint(0x4E00, 0x9FBF) return unichr(val) @staticmethod def GB2312(): head = random.randint(0xB0, 0xCF) body = random.randint(0xA, 0xF) tail = random.randint(0, 0xF) val = ( head << 8 ) | (body << 4) | tail str = "%x" % val return str.decode('hex').decode('gb2312') class ImageChar(): def __init__(self, fontColor = (0, 0, 0), size = (100, 40), fontPath = 'wqy.ttc', bgColor = (255, 255, 255), fontSize = 20): self.size = size self.fontPath = fontPath self.bgColor = bgColor self.fontSize = fontSize self.fontColor = fontColor self.font = ImageFont.truetype(self.fontPath, self.fontSize) self.image = Image.new('RGB', size, bgColor) def rotate(self): self.image.rotate(random.randint(0, 30), expand=0) def drawText(self, pos, txt, fill): draw = ImageDraw.Draw(self.image) draw.text(pos, txt, font=self.font, fill=fill) del draw def randRGB(self): return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) def randPoint(self): (width, height) = self.size return (random.randint(0, width), random.randint(0, height)) def randLine(self, num): draw = ImageDraw.Draw(self.image) for i in range(0, num): draw.line([self.randPoint(), self.randPoint()], self.randRGB()) del draw def randChinese(self, num): gap = 5 start = 0 for i in range(0, num): char = RandomChar().GB2312() x = start + self.fontSize * i + random.randint(0, gap) + gap * i self.drawText((x, random.randint(-5, 5)), RandomChar().GB2312(), self.randRGB()) self.rotate() self.randLine(18) def save(self, path): self.image.save(path) ic = ImageChar(fontColor=(100,211, 90)) ic.randChinese(4) ic.save("vcode.jpg")
安装PIL,并且引入方式为”from PIL import Image, ImageDraw, ImageFont”;然后去官网找文泉驿的字体,下载后存为”wqy.ttc”,之后应该就没多大问题了。
猜数字游戏
#!/usr/bin/env python # -*- coding: utf-8 -*- import random #数字类 class NumberItem: #数字个数 _GUESS_NUMBER_COUNT_ = 4 def __init__(self): self._num_ = [] #长度是否标准 def IsFormat(self): return self._num_.__len__() == self._GUESS_NUMBER_COUNT_ #生成随机数 def RestRandomNumber(self): allNum = range(10) for index in range(self._GUESS_NUMBER_COUNT_): self._num_.append(allNum.pop(random.randrange(10-index))) #校验输入数 def CheckNumber(self, input_number): result = NumberCheckResult() for index in range(self._GUESS_NUMBER_COUNT_): if (input_number._num_[index] == self._num_[index]): result.Add_A() elif(input_number._num_[index] in self._num_): result.Add_B() return result #返回字符串 def GetNumber(self): return self._num_ #竞猜结果 xAxB class NumberCheckResult: def __init__(self): self._guess_A_ = 0 self._guess_B_ = 0 def GetCheckResult(self): return '%d A %d B' % (self._guess_A_, self._guess_B_) def Add_A(self): self._guess_A_ += 1 def Add_B(self): self._guess_B_ += 1 #竞猜历史项 class GuessHisItem: def __init__(self): self._guessNum_ = NumberItem() self._guessResult_ = NumberCheckResult() def ShowItem(self): print self._guessNum_.GetNumber() , ' - ' , self._guessResult_.GetCheckResult() #游戏类 class GuessNumberGame(): #机会次数 _MAX_GUESS_TIMES_ = 8 def __init__(self): self.ResetGameDate() #重置游戏数据 def ResetGameDate(self): self._guessNum_ = NumberItem() self._guessHis_ = [] def GetGuessTimes(self): return self._guessHis_.__len__() #输入字符串的格式转换 def ChangeInputNumberFormat(self, numberStr): parseNum = NumberItem() if (numberStr.isdigit()): for eachNum in numberStr: parseNum._num_.append(int(eachNum)) return parseNum #打印竞猜历史 def ShowGuessHis(self): print '' print '你已经猜了 %d次, 总共%d次机会' % (self.GetGuessTimes(), self._MAX_GUESS_TIMES_) print '' for eachItem in self._guessHis_: eachItem.ShowItem() print '' def ShowHelp(self): print '' print '输入 'help' 显示命令列表.' print '输入 'his' 显示竞猜历史' print '输入 'cheat' 显示作弊结果' print '输入 'quit' 结束游戏' print '' def ShowCheat(self): print '' print '要猜的数字是 ', self._guessNum_.GetNumber() print '' def StartOneGame(self): self.ResetGameDate() print '开始猜数字游戏!' self._guessNum_.RestRandomNumber() print '随机号码 [*' + ',*'*(self._guessNum_._GUESS_NUMBER_COUNT_-1) + ']已经生成,你有%d次机会!' % self._MAX_GUESS_TIMES_ #猜中标志 guess_result = False quit_flag = False while (self.GetGuessTimes() < self._MAX_GUESS_TIMES_ and guess_result != True and quit_flag != True): print '你还剩%d次机会,输入你猜的数字:' % (self._MAX_GUESS_TIMES_- self.GetGuessTimes()) input_str = raw_input(); if (input_str == 'help'): self.ShowHelp() elif(input_str == 'his'): self.ShowGuessHis() elif(input_str == 'cheat'): self.ShowCheat() elif(input_str == 'quit'): quit_flag = True else: #转换输入并校验 hisItem = GuessHisItem() hisItem._guessNum_ = self.ChangeInputNumberFormat(input_str) if (hisItem._guessNum_.IsFormat() != True): print '数字格式错误, 重新输入!' else: #竞猜历史 hisItem._guessResult_ = self._guessNum_.CheckNumber(hisItem._guessNum_) self._guessHis_.append(hisItem) hisItem.ShowItem() #猜中 if (hisItem._guessResult_._guess_A_ == NumberItem._GUESS_NUMBER_COUNT_): guess_result = True print '恭喜,你猜中了数字' , self._guessNum_.GetNumber() , ' 用了%d次机会' % self.GetGuessTimes() elif(self.GetGuessTimes() == self._MAX_GUESS_TIMES_ ): print '' print '挑战失败,你已经猜了%d次,' % self.GetGuessTimes(), '正确的数字是', self._guessNum_.GetNumber() return quit_flag def StartGame(self): quit_flag = False while(quit_flag != True): quit_flag = self.StartOneGame() if (quit_flag != True): print '' print '再玩一局?(Y/N)' input_str = raw_input(); if (input_str != 'Y'): quit_flag = True print '再见!' ###### MAIN ####### if __name__ == '__main__': game = GuessNumberGame() game.StartGame()
以上的代码部分参考自:http://outofmemory.cn/
计算逆波兰算式
#!/usr/bin/env python #coding=utf-8 class Solution: def add( self, num1, num2 ): return num1 + num2 def sub( self, num1, num2 ): return num1 - num2 def mul( self, num1, num2 ): return num1 * num2 def div( self, num1, num2 ): if num1 * num2 < 0: return -((-num1) / num2 ) return num1 / num2 operator = { "+": add, "-": sub, "*": mul, "/": div } def evalRPN(self, tokens): nums = [] for s in tokens: if s in ["+","-","*","/"]: num2 = nums.pop() num1 = nums.pop() re = self.operator.get(s)(self,num1,num2) nums.append(re) else: nums.append(int(s)) return nums[0] testS = Solution() expression = ["2", "1", "+", "3", "*"] print testS.evalRPN(expression) #((2 + 1) * 3) -> 9 expression2 = ["4", "13", "5", "/", "+"] print testS.evalRPN(expression2) #(4 + (13 / 5)) -> 6
代码源于:Evaluate Reverse Polish Notation
Python的字符串格式化
字符串格式化使用字符串格式化操作符,即%来实现。在%的左侧放置一个字符串(格式化字符串),而右侧则放置希望格式化的值。可以使用一个值,如一个字符串或者数字;也可以使用多个值的元组或者字典。一般情况下使用元组:
>>> format = 'Hello, %s. %s enough for ya?' >>> values = ('world', 'Hot') >>> print format % values Hello, world. Hot enough for ya?
注:
(1)如果使用列表或者其他序列代替元组,那么序列就会被解释成一个值。只有元组和字典可以格式化一个以上的值。
(2)如果要在格式化字符串里面包括百分号,那么必须使用%%,这样Python就不会将百分号误认为是转换说明符了。
>>> format = 'The rate is %s%, so low' >>> values = 31.0 >>> print format % values Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: not enough arguments for format string
>>> format = 'The rate is %s%%, so low' >>> values = 31.0 >>> print format % values The rate is 31.0%, so low
如果要格式化实数,可以使用f说明符类型,同时提供所需要的精度:一个句点再加上希望保留的小数位数。因为格式化说明符总是以表示类型的字符结束,所以精度应该放在类型字符的前面:
>>> format = 'Pi with three decimals: %.3f' >>> from math import pi >>> print format % pi Pi with three decimals: 3.142
格式化操作符的右操作数可以是任何东西,如果是元组或者映射类型,那么字符串格式化将会有所不同。
如果右操作数是元组的话,则其中的每一个元素都会被单独格式化,每一值都需要一个对应的转换说明符。
注意:如果需要转换的元组作为转换表达式的一部分存在,那么必须将它用圆括号括起来,以避免错:
>>> '%s plus %s equals %s' % (1, 1, 2) '1 plus 1 equals 2' >>> '%s plus %s equals %s' % 1, 1, 2 # Lacks parentheses! Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: not enough arguments for format string
格式 | 描述 |
%% | 百分号标记 |
%c | 字符及其ASCII码 |
%s | 字符串 |
%d | 有符号整数(十进制) |
%u | 无符号整数(十进制) |
%o | 无符号整数(八进制) |
%x | 无符号整数(十六进制) |
%X | 无符号整数(十六进制大写字符) |
%e | 浮点数字(科学计数法) |
%E | 浮点数字(科学计数法,用E代替e) |
%f | 浮点数字(用小数点符号) |
%g | 浮点数字(根据值的大小采用%e或%f) |
%G | 浮点数字(类似于%g) |
%p | 指针(用十六进制打印值的内存地址) |
%n | 存储输出字符的数量放进参数列表的下一个变量中 |
==字符串格式化代码==
《“一些Python片段_4 & Python字符串格式化”》 有 1 条评论
从两道CTF实例看python格式化字符串漏洞
https://www.anquanke.com/post/id/170620
`
什么是python格式化字符串漏洞
python常见的格式化字符串
SWPUCTF 皇家线上赌场
文件读取
绕过目录限制
format格式化字符串漏洞
百越杯Easy flask
环境搭建
用户遍历
源码审计
format格式化字符串
Session伪造
总结
参考文章
`