初识python教学反思_Python初识(一)
首先我有编程语言的基础,你也有就最好了,这样会很快认识Python。
当然由于本人见识和学识的局限性,请广大猿/媛们多多包涵与指正(希望多评论哦),共同进步嘛。
先看看python的学习路线图:
◆ 准备环境:到python官网下载python3.5;并安装(win安装教程:http://www.tuicool.com/articles/eiM3Er3/)。开发工具一般用pycharm或eclipse+pydev插件。
◆ 首先,python是比较懒的语言————语法相对精简,当然和scala没法比。
◆ 再次,Python的每个语句末尾没有标志结束符号(一般语言是封号————";"),全凭语言本身判断。
可是它有冒号":"和依赖缩进,用以代替以老括号“{}”,为标志的代码块。
当然这就决定了他对代码格式敏感,比如下面的格式是正确的:
1 if inputNum >luky_num:2 print("the real number is smaller...")
◆ python的注释:
单行是井号 #,如:
#进入python世界的大门
print("Hello World!")
多行是 六个单引号,对你哦没看错,6个单引号!
'''
print("1111111111111111111")
print("2222222222222222222")
print("3333333333333333333")
'''
哦,对了。6个单引号还有个功能就是提供原样格式的字符串,如下:
1 str = '''
2 Hello, welcoming Python Word!3 wall, please ask me question。4 start ..'''
5 print(str)
一、声明变量
首先请看:
py 里的数据类型有如下几种:
数据类型
* 数字
Int
Float
Long
复数
* boolean 布尔
* str 字符串
* list 列表
* tuple 元组
* dict 字典
Python 声明变量无需关键字,类型也不用,语言本身会"类型推断"。
比如:
str1 = "我是什么类型?” #声明变量:语言本身会自己判断出这是字符串
NO = 5 #声明变量:语言本身会自己判断出这是int
li = ["I", "am", "python", "^|^"] #声明变量:语言本身会自己判断出这是列表(list)
dic = {'k1':'v1', "亚当":"夏娃"} #声明变量:语言本身会自己判断出这是字典(dict)
tu = (1,2,33, 55, 17101012345) #声明变量:语言本身会自己判断出这是元组(tuple)
二、python里的运算符大全
# ##################数字运算###############################
# % 取模 —— 返回除法的余数
# ** 幂——返回x的y次方
# / 取商——返回商
# // 取整除——返回商的整数部分
# == 等于——比较两个对象是否相等
# != 不等于——比较两个对象是否不相等
# = 等于——赋值
# > 大于
# < 小于
# <= 小于等于
# >= 大于等于
# += 加法赋值
# -= 减法赋值
# *= 乘法赋值
# /= 除法赋值
# %= 取模赋值
# **= 幂赋值
# ############位运算#######################################
# & 按位与运算
# | 按位或运算
# ^ 按位异或运算
# ~ 按位取反运算
# << 按位左移运算
# >> 按位右移运算
# >> 按位右移运算
# ############逻辑运算#######################################
# and 逻辑与
# or 逻辑或
# not 逻辑非
# ############成员运算#######################################
# in 运算符前边的元素在运算符后边的元素里吗?True:在;False:不在
# not in 运算符前边的元素不在在运算符后边的元素里吗?True:不在;False:在
# ############身份运算######################################
# #is 运算符前后是引用自同一对象吗?True:是的;False:不是
# not is 运算符前后不是引用自同一对象吗?True:不是;False:是的
# ############三目运算######################################
# res = 值1 if 条件 else 值2 # 若条件成立res=值1,否则res=值2
print(1 if 2 > 3 else 6)
三、py里的条件判断
eg1:
1 msg = "" #变量定义
2 if (a > b) : #条件判断
3 msg = 'a 大于 b' #变量赋值
4 elif(a == b): #条件判断
5 msg = 'a 和 b一样大' #变量赋值
6 else:7 msg = 'a 小于 b' #变量赋值
8
9 print(msg) #输出变量
eg2:
print(1 if 2 > 3 else 6) # 若条件成立输出1,否则输出6
eg3:
1 sex = input("您是man or girl?(请输入man or girl?)")2
3 if sex is "girl":4 print("I would like to have a limit monkey.")5 elif sex is "man":6 print("I like MM.")7 else:8 print("Pervert! you are Pervert!")
四、PY里的循环
python里只有while和for ineg1:
1 '''
2 小游戏:—— 猜数字3 每个人都有一个幸运数字。4 猜对它,不管对与错,只有3次机会5 '''
6
7 luckyNum = 19 #幸运数字
8 CI = 3 #共有3此机会
9 curCi = 0 #当前次数
10
11 whileTrue:12 inputNum = int(input("请输入您的幸运数字(共有" + CI + "次机会,还有" + str(CI-curCi) + "次机会哦^_^):"))13 curCi += 1
14 if luckyNum ==inputNum:15 print("bingo!结束")16 break
17 elif luckyNum >inputNum:18 print("The number is big, this number is smaller.")19 else:20 print("The number is small,this number is bigger.")
eg2:
# 求素数
for a in range(2, 101): # 求2~100的素数
for i in range(2, int(a**0.5)):
if a % i == 0:
break
else:
print(a)
# 循环结构中else子句判断循环有没有提前退出:若提前退出了则不执行else;若如果没有提前退出则执行else;
五、py内置数据结构
首先看看:
1)列表——list——用[ ]符号表示
例如:[1,2,3,4]
2)元组——tuple——用( )符号表示
例如:('d',300)
3)字典——dict——用{ }符号表示
例如:{'name':'coco','country':'china'}
python可变数据类型:列表list[ ]、字典dict{ }
python不可变数据类型:整型int、字符串str' '、元组tuple()
六、函数(python的函数大有学问,主要是糅合了函数式编程的思想。让我们慢慢学习它的强大吧)eg1:带默认值的参数
print('''
计算 X^n 的值
''')
def power(x, n = 2): # 参数有默认值
s = 1
while n > 0:
n = n - 1
s = s * x
return s
print(power(2))
print(power(2,2))
print(power(2,3))
print(power(2,4))
print(power(2,5))
eg2:可变参数
print(
'''
给定一组数字a,b,c……,请计算a^2 + b^2 + c^2 + ……
'''
)
def calc(*number): # 可变参数(任意参数)
sum = 0
for n in number:
sum += n * n
return sum
print(calc(*[1,2,3]))
print(calc(*(1,2,3)))
print(calc(1,2,3))
eg3:lambda和匿名函数
# 利用lambda来充当匿名函数
# lambda 格式:封号之前是参数列表,封号之后是函数体
print('求X^^2:',list(map(lambda x:x*x,range(1,10))))
f = lambda x:x*x
print(f(5))
eg4:高阶函数
print('''
\b高阶函数英文叫Higher-order function。参数是函数的函数叫高阶函数(强大之处)
''')
print(abs(-10))
print('函数本身也可以赋值给变量,即:变量可以指向函数。')
f = abs
print(f)
print('函数名也是变量:')
abs = 10
# print(abs(-10)) # 报错
print('传入函数:')
def add(x,y ,f):
return f(x) + f(y)
print(add(-2,3,f))
print('把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。')
eg5:返回值是函数————闭包
def lazySum(*args):
def sum():
ax = 0
for n in args:
ax = ax + n
return ax
return sum
f = lazySum(1,3,5,7,9)
print(f)
print(f())
print('''
在这个例子中,我们在函数lazy_sum中又定义了函数sum,
并且,内部函数sum可以引用外部函数lazy_sum的参数和局部变量,
当lazy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,
这种称为“闭包(Closure)”的程序结构拥有极大的威力。
''')
f1 = lazySum(1,3,5,7,9)
f2 = lazySum(1,3,5,7,9)
print(f1 == f2) # 闭包每次返回一个新的函数
print('''
eg1:
''')
def count():
fs =[]
for i in range(1,4):
def f():
return i * i
fs.append(f)
return fs
f1,f2,f3 = count()
print('f1() = %s, f2() = %s, f3() = %s' %(f1(), f2(), f3()))
print('''
eg2:
''')
def count2():
def f(j):
def g():
return j * j
return g
fs =[]
for i in range(1,4):
fs.append(f(i)) # f(i)被立即执行,因此传入的是i的当前值
return fs
f21,f22,f23 = count2()
print('f21() = %s, f22() = %s, f23() = %s' %(f21(), f22(), f23()))
eg6:偏函数
print(int('123456')) # str————>int 十进制(默认)
print(int('123456', base=8)) # str————>int八进制
print(int('1000010010', base=2)) # str————>int二进制
print('''
假设要转换大量的二进制字符串,每次都传入int(x, base=2)非常麻烦,
于是,我们想到,可以定义一个int2()的函数,默认把base=2传进去:
''')
def int2(x,base=2):
return int(x, base)
print(int2('100000000'))
print(int2('10101010'))
print(int2('10101010',base=10))
print('''
functools.partial就是帮助我们创建一个偏函数的,
不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2:
''')
import functools
int2 = functools.partial(int,base=2)
print(int2('10010000'))
max2 = functools.partial(max,10)
print(max2(5,6,7))
print(max2(5,66,7))
eg7:map()、reduce()
from builtins import map
from _functools import reduce
print(
'''
Python内建了map()和reduce()函数。
'''
)
print(
'''
我们先看map。map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
举例说明,比如我们有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()实现如下:
'''
)
def power(x, n = 2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
print(list(map(power,[e for e in range(1,10)])))
print(
'''
map()传入的第一个参数是f,即函数对象本身。
由于结果r是一个Iterator,Iterator是惰性序列,
因此通过list()函数让它把整个序列都计算出来并返回一个list。
'''
)
print(list(map(str, range(1,11))))
def add(x, y):
return x+y
print( reduce(add,[e for e in range(1,10) if e%2==1]) )
def fn(x, y):
return x * 10 + y
print( reduce(fn,[e for e in range(1,10) if e%2==1]) )
def chart2num(s):
return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'10':10}[s]
print( reduce(fn,map(chart2num,'13579')) )
print(
'''
整理成一个str2int的函数就是:
'''
)
def str2int1(s):
def fn(x,y):
return x*10+y
def chart2num(s):
return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'10':10}[s]
return reduce(fn,map(chart2num,s))
print( str2int1('13579') )
print(
'''
还可以用lambda函数进一步简化成:
'''
)
def str2int(s):
def fn(x,y):
return x+y
def chart2num(s):
return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'10':10}[s]
return reduce(lambda x,y:x*10+y,map(chart2num,s))
print( str2int('13579') )
print('''
利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']:
''')
def normalize(name):
return name[0].upper() + name[1:].lower()
# 测试:
L1 = ['adam', 'LISA', 'barT']
L2 = list(map(normalize, L1))
print(L2)
print('''
请编写一个prod()函数,可以接受一个list并利用reduce()求积:
''')
def prod(L):
return reduce(lambda x,y:x*y,L)
print('3*5*7*9 = ',prod([3,5,7,9]))
print(3*5*7*9)
print('''
利用map和reduce编写一个str2float函数,
把字符串'123.456'转换成浮点数123.456:
''')
def str2float(s):
l = list(map(int,s.split('.')))
print(l)
return reduce(lambda x,y:x+y*0.1**len(str(y)),l)
print('str2float(\'123.456\') =', str2float('123.456'))
eg8:装饰器
import time
def now():
return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
print(now())
f = now
print(f())
print(now.__name__)
print(f.__name__)
print('''
现在,假设我们要增强now()函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改now()函数的定义,
这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。
本质上,decorator就是一个返回函数的高阶函数。
所以,我们要定义一个能打印日志的decorator,可以定义如下:
''')
def log(func):
def wrapper(*args, **kw):
print('call %s()' %func.__name__)
return func(*args,**kw)
return wrapper
@log
def now():
return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
print(now())
print('''
如果decorator本身需要传入参数,那就需要编写一个返回decorator的高阶函数,
写出来会更复杂。比如,要自定义log的文本:
''')
def log(msg):
def decorator(func):
def wrapper(*args, **kw):
print('%s %s()' %(msg, func.__name__))
return func(*args, **kw)
return wrapper
return decorator
@log('execute')
def now():
return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
print(now())
print(now.__name__)
print('上面的写法有问题,为题就在于:函数名称改变了!为此Python语言给了解决方案,如下:')
import functools
def log(msg):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
print('%s %s()' %(msg, func.__name__))
return func(*args, **kw)
return wrapper
return decorator
@log('execute')
def now():
return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
print(now())
print(now.__name__)
eg9:filter()
from builtins import filter
print('''
Python内建的filter()函数用于过滤序列。
和map()类似,filter()也接收一个函数和一个序列。
和map()不同的是,
filter()把传入的函数依次作用于每个元素,
然后根据返回值是True还是False决定保留还是丢弃该元素。
''')
print('在一个list中,删掉偶数,只保留奇数,可以这么写:')
def is_odd(n):
return n%2==1
print(list(filter(is_odd, range(1, 20))))
print('把一个序列中的空字符串删掉,可以这么写:')
def isEmpty(s):
return s and s.strip()
print(list(filter(isEmpty, ['A','','','b',None,' ','c'])))
print('用filter求素数:')
print('计算素数的一个方法是埃氏筛法,它的算法理解起来非常简单:')
def oddIter():
n = 1
while 1:
n += 2
yield n
def isDivisible(n):
return lambda x:x%n>0
def primes():
yield 2
it = oddIter() # 初始化序列
while 1:
n = next(it) # 返回序列第一个数
yield n
it = filter(isDivisible(n), it)
# 打印1000以内的素数
for n in primes():
if (n < 1000):
print(n, end=" ")
else:
break
七、py里的正则
import re
m = re.match('abc', 'abcqwerab') # 匹配字符串
if m:print(m.group())
m = re.match('[0-9]', 'abc1qwe2rab') # 匹配0~9的一个数字
if m:print(m.group())
m = re.match('[0-9]', '6abcqwerab') # 匹配0~9的一个数字
if m:print(m.group())
m = re.match('[0-9]{11}', '13910116688') # 匹配11次0~9的数字
if m:print(m.group())
m = re.match('[0-9]{0,10}', '6abcqwerab') # 匹配【0~10】次0~9的一个数字
if m:print(m.group())
m = re.findall('[0-9]{11}', '6abcqwerab13901016688') # 匹配11次0~9的数字
if m:print(m)
m = re.findall('[0-9]{0,11}', '6abcqwerab13901016688') # 匹配【0~11】次0~9的数字
if m:print(m)
m = re.findall('[0-9]{1,11}', '6abcqwerab13901016688') # 匹配【1~11】次0~9的数字
if m:print(m)
m = re.findall('[a-zA-Z]{1,11}', '6abcqre3werab13901016688') # 匹配【1~11】次a~z/A~Z的字母
if m:print(m)
m = re.findall('.*', '6abcqre3werab13901016688') # 匹配0个或多个所有的(包括空串‘’)
if m:print(m)
m = re.findall('.+', '6abcqr?e#3w!erab13901016688') # 匹配0个或多个所有的(不包括空串‘’)
if m:print(m)
m = re.findall('[a-zA-z]+', '6abcqr?e#3w!er!@#¥%……&*()a_+b13901016688') # 匹配0个或多个所有字符(不包括空串‘’)
if m:print(m)
m = re.findall('~', '6abcqr?e#3!~w!er!@#¥%……&*()a_+b13901016688') # 匹配0个或多个所有的'~'(不包括空串‘’)
if m:print(m)
m = re.search('\d+', '66.886abcqwerab') # 匹配多次0~9的一个数字
if m:print(m.group())
m = re.search('\d+', 'def66.886abcqwerab') # 匹配多次0~9的一个数字
if m:print(m.group())
m = re.search('^\d+', 'def66.886abcqwerab') # 匹配以【多次0~9的一个数字】开头
if m:print(m.group())
m = re.search('^\d+', '22def66.886abcqwerab') # 匹配以【多次0~9的一个数字】开头
if m:print(m.group())
m = re.search('^\d+$', '22def66.886abcqwerab') # 匹配以【多次0~9的一个数字】开头且以【多次0~9的一个数字】结尾
if m:print(m.group())
m = re.search('^\d+$', '13901016688') # 匹配以【多次0~9的一个数字】开头且以【多次0~9的一个数字】结尾
if m:print(m.group())
m = re.sub('\d+', '|', 'def66.886abcqwerab') # 匹配多次0~9的一个数字并替换成‘|’
print(m)
m = re.sub('\d+', '|', 'def66.886abcqwerab', count=2) # 匹配2次0~9的一个数字并替换成‘|’
print(m)
附几个学习Python不错的教程吧:
未完待续
初识python教学反思_Python初识(一)相关推荐
- 初识python教学反思_初识Python
引子 计算机编程语言如同我们的自然语言一样,有其一套规范的语法,我们学习编程语言不过是学习它的那一套规则罢了. 语言的发展史 机器语言 --> 汇编语言 --> C语言(写程序时需要操作内 ...
- 初识python教学反思_[python第一课]初识python
print("1.第一章:初识python\npython历史:\n1.python是用c语言写的\n2.python是可以调用c语言库函数\n3.Python1.0是1994年1月\n4. ...
- python教学反思_Python第3课if教学反思:准备充分承上启下,优化内容模式初显
5月6日,大陈完成了和初中生一起学Python第3课的5个班教学,本节课教学设计请见我之前发布的:初中生学Python第3课,学习条件控制if语句,这样设计靠谱吗? 本节课在设计之初就吸取了第2课教学 ...
- 初识python 教学设计_青岛版八年级《初识Python》教学设计.doc
PAGE PAGE 2 第4课 初识Python教学设计 [教学目标] 1.知识与技能:了解python编程语言起源以及应用,知道python编辑器的常用用法,掌握利用python编写程序的一般步骤. ...
- python设计思路怎么写_初中信息技术 初识Python教学设计
案例名称 神秘的蟒蛇-初识 Python 科目 信息技术 教学对象 八年级 设计者 叶新苗 课时 1 课时 所用教材 湖北教育出版社 一.教材内容分析 <初识 Python > 是鄂教版教 ...
- 初中计算机初识word教学设计,《初识Word》教学设计
<初识Word>教学设计 <初识Word>教学设计 [教学内容] 苏教版小学信息技术(三年级)第22课<认识Word>. [教学目标] 1.知识与技能: (1)了解 ...
- python教学数据库_Python学习之数据库初识
9 数据库 9.1 数据库的初识 数据库是可以独立运行的,并且可以对数据的增删改查提供高效便捷方式的工具. 数据库解决的问题: 解决了操作文件的效率和便捷问题 解决了多个服务同时使用数据时的一致 ...
- python面向对象学习_Python 初识面向对象#学习猿地
> 面向对象编程--Object Oriented Programming,简称`OOP`,是一种**以对象为中心**的程序设计思想. > > 面向过程编程--Procedure O ...
- python入门教学反思_Python语言教学反思
本学期,我花了几节课在高一级进行了Python语言教学,通过实践,我总结如下: 1.让学生理解Python语言基础知识不难,但学生往往不能自主应用这些知识来解决实际问题. 2.要让学生真正重视Pyth ...
最新文章
- docker操作大全
- visual assist x太卡了_LeetCode69. x 的平方根
- 深入Python(5):递归
- 智慧城市:解构成渝城市群一体化
- 【转】一步步构建大型网站架构
- 本地仓库推送到远程仓库:fatal: refusing to merge unrelated histories
- 华为荣耀电脑第三方linux,【第三方Linux版】荣耀MagicBook Pro 16.1英寸全面屏如何?某东入手评测...
- Django 遇到的错误:expected str, bytes or os.PathLike object, not _io.TextIOWrapper
- 小伙工资取不出来 一查余额负999亿余元 网友:世界第一负翁?
- linux下的inode相关知识
- java完全参考手册
- STM32CubeMX配置DCMI+DMA之OV2640
- c语言幼儿园积木游戏,干货来袭!超详细幼儿园游戏活动教案
- 切西瓜法实现微信抢红包功能
- R语言基础知识(1)-数据类型及其常用方法
- 内存优化总结:ptmalloc、tcmalloc和jemalloc
- 正则匹配ip地址,手机号,对象类型
- 易语言打印九九乘法表
- 神威太湖之光是微型计算机,【单选题】国研制的神威·太湖之光计算机是 。
A. 微型计算机
B. 超级计算机
C. 小型计算机
D. 中型计算机...
- 华为认证网络工程师2022年最新学习路线整理