Python学习笔记(2)

已经学习Python两天了,总结一下学习成果。
初学Python,如果有写错的地方,还望各位大牛指出。

先列一列作品:

  1. Python socket 客户端测试程序
  2. EasyGUI 猜数游戏
  3. 看雪登录器

涉及到的知识点:

  1. 面向对象
  2. socket库
  3. httplib2库
  4. EasyGUI
    小知识点:

导入模块

通过这种方式导入模块中的全部内容。

from socket import *
import easygui as g

取随机数(0~10)

import random
rNum = random.randrange(0,10) #产生随机数

通过前后文本来取出中间文本

比如 AA广告SS
前面文本是AA , 后面文本是SS,中间文本就是广告

GetMiddleStr('AA广告SS','AA','SS') == 广告  此表达式成立
def GetMiddleStr(content,startStr,endStr):
  startIndex = content.index(startStr)
  if startIndex>=0: 
    startIndex +=len(startStr) 
  endIndex = content.index(endStr) 
  return content[startIndex:endIndex]

md5

pasword为要求md5的字符串

import hashlib
pasword = 'hello'
 m=hashlib.md5() #获取md5对象
        m.update(pasword.encode())
        md5=m.hexdigest()

类的一些东西

类成员函数的self参数:这个参数相当于C++的this指针。
被__包围的函数是类的私有函数。 其他的函数默认为公有函数。

EasyGUI

easygui 是一个非常简单的PythonGUI界面库,正如它名字中说的一样easy。
感谢小甲鱼的翻译文档:http://bbs.fishc.com/thread-46069-1-1.html

# Easy GUI demo
# 无名侠
# 2015.7.3
# 猜数字游戏。
import easygui as g
import random
g.msgbox('欢迎使用 猜数游戏~',ok_button='戳进来!')
rNum = random.randrange(0,10) #产生随机数
while 1:
    inNum = g.integerbox(msg='孩纸,输入你心仪的数字吧~',lowerbound=0,upperbound=10)
    if inNum==rNum:
        g.msgbox('哇哇,好厉害,好厉害!')
        break
    pass
    g.msgbox('孩纸 你还需要努力哦~')
pass

Httplib2

这是一个非常强大的Http库,我昨天用这个库写了一个看雪论坛的登录器。

# Python 看雪用户信息查询
# 无名侠
# www.pandaos.net
# 2015.7.3
import httplib2
import hashlib
import urllib
def GetMiddleStr(content,startStr,endStr):
  startIndex = content.index(startStr)
  if startIndex>=0: 
    startIndex +=len(startStr) 
  endIndex = content.index(endStr) 
  return content[startIndex:endIndex]
def md5_pas(pasword):
        '这个函数用于计算密码的md5值'
        m=hashlib.md5() #获取md5对象
        m.update(pasword.encode())
        md5=m.hexdigest()
        return md5
class Pediy:
    '看雪协议类'
    securitytoken=''
    cookies=''
    username=''
    def __init__(self):
        #获取securitytoken的值
        h=httplib2.Http()
        response,context = h.request("http://bbs.pediy.com/index.php", "GET")
        self.cookies=response['set-cookie']
        self.securitytoken=GetMiddleStr(context.decode(),'var SESSIONURL = "s=','&";')
        if self.securitytoken=='':
            print('初始化失败!无法获取securitytoken')
    def Login(self,username,password):
        #登陆看雪 成功返回用户名
        md5pas=md5_pas(password)
        data={'vb_login_username':username,'cookieuser':'1','s':self.securitytoken,'securitytoken':'guest','do':'login',
              'vb_login_md5password':md5pas,'vb_login_md5password_utf=':md5pas,'vb_login_password':''
              }
        headers={'Content-type': 'application/x-www-form-urlencoded','Cookie':self.cookies}
        h=httplib2.Http()
        resp,context = h.request("http://bbs.pediy.com/login.php?do=login","POST",headers=headers,body=urllib.parse.urlencode(data));
        context=context.decode()
        if  context.find('登录错误')!=-1:
          #print(context)
          print('登陆失败!账号或密码错误!')
          return False
        #更新Cookies
        self.cookies=resp['set-cookie']
        print(resp)
        return True
print('看雪Python版')
u=Pediy()
uname=input('前输入你的看雪用户名:')
pas=input('请输入你在看雪的密码:')
if not u.Login(uname,pas):
  print('登陆失败')
else:
  print('登陆成功')

涉及到的所有知识点已经在前面呈现过啦。
疑问:httplib2 请求后返回的协议头字典里面怎么只有一条Cookies?

socket库

socket库是Python自带的一个库非常好用哈,符合规范,上手很快。
作为一名想用Python做利刃的Geeker,不掌握socket是不行的。 今天我好想试试原始套接字/icmp等。

#coding=utf-8
# Python Socket 程序
# 无名侠
# 2015.7.3
from socket import *
import time
HOST = input('请输入服务器ip:')  #ip
PORT  = int(input('请输入目标端口:')) #端口
BUFSIZE = 1024 #缓冲区大小

sock = socket(AF_INET,SOCK_STREAM) #创建套接字
print('正在为你搭桥连接.......')
start = time.time()
try:
    sock.connect((HOST,PORT))
except IOError:
        print('无法连接服务器:'+HOST)
        exit()
print('已经连接  连接用时:'+str(int(time.time()-start))+'\n')
start=time.time()
while 1:
    data = input('> ')
    if not data:
        break
    sock.send(data.encode())
    data=sock.recv(BUFSIZE).decode();
    if not data:
        continue
    print('\n')
    print(data)
sock.close();
print ('已经断开连接! 连接时长:'+str(int(time.time()-start))+'\n')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值