(二)Python流程控制
2.1if条件分支语句
Python条件语句就是通过一条或者多条语句执行结果(True or Flase)来决定执行代码块。
- if单分支语句
if 逻辑语句:
语句(块)
demo:
learning = "Python"
if learning == "Python":
print("好巧啊")
- if双分支语句
if 逻辑语句1:
语句(块)1
else:
语句(块)2
demo:
learning = input("请输入你学习的编程语言")
if learning == "Python":
print("好巧啊")
else:
print("原来你在学习java")
- if多分支语句
C语言中
if
if
if
else
else
else
Python中,elif:else if缩写成elif
if 逻辑语句1:
语句(块)1
elif 逻辑语句2:
语句(块2)
...
elif 逻辑语句 n-1:
语句(块)n-1
else:
语句(块)n
根据百分制考试成绩返回五级分制成绩:
score =int(input("考试成绩"))
if score>=90 :
print("A")
elif score>=80:
print("B")
elif score>=70:
print("C")
elif score>=60:
print("D")
elif score>=0:
print("E")
从控制台输入一个三位数,判断其是否为水仙花数
153 = 1 3 + 5 3 + 3 3 1^3+5^3+3^3 13+53+33
A = int(input("输入一个三位数"))
a = A // 100
b = (A-a*100)//10
c = A-b*10-a*100
e = a**3+b**3+c**3
if A == e:
print("是水仙花数")
else:
print("不是水仙花数")
2.2while语句
- 循环语句
- 所谓循环,就是用来执行部分代码在一定条件下重复执行的代码。
格式:
while:
语句(块)
(1)利用while来打印1-100的数字:
i = 0
while True:
i+=1
print(i)
if i ==100:
break
(2)利用while来求1-100的和
count = 0
sum = 0
while count<=100:
sum += count
count += 1
print(sum)
(3)利用while求1-100内所有的偶数和。
count = 1
sum = 0
while count<=100:
count+=1
if count%2 == 0:
sum+=count
print(sum)
(4)求100-999内所有水仙花数
count = 99
while count<999:
count+=1
a = count // 100
b = count % 100 //10
c = count % 10
e = a ** 3 + b ** 3 + c ** 3
if count == e:
print(count)
2.3for循环
Python中for,可以用来遍历任何序列(字符串,列表,元祖,etc)
格式:
for i in 序列:
语句(块)
1.range()
range(end) #[0,end-1],end为整数
range(start, end)#[start,end-1],两数均为整数
range(start,end,step)#[start,start+step,start+2*step,...,end]
2.4break 和 continue
- break用来结束一个循环,跳出循环体。
- continue终止本次循环的动作,直接进入下次循环
2.5while…else…
count = int(input("Enter a INT:"))
while count <= 5:
print(count,end=" ")
count += 1
if count ==3:
break
else:
print("这里是else语句")
2.6for…else…
while…else…,for…else…中while和else是一块的,for和else也是一块的。
当有break或者return的时候就会跳出while。如果没有break或者return,不管while是否执行,都会执行else语句
2.7字符串
(1)什么是字符串
- 用引号引起来的一串字符
- 用引号来创建字符串
- 单引号
- 双引号
- 三单引号
- 三双引号
注意:
- 单引号和双引号使用时需要注意匹配关系,且不可以换行
- 如果需要换行,需使用三单引号或者三双引号
(2)字符串的运算及常见操作
a:拼接
demo:
a = ["hello"]
b = [",Python"]
print(a+b) #拼接基于同一种数据类型
b:重复
demo:
a = "6"
print(a * 3)
c:索引(偏移)
- 切片 [start : end:step ] start,start+step,start+step*2+…end-1
demo:
sr = "Python"
for i in range(len(sr)):
print(sr[i],end=" ")
sr = "Python"
for i in range(len(sr)):
print(sr[:i],end=" ")
d:大小写转换
sr = “Life is short,you need python”
- sr.lower():转小写
- sr.upper():转大写
- sr.swapcase():大小写互换
- sr.title():转为标题形式
- sr.capitalize():首字母大写
demo:
certid = "AbCd"
ipt = input("请输入验证码:")
if ipt.lower() == certid.lower():
print("输入成功")
else:
print('对不起,输入有误,请重试')
e:字符串的格式输出对齐
sr = “Life is short,you need python”
- sr.center([len],[填充符号]),居中对齐
- sr.ljust([len],[填充符号]),居左对齐
- sr.rjust([len],[填充符号]),居右对齐
- sr.zfill([len]),居右对齐,默认填充0
demo:
sr = "Life is short,you need python"
print(sr.center(41,"*"))
print(sr.ljust(41,"#"))
print(sr.rjust(41,"#"))
print(sr.zfill(41))
d:删除指定字符
- sr.strip()
- sr.lstrip()
- sr.rstrip()
demo
sr = "\n\t******Life is short,you need python******\n\t" #\n换行\t 一个tap键
print(sr.strip()) # 默认删除\n\t
print(sr.strip("*")) #从头开始匹配,匹配不成功则无效
e:计数
- sr.count()
demo:
sr = "\n\t******Life is short,you need python******\n\t"
print(sr.count("o",20,41))
f:字符串搜索定位和替换
-
sr.find( ),查找元素并返回第一次出现的元素的索引值 ,查找不到返回-1
-
sr.index( ),查找元素并返回第一次出现的元素的索引值,查找不到元素会报错
-
sr.rindex( ),从右往左查找元素并返回第一次出现的元素的索引值
-
sr.replace( [现有],[替新]),
demo:
sr = "\n\t******Life is short,you need python******\n\t" print(sr.find("z",12,41)) print(sr.index("e",19,41)) print(sr.replace("you need","I use")) print(sr.replace("t","T",1))
g:字符串条件判断
-
sr.isalnum(),判断的字符串有字母或者数字组成
-
sr.isalpha(),仅有字母
-
sr.isdigit(),仅有数字
demo:
a = "wangzixin666eeee" b ="666" print(a.isalnum()) print(b.isalpha()) print(b.isdigit())
h:制表符的转化
- sr.expandtabs()
i:字符串的分割
- join( ),将指定字符插入到元素之间
- sr.split( ),以指定字符分割字符串并去除该字符
- partition( ),以指定字符分割并保留该字符
demo:
sr = "Life is short,you need python"
print("+".join(sr))
li = ["I","Love","you"]
print(" ".join(li))
print(sr.split("o",2)) #分割返回的都是列表
print(sr.partition("o")) #第一个就停止切割了
j:ASCII值和字符的转化
- chr( )digit—>alpha 数字转化为字母
- ord( )alpha —>digit 字母转化为数字
demo:
for i in range(ord("a"),ord("z")+1):
print(chr(i),end=" ")
k:格式化字符串
%格式化
print("%d" % 6688)
name = "Tom"
age = 18
print("His name is %s,his age is %d."%(name,age))
print("His name is",name,",his age is ",age,".")
占位符
格式 | 描述 |
---|---|
%d | 有符号的整数 |
%s | 字符串 |
%c | 字符及ASCII |
%o | 无符号八进制整数 |
%x/%X | 无符号十六进制整数 |
%e/%E | 浮点数,科学计数法 |
%f | 浮点数 |
%格式化字符串 用%匹配参数,注意个数一一对应。
"%d%%" % 100
format格式化
-
位置映射
print("Name:{},age:{}".format("Tom",18))
-
关键字映射
print("Name:{},age:{},{address}".format("Tom",18,address ="gongshu,hangzhou"))#关键字必须放最后
- 元素访问
print("第一个元素是:{0[0]},第二个元素是:{0[1]},第三个元素是:{0[2]};第四个元素是:{1[0]},"\
"第五个元素是:{1[1]}".format(("www","google","com"),("baidu.","com")))
string模块
import string
print(dir(string))
print(string.ascii_letters) #abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 字母大小写
print(string.ascii_lowercase) #abcdefghijklmnopqrstuvwxyz 小写字母
print(string.ascii_uppercase) #ABCDEFGHIJKLMNOPQRSTUVWXYZ 大写字母
print(string.capwords("abcdefg")) #Abcdefg 首字母大写
print(string.digits) #0123456789 0-9数字
print(string.hexdigits) #0123456789abcdefABCDEF 打印16进制的数字和字母
print(string.octdigits) #1234567 打印8进制的数字
print(string.printable) #打印所有ASCII
print(string.punctuation) #!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~打印所有特殊符号
print(string.whitespace) #打印空白符
print("%o" % 17) #十进制转8进制
print("%x" % 17) #十进制转16进制
2.8print函数
(1)print()函数查看内部文件
>>> help(print)
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
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.
语法格式:
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
等价于:
print(value1,value2,value3 ..., sep=' ', end='\n', file=sys.stdout, flush=False)
课后作业:
-
设计"过7游戏"的程序,打印出1-100之间除了含7和7的倍数之外的所有数字
for i in range(1,101): if i%10==7 or i//10==7 or i%7==0: continue else: print(i)
-
编写程序用户登录程序仅有三次机会。(if和for)
import getpass for i in range(3): number= input("账号") password = getpass.getpass("密码") #不显示明文 if number== "wangzixin" and password == "123456": print("登录成功") break else: print("账号或密码有误")
-
编写程序实现,判断一串字符串是否为有效变量名
import string alpha = string.ascii_letters+"_" nums = string.digits myinput = input("输入字符串") if len(myinput)>1: if myinput[0] not in alpha: print("无效变量名称") else: for otherChar in myinput[1:]: if otherChar not in alpha + nums: print("存在非字母下划线数字字符,无效变量名称") break else: print("有效变量名") else: print("请重新输入一遍")
-
最多猜10次数字的游戏,猜测范围1~100,根据input内容提示猜大或者猜小,如果猜中,结束循环
import random
num = int(input("猜数字"))
realnum = random.randint(1,100)
for i in range(10):
if num == realnum:
print("你猜对了")
break
elif num>realnum:
print("大了")
num = int(input("猜数字"))
elif num<realnum:
print("小了")
num = int(input("猜数字"))
-
用while循环实现输出2-3+4-5+6…+100的和。
i=1 sum=0 while i<=99: i+=1 if i%2==0: sum+=i else: sum=sum-i print(sum)
-
使用循环实现九九乘法口诀表。
for i in range(0, 10): for j in range(1, 10): if i >= j: print("%d * %d = %d" % (j, i, i * j,), end=" ") print( )
-
已知列表li=[22478,24066,23398,38498],利用字符串拼接及遍历,输出结果“城市学院”。
li=[22478,24066,23398,38498] x=str() for i in range(len(li)): x=x+chr(li[i]) print(x)