2016.11.21-2016.11.26学习完《编程小白的第一本Python入门书》
这本书将很简单基础的必要理论知识与进阶的实践练习结合起来,易读懂,易上手。尤其是第七章将类的概念与可口可乐的生产类比,形象地介绍了子类、继承,实例等概念。下面从理论知识与实战技巧两方面,对这一周的学习做一个小结。
变量与字符串
因为之前有过短暂的Java编程经历,对这两个概念的理解并不吃力,但关于字符串的分片与索引,有如下认识:
| name = | M | y | | | n | a | m | e | | i| s | M | i | k | e|
|:-------------:|:-------------:| :-----:|:-----:|:----:|
| A | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |11| 12 |13 |14|
| B | -15 | -14 | -13 | -12 | -11 | -10 | -9| -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1|
注:name为一个字符串型变量示例,=为其赋值,A行代表该值的正向索引,B行代表该值的反向索引。
name[0]=name[-15]='M';
name[11:14]表示截取的编号从第11个字符开始,到位置14但不包含第14个字符结束,即'Mik';
name[5:]代表从编号为5的字符到结束的字符串分片,即'me is Mike';
name[:5]则代表从编号为0的字符开始到编号为5但不包含第5 个字符,即'My na'.
python中是严格区分大小写的,空格也是占位的。
由于python是面向对象的语言,所以它会有一些方法(method),这节我学到的关于字符串比较实用的方法有:
'!!!'.find('') 找到'!!!'中''的第一个字节所在索引并返回int型该索引值
'!!!'.replace('','###')将'.......'.中的''用'###'替换
'!!{}!!{}!'.format('###','&&')将'!!{}!!{}!'中的{}按顺序替换为'###'和'&&'
还了解到python中几个使用很频繁的函数:
type() 查看变量的类型
len() 括号内的参数限定为字符串,返回字符串字节的个数,为int型整数值
int() 将字符串类型的数字转换为整数类型
file = open(' filepath', 'w') 打开位于' filepath'处的文件,若没有则创建一个
file.write('$$$')往该文件中输入内容'$$$'
函数
def Function(arg1, arg2) :
do something
return something#
python中用缩进量的不同来表示代码的执行等级,处于同一缩进量的代码行是同一级,但执行起来完全按照行序从上至下进行,
代码块:具有相同缩进量的代码是在共同完成相同层面的事情
这节学到的小技巧有:
a**b 以a为底,b为指数的运算;
单行代码屏蔽:在想要屏蔽的代码行前加‘#’,如果想注释某一行也可用‘#’,在其后写上注释;为避免中文注释导致的报错问题,输入一行‘#coding: utf-8’
一段代码行屏蔽:在代码段的上端和下端均输入‘"'’即三个在英文输入法下的单引号;
abs() 该函数会返回输入参数的绝对值;
字符串首尾取法name[0],name[-1]比较巧妙,不用知道字符串整体长度。
逻辑判断与控制
布尔类型(Boolean Type)其实就是两类True和False,对于计算机来说True=1,False=0, 因此它们可以用于计算和比较大小
在Python中,任何对象都可以判断其布尔值,除了0,None和所有空的序列、集合、列表、字典,其布尔值为False,其余的均为True.
运算符有
1.Membership operator 表示归属关系: in, not in
2.Identity operator 进行身份比对:is, is not
3.Boolean Operator判断真假:not x, x and y, x or y
4.条件控制 if condition :
do something
elif condition:
do something
else:
do something
其中,else后面不用再跟条件,跟多个条件的话,用if, elif,...
5.循环(loop) for item in iterable :
do something
6.嵌套循环(Nested Loop) for i in iterable :
for j in iterable :
do something
7.while 循环 while condition :
do something
要警惕条件永远为True死循环(Infinite loop),要确认循环过程中可以制造某种使循环停止的条件或可改变循环成立的条件
本节有两道只有提示的综合题目,我跑出来的代码如下
- 第一道综合题代码
import random
def roll_dice( numbers = 3, points = None):
print('<<<<< GAME STARTS ! >>>>>')
if points is None:
points = []
while numbers > 0 :
point = random.randrange(1, 7)
points.append(point)
numbers = numbers - 1
return points
def roll_result(total) :
if 3 <= total <= 10 :
isSmall = 'Small'
return isSmall
elif 11 <= total <= 18 :
isBig = 'Big'
return isBig
def start_game(money):
points = roll_dice()
total = sum(points)
your_choice = input('Big or Small :')
your_bet = input('How much you wanna bet ? - ')
if your_choice in ['Big','Small'] :
you_win = your_choice == roll_result(total)
if you_win:
print('The points is {}, You win'.format(points))
money = money + int(your_bet)
print('You gained {}, you have {} now'.format(your_bet, money))
else :
print('The points is {}, You lose'.format(points))
money = money - int(your_bet)
print('You lost {}, you have {} now'.format(your_bet, money))
else :
print('Invalid words')
start_game(money)
return money
money = 1000
while money > 0:
money = start_game(money)
print('GAME OVER')
- 第二道综合题代码:
def number_in():
number = input('Enter your number')
dense = number[:11]
account = len(str(number))
if account != 11:
print('Invalid length, your number should be in 11 digits')
number_in()
return dense
def number_sure():
dense = number_in()
dense_1 = dense[:3]
dense_2 = dense[:4]
if int(dense_2 )== 1705 or \ int(dense_1) in [134, 135, 136, 137, 138, 139, 150, 151, 152, 157, 158, 159, 182, 183, 184, 187, 188, 147, 178]:
print('Operator : China Mobile', 'We \' are sending verification code via text to your phone:{}'.format(dense), sep='\n')
elif int(dense_2)== 1709 or \ int(dense_1)in [130, 131, 132, 155, 156, 185, 186, 145, 176]:
print('Operator China Union', 'We are sending verification code via text to your phone: {}'.format(dense), sep='\n')
elif dense_1 in [153, 180, 181, 189, 177, 133] or dense_2 == 1700: print('Operator : China Telecom', 'We are sending verification code via text to your phone :{}'.format(dense), sep='\n')
else: print('No such operator')
number_sure()
number_sure()
最大的体会:想清楚自己要实现的功能具体是什么,将其分解成几个步骤,给每个步骤创建一个子函数。
数据结构Data Structure
python的四种数据结构表示方法
1.列表 list = [ val1, val2, val3, val4...]
2.字典 dict = {key1 : val1, key2 : val2, key3 : val3, ...}
3.元组 tuple = (val1, val2, val3,...)
4.集合 set = {val1, val2, val3, val4...}
数据结构的掌握需要一个长期且系统的学习过程。这里,我们需要定性地知道他们的一些基本特征和相区分的概念
1.列表,元素可变,按顺序排列,可通过索引查找,修改,增减;
2.字典,key-value所谓键值对,是共生的,不存在没有键的值或没有值的键,原则上说,键一旦生成就不可更改,而值是可变的。
3.元组,稳固版的列表,不可修改,只能查看
4.集合,和数学里集合的概念类似,可以增减元素,但不能计算,元素不可重复,非常适合用集合来判断从属关系,消除数据结构中的重复元素。
了解到与数据结构有关的一些函数:
1.sorted([...]) 按照长短、大小、英文字母的顺序给列表中的每个元素排序,但不会改变原列表本身。sorted([...], reverse = True) 逆序
for a, b in zip ( [...], [...]) :
do something
3.推导式(list comprehension) ,又称列表的解析式
如
b = [ i for i in range(1, 11)]
字典的推导式:
'''
d = {i : i+1 for i in range(4)}
f = {i : j for i, j in zip([,,,], [,,,])}
'''
4.python独有的函数enumerate() 对列表生成两个列表,其中一个为其索引值
eg :
letters = ['a','b','c']
for num, letter in enumerate(letters):
print(letter, 'is', num+1)
控制台输出:
a is 1
b is 2
c is 3
5.import string #导入内建库
string.punctuation 为各种标点符号,运用'..'.split(string.punctuation )可删除字符串中的非文本类符号
6.range() 内置函数,range(n)表示从0到n-1; range(i,i+n)表示从i到i+n-1
import random #导入随机函数库
random.range(i, i+n)生成[i,i+n)区间的随机数
类与可口可乐
类:一系列有共同特征和行为事物的抽象概念的总和。
对于入门者来说,用可口可乐,属于我的可口可乐,你买的可口可乐来说明类与实例的关系,用可口可乐的配方与无糖可口可乐的配方来说明类的继承与覆盖的概念,很好理解,但因为这个概念比较高阶,不是一本入门级读物能完全教会的,同样需要持续学习。有三点需要掌握的:
1.类的形式:
如
class CocaCola :
formula = ['caffeine', 'sugar', 'water','soda']
formula代表变量,为类的属性(class attribute)
2.实例instance: 在‘=’左边创建一个变量,右边写上类的名称,即为类的实例化;
3.Python中类的属性引用机制是自外向内的,先看实例中有没有,实例中没有再看类中有没有,类中没有就报错。
4.生成器(generator) :可自动执行某种操作,如random.range()自动生成随机数,创建一个函数,在其任意一个循环(loop)中使用yield返回结果即可达到该效果。