1、Python变量
1.1变量命名规则:
1)变量名的长度不受限制,但其中的字符必须是字母、数字、或者下划线,而不能使用空格、标点符号等其他字符
2)变量名的第一个字符不能是数字,而必须是字母或下划线
3)Python区分大小写
4)不能将Python关键字用作变量名
5)变量必须先定义再复制,如 i=1
【例1.1-1】定义变量
# Python中定义一个变量的方式
x=10
# 连续声明多个变量
a=b=c=1
# Python虽然是弱类型的语言,变量的类型由其值的类型决定,不用为变量声名类型
# 但是在Python中不能没有定义就使用如果x+=1、x[1]等等都是不行的,
# 局部变量也一样,哪怕外面存在同名的变量
2、帮助
【例2-1】查看print函数的使用方法
help(print) # 查看print函数的使用方法
返回结果:
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) ==>print函数在删除后默认换行
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments: ==>可选关键字参数
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
3、输入输出函数
【例3-1】print函数
# 输出字符
print("-"*15) # 分隔用便于观看
print("红楼梦")
# 输出变量
print("-"*15)
i=1
print(i)
# 格式化输出
print("-"*15)
print("%s爱北京%s"%("我","天安门"))
print("{0}爱北京{1}".format("我","天安门"))
# 同时输出多个
print("-"*15)
print("红","楼","梦") # 加逗号会有空格
print("红"+"楼"+"梦") # +不会有空格,只能字符连字符或数字连数字
# 不换行输出
print("-"*15)
print("北",end="") # 修改默认参数end(默认为/n)
print("京")
# 输出重定向
print("-"*15)
with open("cdx.txt","w",encoding="utf-8") as f: # 创建一个文件
print("输出重定向",file=f) # 将"输出重定向"写入到该文件
# 输出显示颜色
print("-"*15)
print("\033[1;31;47m红楼梦\033[0m")
print("\033[1;31m红楼梦\033[0m")
返回结果 :
【例3-2】input函数
# 输入
i=input("请输入:") # 提示并输入,input获取的输入为字符类,那怕输入的是数字
print(type(i)) # type函数获取变量类型,
# 转化为数字
j=input("请输入数字:")
print(type(float(j))) # 将字符型数字强制转化为数字
# 控制输入
def contorlInputin(hint="请输入正整数:"):
while True:
i=input(hint)
try:
if int(i) in range(99**99):
return int(i)
else:
print("请重新输入!")
except:
print("请重新输入!")
contorlInputin()
返回结果 :
请输入:2
<class 'str'>
请输入数字:3
<class 'float'>
请输入正整数:3.4
请重新输入!
请输入正整数:4
4、Python数据类型
【六个标准的数据类型】
Number(数字) 包括 int(%d)、float(%f)、bool、complex(复数),不可变数据
String(字符串) 字符串用单引号 ' 或双引号 " 括起来,同时使用反斜杠 \ 转义特殊字符,不可变数据
List(列表) 列表可以完成大多数集合类的数据结构实现,可变数据
Tuple(元组) 元组与列表类似,不同之处在于元组的元素不能修改,元组写在小括号 () 里,不可变数据
Set(集合) 集合基本功能是进行成员关系测试和删除重复元素,可以使用大括号 { } 或者 set() 函数创建集合,创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典,不可变数据。
Dictionary(字典) 字典是一种映射类型,字典用"{ }"标识,它是一个无序的键(key) : 值(value)对集合,键(key)必须使用不可变类型,在同一个字典中,键(key)必须是唯一的,可变数据。
5、Python运算符
【例5-1】运算符
# 算术运算符
# + - * / % // ** ==> 加、减、乘、除、取余、取商、次幂
print("-"*8)
print(13%5)
print(13//5)
print(2**3)
# 逻辑运算符
# == 是否相等 != 不等于 < 小于 > 大于 <= 小于等于 >=大于等于
print("-"*8)
print(5==4)
print(5>4)
# 赋值运算符
# =赋值 +=加法赋值 -=减法赋值 *=乘法赋值 **=幂赋值 /=除法赋值 %=取余赋值 //=取商赋值
print("-"*8)
i=1
i+=2
print(i)
i**=2
print(i)
# 逻辑运算符
# and "与" 全真才为真 or "或" 全假才为假 not "非"
print("-"*8)
print(4>3 and 3>5)
print(4>3 or 3>5)
print(not 4>3)
# 成员运算符
# in 在**里面返回真 not in 不在**里面返回真
print("-"*8)
print(1 in [1,2,4])
print(1 not in [1,2,4])
# 身份运算符
print("-"*8)
print(type(2) is int)
print(type("字符型") is str)
返回结果:
--------
3
2
8
--------
False
True
--------
3
9
--------
True
False
--------
True
True
【例5-2】三元运算符
# 三元运算符
x=2
print(x if x>3 else 3) # 如果x大于3返回x否则返回3
print(x if x<3 else 3) # 如果x小于3返回x否则返回3
print(x<3 and x or 9) # 如果x小于3返回x否则返回3
print(x>3 and x or 9) # 如果x大于3返回x否则返回3
返回结果:
3
2
2
3
【Python运算符优先级】
运算符 | 描述 |
---|---|
** | 指数 (最高优先级) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法减法 |
<> == != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
and or not | 逻辑运算符 |
6、Python字符串
【例6-1】Python格式化字符
%s 字符串
%d 有符号整数(十进制)
%o 无符号整数(八进制)
%x 无符号整数(十六进制)
%e 浮点数字(科学计数法)
%f 浮点数字(用小数点符号)
#!/usr/bin/python 是告诉操作系统执行这个脚本的时候,调用 /usr/bin 下的 python 解释器;
#!/usr/bin/env python 这种用法是为了操作系统防止用户没有将python 装在默认的 /usr/bin 路径里。当系统看到这一行的时候,首先会到env设置里查找 python 的安装路径,再调用对应路径下的解释器程序完成操作。
#!/usr/bin/python 相当于写死了 python 路径;
#!/usr/bin/env python 会去环境设置寻找python目录,推荐这种写法
# Python是一种动态类型的语言,但是变量是无类型的
print("Hello World") # 仪式感还是要有的
year=2018
month=8
day=31
print("%d年%d月%d日"%(year,month,day)) # 格式化输出
print("计算结果:{0:0.2f}".format(100/11)) # 格式化输出
返回结果:
Hello World
2018年8月31日
计算结果:9.09
【例6-2】字符串索引、切片
# 字符串放在单引号、双引号、三引号之间,
s="A good plan today is better than a perfect plan tomorrow"
# 切片
print(s[0]) # 索引,字符串索引从0开始到-1结束
print(s[-1]) # 索引
print(s[0:6]) # 正着切
print(s[-3:]) # 反着切
print(s[-6::2]) # 隔着切,没两个切一个
返回结果:
A
w
A good
row
mro
【例6-3】常用字符串处理函数
print("字符基本操作".center(86,"*")) # 以指定字符和字符宽度两边对称填充
print("*"*8) # 打印了指定个数的字符串
print("a"+"b") # 字符串中 + 的作用连接字符
print(len("abcd")) # 获取字符长度
print("ababc".count("a",0,len("ababc"))) # 查找字符串中指定字符的数量,len(ababc)省略默认也为len(ababc)
s="a Good Plan Today Is Better Than a perfect plan tmorrow"
print("大小写转换".center(86,"*")) # 以指定字符和字符宽度两边对称填充
print(s.lower()) # 大写变小写
print(s.upper()) # 小写变大写
print(s.title()) # 单词首字母大写
print(s.capitalize()) # 单词首字母大写
print(s.swapcase()) # 大写变小写小写变大写
# casefold() 方法是Python3.3版本之后引入的,其效果和 lower() 方法非常相似,都可以转换字符串中所有大写字符为小写。
# lower() 方法只对ASCII编码(即‘A-Z’有效),对其他语言(非汉语或英文)中大写转换为小写的情况只能用 casefold() 方法。
print("ß".casefold()) # 德语B
print("字符查找修改".center(84,"*")) # 以指定字符和字符宽度两边对称填充
print(s.strip("tmorrow")) # 只会去掉两端的指定字符串
print(s.replace("T","t",1)) # 替换指定个数,默认全部替换
print(s.split(" ")) # 字符串切割,切边是会产生空字符串
print(s.startswith("A")) # 判断是否以A开始
print(s.endswith("tmorrow")) # 判断是否以tmorrow结尾
print(s.index("Good")) # 查找指定字符的索引,不存在会报错
print("字符串判断".center(84,"*")) # 以指定字符和字符宽度两边对称填充
print("1234q".isalnum()) # 判断是否是数字或者字母组成,不包含小数点
print("qwe".isalpha()) # 判断是否是字母组成
print("123".isdigit()) # 判断是否是数字组成,不包含小数点和负数
print("一1壹千".isnumeric()) # 判断是否是数字(包含中文数字)组成,不包含小数点
返回结果:
****************************************字符基本操作****************************************
********
ab
4
2
****************************************大小写转换*****************************************
a good plan today is better than a perfect plan tmorrow
A GOOD PLAN TODAY IS BETTER THAN A PERFECT PLAN TMORROW
A Good Plan Today Is Better Than A Perfect Plan Tmorrow
A good plan today is better than a perfect plan tmorrow
A gOOD pLAN tODAY iS bETTER tHAN A PERFECT PLAN TMORROW
ss
***************************************字符查找修改***************************************
a Good Plan Today Is Better Than a perfect plan
a Good Plan today Is Better Than a perfect plan tmorrow
['a', 'Good', 'Plan', 'Today', 'Is', 'Better', 'Than', 'a', 'perfect', 'plan', 'tmorrow']
False
True
2
***************************************字符串判断****************************************
True
True
True
True
True
【例6-4】查找
hlm="""《红楼梦》又名《石头记》、《金玉缘》,以贾、王、史、薛四大家族背景,
以贾宝玉和林黛玉的爱情故事为主线,围绕两个主要人物的感情纠葛,描写了大观园内外一系列青年男女的爱情故事。
同时,通过对这些爱情悲剧产生的社会环境描绘,牵涉到封建社会政治法律、宗法、妇女、道德、婚姻等方面的问题,
昭示了封建社会末期的世态,暴露了封建贵族阶级及其统治的腐朽与罪恶,
歌颂了追求光明的叛逆人物,通过叛逆者的悲剧命运宣告了这一社会必然走向灭亡。
可以说,《红楼梦》是一部我国封建社会后期社会生活的百科全书。
"""
def findAll(string,findStr,start=None,end=None):
indexs=[]
if start==None:
start=0
if end==None:
end=len(string)
if str(int(start)).isdigit()==False or start>=end: # 规范输入
return None
elif end>len(string)-1:
end=len(string)-1
index = int(start)
while True: # 循环查找
index=string.find(findStr,index,int(end))
if index!=-1:
indexs.append(index)
index+=1
else:
break
return indexs # 返回查找列表
print(findAll(hlm,"封建"))
返回结果:[113, 144, 157, 227]
】1.2 条件语句
age=12
if age>60: # 判断条件
print("老了")
elif age>18:
print("年轻人")
elif age>0:
print("少年") # 如果一行过长可以使用\换行,并且下一行不适用于缩进规则
else:
pass # pass 什么都不执行,但是不能省略
日历练习:
# 判断闰年
# 普通年:能被4整除但不能被100整除的年份为普通闰年
# 世纪年:能被400整除的为世纪闰年
def isLeapYear(year):
if (year%4==0 and year%100!=0) or year%400==0:
return True
else:
return False
# 天数
def days(year,month):
if month in [1,3,5,7,8,10,12]:
return 31
elif month in [4,6,9,11]:
return 30
elif isLeapYear(year) and month==2:
return 29
elif isLeapYear(year)==False and month==2:
return 28
# 距离1900天数,1990年1月1日为星期一
def daysTo1990(year,month,day=0):
sum=0
for i in range(1900,year):
if isLeapYear(i):
sum+=366
else:
sum+=365
for j in range(1,month):
sum+=days(year,j)
return sum+day
# 输出日历
def calendar(year,month):
print("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六")
week=daysTo1990(year,month,day=1)%7
for i in range(week):
print("\t",end="\t")
for i in range(days(year,month)):
if daysTo1990(year,month,day=i)%7==6 and i!=0:
print("\n")
print(i+1,end="\t\t")
# 控制输入年份
while True:
year = input("请输入大于等于1990的整数:")
if year.isdigit() and int(year)>=1900:
year=int(year)
break
# 控制输入月份
while True:
month = input("请输入1~12之间的整数:")
if month.isdigit() and int(month)>=1 and int(month)<=12:
month=int(month)
break
calendar(year,month)
返回结果: