python基础 if for while zip推导式创建

控制语句

if

在这里插入图片描述

  1. 条件表达式:逻辑表达式,关系表达式,算术表达式等
    条件表达式除了下列情况,全都是True:
    Flase,0,0.0,空值None,空序列对象(空列表,空元组,空字符串),空range,空迭代对象
  2. 语句块: 缩进对齐

Example

a = input("请输入一个数字")
if int(a)<10:
    print(a,"比10小")
else:
    print(a,"比10大")
####运行结果####
请输入一个数字20
2010

条件语句的应用和判断

if 3:
    print("I'm true")

if []:
    print()
else:
    print("I'm false")

if "":
    print()
else:
    print("Oh,I'm also false")
####运行结果####
I'm true
I'm false
Oh,I'm also false

条件表达式中不能有赋值等式

错误示范

a = input("输入")
if a = 3 and a < 4:
    print("I'm three")
###运行结果###
    if a = 3:
         ^
SyntaxError: invalid syntax

正确示范
因为输入的值不知道是什么类型的,所以判断语句涉及数字的时候一定要转化一下!int(a)

a = input("输入")
if int(a) == 3:
    print("I'm three")
else:
    print("I'm not three")

三元条件运算符

python 提供了三元运算符,用来在某些简单双分支赋值情况,三元条件运算符语法格式如下:
条件为真时的值 if (条件表达式) else 条件为假时的值

a = input("input")
print(a if int(a) < 10 else "数字太大")

多分支选择结构

Example

a = input("input score:")
grade = ""
if int(a)<60:
    grade = "not pass the test"
elif int(a)>= 60 and int(a)<90:
    grade = "pass the test"
else:
    grade = "Excellent"

#简单写法
print("学生等级是{0}".format(grade))
###运行结果###
input score:80
学生等级是pass the test

选择结构嵌套

a = input("input score:")
grade = ""
if int(a)<90:
    if int(a)>80:
        grade = "B"
    else:
        if int(a)>70:
            grade = "C"
        else:
            if int(a)>60:
                grade = "D"
            else:
                grade = "E"
else:
    grade = "A"
print("score:{0},grade:{1}".format(a,grade))
### 运行结果 ###
input score:85
score:85,grade:B

循环结构

while

满足条件-循环-再次判断-再次循环-知道不满足条件,退出循环
在这里插入图片描述
Example:利用while循环打印0-10的数字

a = 0;
while a<=10:
    print(a,end="")
    a += 1
###运行结果###
012345678910

计算1-100的累加值

a = 0
b = 0
while a<=100:
    b = b + a
    a += 1
print(b)
###运行结果###
5050

continue

continue用于结束本次循环,继续下一次,当存在嵌套循环的时候,应用于最近一层循环。
题目:要求输入员工的薪资,若薪资小于0则重新输入。最后打印出录入员工的数量和薪资明细,以及平均薪资

empNum = 0
salary_id = []
salarysum=0
while True:

    name = input('please input your name:')
    if name.upper() == 'Q':
        print("录入完成,退出")
        break
    salary = input('please input salary:')
    if float(salary) < 0:
        salary = input('wrong!please input again:')
    empNum += 1
    salarysum += float(salary)
    salary_id.append((name, float(salary)))

print(salary_id)
print(empNum)
print(salarysum/empNum)

####运行结果####
please input your name:r
please input salary:34
please input your name:y
please input salary:78
please input your name:r
please input salary:34
please input your name:u
please input salary:-56
wrong!please input again:56
please input your name:q
录入完成,退出
[('r', 34.0), ('y', 78.0), ('r', 34.0), ('u', 56.0)]
4
50.5

方法二

empNum = 0
salarySum = 0
salarys = []
while True:
    s = input("please input your salary")
    if s.upper() == 'Q':
        print('to sustain')
        break
    if float(s) < 0:
        continue
    empNum += 1
    salarys.append(float(s))
    salarySum += float(s)
print("员工数为:{0}".format(empNum))

else语句

while 条件表达式:
循环体
else:
语块句
else表示跳出循环的运行

for 循环

复习一下字典的取值:

a = {"name":"Di","age":18}
for z in a.keys():
    print(z)
for x in a.values():
    print(x)
for y in a.items():
    print(y)

###运行结果###
name
age
Di
18
('name', 'Di')
('age', 18)

题目:计算0-100累计和,0-100奇数和,0-100偶数和

b = 0
c = 0
d = 0
for i in range(101):
    b = b + i
    if i % 2 == 0:
        c = c + i
    else:
        d = d + i
print('累计和为{0},偶数和为{1},奇数和为{2}'.format(b, c, d))

####运行结果####
累计和为5050,偶数和为2550,奇数和为2500

嵌套循环

题目1打印如下图案
在这里插入图片描述

# 方法1:不用嵌套循环
for i in range(5):
    print(" ".join(str(i) * 5))
# 方法2:嵌套循环
for j in range(5):
    for k in range(5):
        print(j, end="\t")
    print()#起到换行的作用

###运行结果###
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
0	0	0	0	0	
1	1	1	1	1	
2	2	2	2	2	
3	3	3	3	3	
4	4	4	4	4	

题目2:打印九九乘法表
在这里插入图片描述

for i in range(10):
    for j in range(i + 1):
        if i and j:
            print(str(i), '*', str(j), '=', i * j, end='\t')
    print()
    
for a in range(1, 10):
    for b in range(1, a + 1):
        print(str(a), '*', str(b), '=', a * b, end='\t')
    print()
###运行结果###
1 * 1 = 1	
2 * 1 = 2	2 * 2 = 4	
3 * 1 = 3	3 * 2 = 6	3 * 3 = 9	
4 * 1 = 4	4 * 2 = 8	4 * 3 = 12	4 * 4 = 16	
5 * 1 = 5	5 * 2 = 10	5 * 3 = 15	5 * 4 = 20	5 * 5 = 25	
6 * 1 = 6	6 * 2 = 12	6 * 3 = 18	6 * 4 = 24	6 * 5 = 30	6 * 6 = 36	
7 * 1 = 7	7 * 2 = 14	7 * 3 = 21	7 * 4 = 28	7 * 5 = 35	7 * 6 = 42	7 * 7 = 49	
8 * 1 = 8	8 * 2 = 16	8 * 3 = 24	8 * 4 = 32	8 * 5 = 40	8 * 6 = 48	8 * 7 = 56	8 * 8 = 64	
9 * 1 = 9	9 * 2 = 18	9 * 3 = 27	9 * 4 = 36	9 * 5 = 45	9 * 6 = 54	9 * 7 = 63	9 * 8 = 72	9 * 9 = 81	

题目三:打出字典那一节,大于15000的工资

a = dict(姓名="高小一",年龄= 18 ,薪资= 30000,城市="北京")
b = dict(姓名="高小二",年龄= 19 ,薪资= 20000,城市="上海")
c = dict(姓名="高小三",年龄= 20 ,薪资= 10000,城市="深圳")
tb = [a,b,c]
for x in tb:
    if x.get("薪资")>15000:
        print(x.get('薪资'))

break 语句

break 语句可用于while和for 循环,用于结束整个循环。当有嵌套循环时,break语句只能跳出最近一层的循环。

找到名字叫q的人就跳出,不输入名字,联想:可以用来寻找错误,找到错误就跳出循环。

while True:
    a = input('input')
    if a.upper()=='Q':
        print('break')
        break
    else:
        print(a)

###运行结果###
input d
d
input QW
QW
input Q
break

循环代码的优化

满足下列条件,可以大大提高运行效率:

  1. 尽量减少循环内部不必要的计算
  2. 嵌套循环中,尽量减少内存循环的计算,尽量往外提
  3. 局部变量查询较快,尽量使用局部变量

第二个方法的验证,看看是不是会快一点

import time
start = time.time()
for i in range(1000):
    result = []
    for m in range(10000):
        result.append(i*1000+m*100)
end = time.time()
print('耗时:{0}'.format((end-start)))
start1 = time.time()
for i in range(1000):
    result = []
    c = i*1000
    for m in range(10000):
        result.append(c+m*100)
end1 = time.time()
print('耗时1:{0}'.format((end1-start1)))

####运行结果####
耗时:2.1927413940429688
耗时11.7140562534332275

其他优化手段:

  1. 连接多个字符串,使用join而不使用*
  2. 列表进行元素插入和删除,尽量在列表尾部操作

使用zip()进行迭代

  1. 使用zip()创建字典:
k = ['name','age','job']
g = ['Di','18','student']
d = dict(zip(k,g))
###运行结果###
{'name': 'Di', 'age': '18', 'job': 'student'}

zip函数这种创建方法,只适用于一个表头,一个对象的这种,一个表头多个对象是不能适用的!

a = ['姓名','年龄','薪资','城市']
b = ['高小一',18,'30000','北京']
c = ['高小二',19,'20000','上海']
d = ['高小三',20,'10000','深圳']
e = dict(zip(a,b,c,d))
print(e)
###运行结果###
ValueError: dictionary update sequence element #0 has length 4; 2 is required

但是可以这样创建

#使用zip()进行迭代
names = ('高老一','高老二','高老三','高老四')
ages = (18,19,20,21)
jobs = ('老师','医生','投行人士','营业部部员')
#使用zip
for name,age,job in zip(names,ages,jobs):
    print('{0}-{1}-{2}'.format(name,age,job))
#不使用zip的样子
for i in range(4):
    print('{0}-{1}-{2}'.format(names[i], ages[i], jobs[i]))
####运行结果####
高老一-18-老师
高老二-19-医生
高老三-20-投行人士
高老四-21-营业部部员
高老一-18-老师
高老二-19-医生
高老三-20-投行人士
高老四-21-营业部部员

推导式创建序列

推导式是从一个或者多个迭代器快速创建序列的一种方法,它可以将循环和条件判断结合,从而避免冗长的代码,推导式是典型的Python风格。

列表推导式

语法:[表达式 for item in 可迭代对象] 或者
[表达式 for item in 可迭代对象 if 条件判断]

print([ x for x in range(1,9) if x%2 == 0])
print([x**2 for x in range(10)])
print([a for a in 'adfweve'])

###运行结果###
[2, 4, 6, 8]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
['a', 'd', 'f', 'w', 'e', 'v', 'e']

两个循环

cells = [[row,col] for row in range(10) for col in range(10) if row % 5==0 and col %4 == 0]
for cell in cells:
    print(cell,end='')
### 运行结果 ###
[0, 0][0, 4][0, 8][5, 0][5, 4][5, 8]

字典推导式

格式如下:
{key_expression : value_expression for 表达式 in 可迭代对象}

#字典推导式
#统计一串字符串里面非空字母出现次数
my_text = 'i decide to company with you because i love you'
char_count = {c:my_text.count(c) for c in my_text if c is not ' '}
print(char_count)
###运行结果###
{'i': 4, 'd': 2, 'e': 5, 'c': 3, 't': 2, 'o': 5, 'm': 1, 'p': 1, 'a': 2, 'n': 1, 'y': 3, 'w': 1, 'h': 1, 'u': 3, 'b': 1, 's': 1, 'l': 1, 'v': 1}

如果不用上面那种方法做:

keys = set()
values = []
for a in my_text:
    if a is not " ":
        keys.add(a)
print(keys)
for b in keys:
    values.append(my_text.count(b))
print(values)
char_count1 = dict(zip(list(keys),values))
print(char_count1)

运行结果与上面一致:注意点,不能将用set(values), 因为在用zip以前,values 和keys里面的元素一致,如果set了之后,values的元素会有所减少。

集合推导式

{表达式 for item in 可迭代对象}
或者
{表达式 for item in 可迭代对象 if 条件判断}

元组推导式(生成元组)

a = (x for x in range(10) if x % 2 == 0)
print(a)
print(a.__next__())
print(a.__next__())
print(tuple(a))
####运行结果####
<generator object <genexpr> at 0x0000021AE768FD58>
0
2
(4, 6, 8)
a = (x for x in range(10) if x % 2 == 0)
for x in a:
    print(x,end=',')
    
print(tuple(a))

####运行结果####
0,2,4,6,8,()

综和练习:绘制棋靶和棋盘

import turtle

t = turtle.Pen()
my_color = ('red', 'black', 'green', 'yellow')
for i in range(0, 101, 10):
    t.color(my_color[int((i/10) % 4)])
    t.circle(i)
    t.penup()
    t.goto(0, -i)
    t.pendown()
turtle.done()

###运行结果###

在这里插入图片描述

t = turtle.Pen()
t.goto(0, 0)
t.goto(300, 0)
for i in range(15):
    t.penup()
    t.goto(0, -(i + 1) * 20)
    t.pendown()
    t.goto(300, -(i + 1) * 20)

t.penup()
t.goto(0, 0)
t.pendown()
t.goto(0,-300)
for j in range(15):
    t.penup()
    t.goto((j + 1) * 20,0)
    t.pendown()
    t.goto((j + 1) * 20,-300)
turtle.done()

在这里插入图片描述

发布了25 篇原创文章 · 获赞 2 · 访问量 837

猜你喜欢

转载自blog.csdn.net/Di_Panda/article/details/105026676