python——week2语法学习

总体回顾.

  python学习时,看书和做题相结合,做题会上瘾,实际动手编码也更能提升自己的水平.

有时候会犹豫自己选择哪种方向走下去,陷入四处搜集别人的说法的困局当中(比如周六晚上).其实走哪一条路无所谓,对于目前的我来说,没有基础知识,还处于入门阶段,关键的是先沿着一条路先走下去. 等一段时间过去,积累了足够的知识之后,再去考虑岔路口的问题.

和别人的相处上还需要学习,更加自如轻松

时间利用上,杜绝时间的碎片化.留出一段时间只去做一件事,目标要专注,不要看着这个想着那个. 面对网络上丰富的内容时,不要贪多,先找到一个教程看下去.

9/11  周二

上午:英语课,记单词

中午:睡觉,睡得不够长, 犯困

下午:看了两个视频+ 移动通信的课(上课很困)

晚上:看书补充集合的基本概念19---21 + 理顺学习的思路和步骤.

 

9/12

上午:读对象一节+随机过程

中午:睡觉,吃饭浪费时间

下午:NS3,时间都碎片化了

晚上:随机过程解决 +读书 +看一点英语文献 +解决便签上的问题.(碎片化的时间)

 

9/13

上午:读python  +最优化

 

9/14 周五

上午: python编码练习

中午:背单词 睡觉

下午:python------- crossin课程编码练,因为嫌notepad++ 和python shell不好用,新下载了pycharm,并且进一步熟悉了它的用法.
晚上:读python核心编程的部分内容,到了晚上看书已经看不进去了,丧失了耐心,走马观花一目十行看不进去了. 

 

9/15 周六

pycharm使用技巧慢慢地学习

上午: 9------11:30  crossin的编程教室 编程题 

下午:pycharm技巧看一看,

以后求职的方向?下一步用python 的练手方向? python网络编程方向,web后端

 

9/16 周日

晚上: 总结一周,处理所有杂事.

笔记回顾:

===========================开始正文===================================================

==============================================================================

快捷键

alt+p  显示上一行代码

alt + F4 终止在运行的程序

--------------------------------------------------------------------------------------------------------

区分概念

序列(sequence)  顾名思义,成员是有序排列的,包括:

 字符串str  列表 list1= [ ],列表是有顺序的   元组 tuple1= ( ) 一旦创建不能被修改.

 

映像:

字典dict { }体现的是数学当中的映射关系

集合set  ( )   无序的,且 不重复的集合 比如 s=set(‘cheeseshop’)   s 为 set([‘c’,’e’,’h’,’o’,’p’,’s’])

 

 

/剔除列表(list )num1中重复的数字

方法一:

num1= [1,2,3,4,5,4,3,2,1]

temp = []

for each in num1:

         if each not in temp:

                   temp.append(each)

方法二:利用集合的定义去做,集合中的元素不重复,可以自动剔除重复的元素。

num1=list(set(num1))

 

forzenset  命令作用: 设置一个不允许被更改的集合

num3= forzenset([1,2,3,4,5])

 

python 的切片(slice)

python的切片字符用于元组tuple 、字符串str或者列表list,采用的是左闭右开,即包含冒号左侧的第N个数,不包含右侧的数,下面以列表示例

 

 2、双切片字符

双切片:(::)一般是用于按一定的顺序呢取其中某几位元素    或    倒置字符串元组列表。

1[::N],N可为正数也可为负数,负号代表从右至左,

N的绝对值代表     每隔(N-1)     取一个,下面以字符串为示例:

 

对字符串进行切片, split()方法:第一个参数标识:  以   什么符号   分割      第二个参数表示分割几次

string.join(seq)命令,以 string为分隔符,将seq中的所有元素合并成一个新的字符串

 

介绍OS模块

该模块可以使python程序在不同的操作系统中均能运行,作用是对文件系统中的目录进行操作

import os

os.getcwd()获得当前目录  cwd   current work  directory

  os.chdir(‘e:\\’) 改变目录      change  directory

os.listdir(e:\\’) 列举当前盘符下的所有文件名 

os.mkdir(‘e:\\a’)  创建新的目录    make 写为mk

 

python之pickle模块

可以将一堆数据封装成一个文件,独立于代码之外,增强代码的简洁性.   类似于FPGA当中的ROM文件

 

Em:

#0封装一个模块

import pickle   #导入pickle模块

#1.准备好具体的数据

my_list = [123,3,5]

 

#2.新建一个文件,pickle_file叫做文件对象句柄

pickle_file = open(‘my_list.pkl’,’wb’)

 

 #3.把数据装到文件中去

pickle.dump(my_list,pickle_file)

 

#4.关闭文件

pickle_file.close()

 

#将模块拆解成原始的模样

#1.以二进制形式读取文件

pickle_file = open(‘my_list.pkl’,’rb’)

 

#2将文件从二进制形式转换回来

my_list2 = pickle.load(pickle_file)

 

#3 打印文件

print(my_list2)

--------------------------------------------------------------------------------------------------------

 

类 用类来描述对象

1. 定义类 ,就是一个模子 : 属性+方法

属性: 静态的特征

方法:动态的函数,动作

  2. 将类实例化,建立一个对象 ,称为这个类的一个实例 instance

 

方法一:  在实例instance中添加属性,不在class中设置.

#1 搭建一个模板 术语叫class 类

class Ball:

         def bounce(self):

                   if self.direction == 'down':

                            self.direction = 'up'

         #self用于在实例化对象时,给函数导入参数. 参数就是实例本身嘛.所以用 self

                           

#2 在搭建的模板上进行个性化定制 术语叫实例化

#定义实例 myBall

myBall = Ball()

 

#添加属性

myBall.direction = 'down'

myBall.color = ‘red’

myBall.size = ‘small’

 

 

方法二: 使用__init__方法直接在类定义中提前设置好属性

 

区分公有和私有

私有只能在 类 的内部访问,公有是指 类  外部也可以访问

定义了一个类,里面有函数和变量,当它们是私有时,这个类外面的函数不能通过任何方式用它们,只能是 类里面的函数 用它们,而公有的则可被任何函数调用

定义私有变量的方法,在变量前加两个“_”下划线,此时变量就成了私有变量.

下图为调用私有变量的方法.

方法一

方法二

​      

 

继承. 父类与子类.  子类继承父类的一些属性和特点,   从而子类能够共用父类的代码,使得代码更简洁

定义父类

class Parent():

def hello(self):

      print(‘正在调用父类方法’)

 

class Child(Parent):

#在子类的括号里填写父类的名称

  pass

#pass 是空语句  什么都不做

 

c = Child()

c.hello()

正在调用父类方法

 

如果子类中与父类中有同名的方法(def)或者属性, 调用子类时,以子类的为准,父类的不起作用.

解决上述情况的方法是,在子类中放入父类的方法,并在父类方法中传入子类的实例对象(self).此处的self代表的是子类的

import random as r

#父类

class Fish():

         def  __init__ (self):

                   self.x = r.randint(0,10)

        self.y = r.randint(0,10)

   def move(self):

        self.x -= 1

 

#子类

class Shark(Fish):

  def  __init__(self):

         Fish.__init__(self)   #在子类中放入父类的方法,并在父类方法中传入子类的实例对象(self).此处的self代表的是子类的

self.hungry = True

 

多重继承

class Base1():

class Base2():

class C(Base1,Base2)# 多重继承

 

使用super()进行继承

super() 的入门使用

在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了,可通过使用 super 来实现,比如:

 

     super().__init__()需要的父类的方法

 

class Shark(Fish):

      def __init__(self):

super().  __init__()    ====   super() .需要的父类的方法

self.hungry = True

 

组合   大类里套小类

先定义出来两个小类

class Turtle()

         def __init__(self,x):

                   self.num = x

 class Fish()

         def __init__(self,x):

                   self.num = x

然后在大类里放入小类

class Pool()

         def __init__(self,x,y):

                   self.turtle = Turtle(x)

                   self.fish =  Fish(y)

大类中的属性turtle 用小类Turtle 来实例化

大类中的属性fish 用小类Fish 来实例化

 

def print_num(self)

         print(‘共有乌龟%d只,鱼 %d条’   %(self.turtle,self.fish)  #写错了

         print(‘共有乌龟%d只,鱼%d条’ %(self.turtle.num,self.fish.num)  这样才能访问到x和y嘛

 

d.count为什么还是10

obj.attr  对应于 a.count   b.count  d.count 一般先查找实例属性,实例属性没有,再查找类属性 .d.count这个实例属性是存在的,所以d.count仍然还是10

 

所以一般如果要操作类属性的话, 最好是通过类方法 
class C(obejct):
count = 0

@classmethod
def count_update(cls, int):
cls.count += int 

 

class C(object):
count = 0
a = C()
这时候  a.count  是找不到实例变量的,所以上升到了类变量去找 找到了C.count
然后 a.count += 0 ,  会变成定义了一个实例变量,但是因为 a.count 找的时候没找到实例变量,所以 C.count + 10 然后赋值给了a.count 实例变量

所以内存地址会发生改变,a.count 是实例变量了

--------------------------------------------------------------------------------------------------------

    定义:BNF范式是一种用递归的思想来表述计算机语言符号集的定义规范,又称巴科斯范式(Backus-Naur form)。

内容:

尖括号“< >” 内包含的为必选项。

方括号“[ ] ”内包含的为可选项。

大括号“{ } ”内包含的为可重复0至无数次的项。

竖线“| ”表示在其左右两边任选一项,相当于"OR"的意思。

“::= ”是“被定义为”的意思。

引号里面的内容代表其本身。

举例:我们知道一个句子一般包含主语,谓语,宾语。

其中,谓语可以是动词或者动词短语,主语就是你我他。那么怎么用BNF范式描述呢?

<句子> ::= <主语> <谓语><宾语>

<谓语> ::= <动词> | <动词短语>

<主语> ::= 你 | 我 | 他

如果我们假设一个段落包含多个句子,那么段落定义就是:

<段落> ::= {句子}

EBNF又称扩展的巴科斯范式。EBNF 排除了 BNF 的一些缺陷:

BNF 为自身使用了符号 (<, >, |, ::=)。当它们出现在要定义的语言中的时候,BNF 不能不加以修改或解释的使用。

BNF 有着可选项和重复不能直接表达的问题。作为替代,它们需要利用中介规则或两选一规则,对于可选项,定义要么是空的要么是可选的产生式的规则,对于重复,递归的定义要么是被重复的产生式要么是自身的规则。

.......

扩展BNF(EBNF)引入了一些新的操作符:

?:意思是操作符左边的符号(或括号中的一组符号)是可选项(可以出现0到多次)。

*:是指可以重复多次。

+:是指可以出现多次。

不管是BNF还是EBNF都可以表达成一科语法树。

 

---------------------------------------------------------------------------------------------------------------------------------

 

print("%s's score is %d" %('mike',87)  注意这里用的是双引号,不能用单引号,如果使用单引号则会变成这样

 

注意关键字 False True 首字母大写

函数的返回值,使用return返回参数

 

print在python2 和python3

在Python2和Python3中都提供print()方法来打印信息,但两个版本间的print稍微有差异

主要体现在以下几个方面:

1.python3中print是一个内置函数,有多个参数,而python2中print是一个语法结构;

2.Python2打印时可以不加括号:print 'hello world', Python3则需要加括号   print("hello world")

3.Python2中,input要求输入的字符串必须要加引号,为了避免读取非字符串类型发生的一些行为,不得不使用raw_input()代替input()

--------------------------------------------------------------------------------------------------------

continue 的用法

当continue执行时, 会略过本次循环的余下内容,直接进入下一次循环。

sum+=s;   print (s,sum)  均被略过

进入下一次for 循环.

--------------------------------------------------------------------------------------------------------------------

函数默认参数:没有提供参数值时,这个参数就会使用代码中预置的;如果你提供了,就用你给的。

返回:

hello world

hello  python

--------------------------------------------------------------------------------------------------------------------

 *与**

在形参前面加* ** 称为动态参数

1.加* 函数可以接受  多个参数,全放入一个元组 tuple   (  )中

def   F(*args):

          print(args)

F(123,’456’)

得到一个元组(123,’456’)

 

2.加**,返回字典   { }

def AA(**kwargs):

      print(kwargs)

AA(k1=123,k2="456")

将会得到字典

 

{'k1': 123, 'k2': '456'}

 

匿名函数 lambda

add = lambda x,y:x+y

add(1,2)

 

一个概念:正则表达式

python里的模块-------import  re

 

刷过的题目:

表示 1+2+3+….+100

sum =0

 for i in range(1,101):

         if i>100:

                   break

         else:

sum =sum +i

 

打印

 

 

print(‘*’,end=’ ’) 则不换行.

--------------------------------------------------------------------------------------------------------------------

是否可哈希:

哈希:   Hash(哈希)  它是一种加密过的存储结构。它将任意长度的输入,通过散列算法,转换成固定长度的输出。这个输出就是散列的值。

Python 提供了 hash() 函数可对一些值进行哈希,但并不是所有的类型都能被哈希的。只有不可变类型才能被哈希,可变类型不能被哈希。Python 中不可变类型有:int,float,string,tuple;可变类型有:list(列表),dict(字典),set(集合)等

 

for  i  in range(9)    i的范围是  0  到 8

或者写为  range(1,9)

 

判断回文数的方法有哪些?

一.转换为字符串

1.类型转换 int ----str 得到str1    2.字符串倒序(字符串倒序的方法??)  得到str2  3.比较str1与str2

 

字符串倒序: 方法一

         str2 = str1[::-1]

 

方法二:

借助列表list [ ]  翻转

str1=(‘abcdefg’)

str2 = [ ]

for i In str1:

         str2.append(i)

str2.reverse()

此时得到

str2

['g', 'f', 'e', 'd', 'c', 'b', 'a']

下一步去掉 , 号

str3= ''.join(str2)

str3是’gfedcba'

正则表达式::

re.match() 从字符串的起始处进行匹配. 

re.search()  在字符串中搜索,不严格要求从头开始就一样

 

group() 方法. 返回正则表达式 匹配到的 所有对象

group()在正则表达式中用于获取分段截获的字符串,解释如下代码(代码来自网络):

import re
a = "123abc456"
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)    #123abc456,返回整体
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)    #123
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)    #abc
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)    #456

可以看出,正则表达式按照数字-字母-数字的顺序来获取相应字符串,那么分别就是“数字(group(1))--字母(group(2))--数字(group(3))”的对应关系,

其中,group(0)和group()效果相同,均为获取取得的字符串整体。

转载于:https://www.cnblogs.com/zyhe/p/9709692.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值