转载请在文章起始处注明出处,谢谢。
文章转自本人之前博客
0. 写在前面
没有输出的输入,只能算是知识的囤积。
1. 基础
1.1 数学操作符
加:+
减:-
乘:*
除:/
指数:**
取余:%
整除://
注意:'**'优先级最高,其次是'*'、'/'、'//'、'%',从左往右,最后是'+'、'-'。
1.2 数据类型
整型:int
浮点型:float
字符串:strs
1.3 字符串的连接和复制
连接:使用'+' 如:'hello' + 'world'
复制:使用'*' 如:'-' * 30
1.4 在变量中保存值
变量就像是计算机内存中的一个盒子。
赋值语句:变量名 赋值操作符('=') 储存的值
变量名:a.只能是一个词 b.包含数字、字母、下划线 c.不能以数字开头
驼峰:helloWorld
1.5 其他
单行注释:#
多行注释:''' '''
输入:input()
输出:print()
字符串中字符个数:len()
数据类型转换:str() int() float()
1.6 项目:简易计算器
'''
两位数加减乘除
首先是欢迎界面
'''
print('='*43)
print('Welcome!Please choose the function!')
print('1.ADD 2.SUBTRACT 3.MULTIPLY 4.DIVIDE 5.EXIT')
print('='*43)
while True: #通过while循环实现多次计算
choose = input('The number you choose is:')
if choose.isdigit():#判断输入是否符合要求
choose = int(choose)#若输入为数字,则将str转换成int
if choose == 1:#add
the_first_number = float(input('Please input the first number:'))
the_second_number = float(input('Please input the second number:'))
add_answer = the_first_number + the_second_number
print('The answer is:%r'%add_answer)
elif choose == 2:#subtract
the_first_number = float(input('Please input the first number:'))
the_second_number = float(input('Please input the second number:'))
subtract_answer = the_first_number - the_second_number
print('The answer is:%r'%subtract_answer)
elif choose == 3:#multiply
the_first_number = float(input('Please input the first number:'))
the_second_number = float(input('Please input the second number:'))
multiply_answer = the_first_number * the_second_number
print('The answer is:%r'%multiply_answer)
elif choose == 4:#divide
the_first_number = float(input('Please input the first number:'))
the_second_number = float(input('Please input the second number:'))
if the_second_number == 0:#0不能做被除数
print('The second number should\'t be zero!')
else:
divide_answer = the_first_number / the_second_number
print('The divide answer is:%r'%divide_answer)
elif choose == 5:#exit
print('EXIT!\nSee U next time!')
break
else:#Exceptions
print('Your number is out of 1 to 5.\nPlease input the right number.')
else:#Exceptions
print('Someting is wrong!\nPlease input the right number!')
continue
2. 控制流
程序不仅仅是简单的执行一行代码,而是根据表达式求值结果,决定在什么条件下执行哪些Python命令。
2.1 布尔值
只有两种:True False
2.2 比较操作符
等于:== 注:和赋值操作符'='不同
不等于:!=
大于:>
小于:<
大于等于:>=
小于等于:<=
求值结果为:True False
2.3 布尔操作符
and or not
Python先求值not,然后是and,最后是or。
2.4 控制流元素
开始是一个判断语句(’条件’),接下来是一个代码块(’子块’)。
2.5 控制流语句
2.5.1 if、elif、else
if 条件:
子块
elif 条件:
子块
else:
子块
2.5.2 while循环
while 条件:
子块
2.5.3 break语句、continue语句
程序执行遇到break马上退出while语句。执行遇到continue语句,会马上跳到循环开始处,重新对循环条件求值。
例如:输入名字和口令
while True: #while循环
yourName = 'lee'
yourPassword = '12345'
name = input('What is your name?')
if name != yourName:
print('Wrong,please input your right name.')
continue #continue语句
print('Hello lee,please input your password.')
password = input()
if password == yourPassword:
break #break语句
print('Access granted.')
2.5.4 for循环、range()函数
for循环、range()函数可以让代码块执行固定次数。
例如:高斯算数
total = 0
for num in range(101):
total += num
print(total)
range(起始值,终止值,步长)
2.5.5 等价的while循环
while循环也可以和for循环一样,执行固定次数。
i = 0
while i < 5:
print('hello world')
i += 1
注意:break、continue语句仅适用于while、for循环中。
2.5.6 导入模块
内建函数:如print()函数
标准库:每个模块都是一个程序,包含一组相关函数,使用import导入该模块。
import random
random.randint(1,5)
from import语句
from random import *
使用这种形式的import,调用random中的函数,不需要使用random.前缀。为了代码可读性,最好使用普通形式的import语句。
2.5.7 用sys.exit()提前终止程序
import sys
while True:
response = input()
if response == 'exit':
break #print()还要执行
#sys.exit() #print()不执行
print(response)
3. 函数
函数就像是程序内的小程序。
3.1 def语句和参数
可以消除重复,使程序更短、更易读、更容易更新。
def 函数名(参数):
子块
3.2 返回值和return语句
函数调用求值的结果,叫做返回值。
return 函数应该返回的值或表达式
3.3 None值
表示没有值,是NoneType数据类型的唯一值。
3.4 关键字参数和print()
print()函数可选的变元有end、sep,分别指定在参数末尾打印什么,和在参数之间打印什么来隔开他们。
例如:
print('hello',end='')
print('world')
运行结果为:
helloworld
例如:
print(‘a’,’b’,’c’,sep=’,’)
a,b,c
3.5 局部和全局作用域
在被调用函数内赋值的变元和变量,处于该函数的“局部作用域”,称为“局部变量”。
在函数之外赋值的变量,属于“全局作用域”,称为“全局变量”。
注意:
a.局部变量不能在全局作用域内使用
b.局部作用域不能使用其他局部作用域内的变量
c.全局变量可以在局部作用域中读取
d.技术上来讲,局部变量可以和全局变量名称相同
3.6 global语句
如果需要在函数内修改全局变量,使用global语句。
global 变量名
3.7 异常处理
try:
子块
except 错误:
子块
3.8 项目1:猜数字
No.1
import random
number = random.randint(1,20)
i = 1
while True:
if i < 7:
guessNumber = int(input('Guess a number between 1 to 20:'))
if guessNumber == number:
print('You take %d times to guess the right number.'%i)
exit()
elif guessNumber > number:
print('Too big.Try again.')
elif guessNumber < number:
print('Too low.Try again.')
else:
print('Times out.')
break
i += 1
No.2
import random
number = random.randint(1,20)
for i in range(1,7):
guessNumber = int(input('Guess a number between 1 to 20:'))
if guessNumber > number:
print('Too big.Try again.')
elif guessNumber < number:
print('Too low.Try again.')
else:
break
if guessNumber == number:
print('Right in ' + str(i) +' times.')
else:
print('The number is ' + str(number) +'.')
3.9 项目2:collatz序列
#coding = utf-8
def collatz(): #定义collatz函数
global num #num为全局变量,故在函数内修改全局变量,需使用global
if num%2 == 0:
num //= 2
print(num)
return num
else:
num = num*3 + 1
print(num)
return num
#输入
num = input('请输入一个正整数:')
#异常处理
try:
num = int(num)
while num != 1:
collatz()
print('num=%d'%num)
except ValueError:
print('请输入正确的值。')
4. 列表
4.1 列表数据类型
列表是一个值,它包含多个字构成的序列,’[]’。
使用下标可以取得列表的值,如:egg[1]。第一个值下标为0,第二个为1,以此类推。
负数下标表示从后往前数,-1表示列表最后一个下标,以此类推。
可以利用切片取得子列表,从第一个下标开始,到第二个下标结束,不包括第二个下标的值,如egg[1,3],取得egg[1]、egg[2],但不包含egg[3]。
可以使用len()函数返回列表值的个数。
列表的增、删、改、查:
增:append()方法 insert()方法
删:del语句 pop() 如:del egg[1]
改:egg[1] = 2
查:index()方法 如:egg.index('1')
列表的连接和复制:
连接:'+'
复制:'*'
4.2 使用列表
列表可用于循环。
for i in [1,2,3]:
print(i)
in和not in操作符:
'1' in ['1','2','3']
多重赋值:是一种快捷方式,可以在一行代码中,用列表中的值为多个变量赋值。
cat = ['fat','black','loud']
size,color,disposition = cat
4.3 增强的赋值操作
+=
-=
*=
/=
4.4 方法
方法和函数是一回事,只不过方法是调用在一个值上。如:egg.index(‘1’),方法部分跟在值后面,以一个句点(.)隔开。
如:
增:append()方法 insert()方法
删:remove()方法,第一次出现的值会被删除
查:index()方法,返回值的下标 如:egg.index('1')
排序:sort()方法 如:egg.sort() egg.sort(reverse=True)逆序排序
4.5 类似列表的类型:字符串和元组
字符串和元组是不可变的,列表是可变的。
用list()、tuple()函数来转换类型。
4.6 引用
a = [1,2,3]
b = a
b[0] = 0
a
b
输出为:
[0,2,3]
[0,2,3]
变量不保存列表,它保存的是对列表的引用。
b = a是指b复制了a的引用,a、b指向同一个列表,修改b,实际上是修改了a、b引用的列表。
传递引用:函数调用列表作为参数时,是对列表的引用。
copy模块的copy()和deepcopy()函数:
copy.copy()可以复制列表或字典这样的可变值,而不是复制引用。
例如:
import copy
a = [1,2,3]
b = copy.copy(a)
b[0] = 0
a
b
输出:
[1,2,3]
[0,2,3]
若要复制的列表中包含了列表,那就要用copy.deepcopy()函数来代替。
4.7 项目1:逗号代码
对于任意的列表,可改成一行字符串,最后一位值为’and+变量’
a = ['2','4','d',1]
a[-1] = 'and ' +str(a[-1]) #修改最后一位为'and+变量''
i = 0
while i < len(a)-1:
print(a[i],end=',')
i += 1
print(a[-1]) #最后一位后无','
4.8 项目2:字符图网格
grid = [['1','2','3','4'],
['1','2','3','4'],
['1','2','3','4'],
['1','2','3','4']]
#grid[i][j]
#循环嵌套
for j in range(0,4):
for i in range(0,4):
if i == 3:
print(grid[i][j])
else:
print(grid[i][j],end = '')
5. 字典和结构化数据
5.1 字典数据类型
字典的索引被称为’键’,键及其关联的值称为’键-值’对。 ‘key-value’
例如:
myCat = {'size':'fat','color':'black','disposition':'loud'}
myCat[size]
输出:
fat
字典是不排序的,所以无法像列表一样切片。若访问不存在的值,就会导致KeyError错误。
字典的三个方法:key()、value()、item(),分别对应键、值、键-值对。这些方法返回的数据类型不是列表,分别是dict_keys、dict_values、dict_items。但这些返回值可用于for循环。注意:item()返回的是包含键值的元组。
若需要检查字典中是否存在键或值,用in和not in。
get()方法:get(键,备用值)。若字典中不存在该键,则返回备用值。
setdefault()方法:为字典中某一键设置默认值,当该键没有任何值时使用。
5.2 漂亮打印
import pprint
pprint.pprint()
若想得到漂亮打印的文本,而不是显示在屏幕上,可用pprint.pformat()。
6. 字符串操作
6.1 处理字符串
如何在字符串中输入单引号、制表符或换行?
a)用双引号开始和结束;
b)使用转移字符'\'
c)原始字符串'r':在字符串前加r
d)用三重引号的多行字符串
字符串和列表一样,都可以使用下标和切片。
和列表一样,字符串可以使用in和not in操作符。
6.2 有用的字符串方法
6.2.1 字符串方法upper()、lower()、isupper()、islower()
upper()、lower()方法返回一个新的字符串,原字符串中所有字母都相应转换成大写或小写,非字母字符保持不变。请注意,此方法并没有改变原有字符串,而是返回一个新的字符串。
6.2.2 isX字符串方法:用来验证用户输入
isalpha():返回True,表示只包含字母,且非空;
isalnum():返回True,表示只包含字母和数字,且非空;
isdecimal():返回True,表示只包含数字字符,且非空;
isspace():返回True,表示只包含空格、制表符和换行,且非空;
istitle():返回True,表示字符串仅包含以大写字母开头,口面都是小写字母的单词。
6.2.3 字符串方法startswith()和endswith()
startswith()和endswith()方法返回True,若所调用的字符串以该方法传入的字符串开始或结束。
6.2.4 字符串方法join()和split()
join()方法在一个字符串上调用,参数是一个字符串列表,返回一个字符串,返回的字符串由输入的列表中每个字符串连接而成。
' '.join(['My','name','is','xxlee'])
'调用方法的字符串'.方法(参数列表)
输出:
'My name is xxlee'
split()方法针对一个字符串调用,返回一个字符串列表。
6.2.5 用rjust()、ljust()和center()方法对齐文本
rjust()、ljust()字符串方法返回调用它们的字符串的填充版本,通过插入空格来对齐文本。第一个参数是一个整数长度,第二个参数是填充字符。
center()字符串方法类似,让文本居中。
'hello'.rjust(20,'#')
输出:
'###############hello'
例:
def printPicnic(item,left,right):
print('PICNIC ITEMS'.center(left + right,'-'))
for k,v in item.items():
print(k.ljust(left,'.')+str(v).rjust(right))
a = {'s':3,'b':4333}
printPicnic(a,12,4)
输出:
--PICNIC ITEMS--
s........... 3
b...........4333
6.2.6 用strip()、rstrip()和lstrip()删除空白字符
strip()字符串方法将返回一个新的字符串,它开头或末尾都没有空白字符。lstrip()和rstrip()方法将相应删除左边或右边的空白字符。
也可向strip()、rstrip()和lstrip()传入可选的字符串参数,可删除相应的字符,传入的字符顺序并不重要。
6.2.7 用pyperclip模块拷贝粘贴字符串
pyperclip模块中有copy()和paste()函数,可以向计算机的剪贴板发送文本,或接收文本。
6.3 项目:口令保管箱
略
基础部分结束