Python数据分析系列(二):python基础 — 条件语句、循环语句、函数及异常处理


前言

本文主要介绍python选择结构语句—if条件语句、控制结构语句—循环语句的使用、python函数(自定义函数、匿名函数、常用标准库函数)、python异常处理(try-except、raise)。


一、条件语句

1、if 语句

语法:

if expression:
    expr_true_suite

expression (条件表达式):

  • 比较运算符
  • 成员运算符
  • 逻辑运算符

expr_true_suite

  • expression条件为True时执行的代码块
  • 代码块必须缩进(通常为4个空格)

在这里插入图片描述

示例:

a=3
if a==3:
	print("yes!")

2、else 语句

语法:

if expression:
	expr_true_suite
else:
	expr_false_suite

expr_false_suite

  • expression 条件为False时执行的代码块
  • 代码块必须缩进
  • else语句不缩进

在这里插入图片描述
示例:

a=100
if a>100:
	print(a-10)
else:
	print(a+10)

3、elif 语句

语法:

if expression:
	expr_true_suite
elif expression2:
	expr2_true_suite
...
...
elif expressionN:
	exprN_true_suite
else:
	none_of_the_above_suite

expr2_true_suite

  • expression2为True时执行的代码块

exprN_true_suite

  • expressionN为True时执行的代码块

else

  • none_of_the_above_suite是以上所有条件不满足时执行的代码块

示例:

k=input("input the index of shape:")
if k=="1":
	print("circle")
elif k=="2":
	print("oval")
elif k=="3":
	print("rectangle")
elif k=="4":
	print("triangle")
else:
	print("you input the invalid number")

4、条件嵌套

语法:

if expression:
	expr_true_suite
elif expression2:
	expr2_true_suite
	if expression2_1:
		expr2_1_true_suite
	else:
		expr2_1_false_suite
...
...
elif expressionN:
	exprN_true_suite
else:
	none_of_the_above_suite

示例:

k=input("input the index of shape:")
if k=="1":
	print("circle")
elif k=="2":
	print("oval")
elif k=="3":
	sd1=int(input())
	sd2=int(input())
	if sd1==sd2:
		print("the square's area is",sd1*sd2)
	else:
		print("the rectangle area is",sd1*sd2)	
elif k=="4":
	print("triangle")
else:
	print("you input the invalid number")

练习题

题目1:

编写一个输入分数,输出分数等级的程序,具体为:
Score
Grade
90~100 A
70~89 B
60-69 C
0-59 D
othersInvalid score
请添加必要的输入输出语句,尽量让程序友好

score = eval(input("请输入你的分数:"))
if score >= 90 and score <= 100:
	print("你的成绩等级是A")
elif score >= 70 and score < 90:
	print("你的成绩等级是B")
elif score >=60 and score < 70:
	print("你的成绩等级是C")
elif score >=0 and score < 60:
	print("你的成绩等级是D")
else:
	print("othersInvalid score")

题目2:

编写程序,从键盘输入一个一元二次方程ax^2+bx+C=0的三个参数a、b、c(a、b和c均为整数,且a不等于0) ,求此方程的实根。如果方程有实根,则输出实根(保留一位小数),如果没有实根则输出没有实根的信息
[输入样例1]
1,0,-1
[输出样例1]
x1 = 1.0, x2 = -1.0
[输入样例2]
1,2,1
[输出样例2]
x=-1.0
[输入样例3]
2.2.3
[输出样例3]
no real solution

#b^2-4ac>0:有两个不相等的实根
#b^2-4ac=0:有且仅有一个实根
#b^2-4ac<0:没有实根

import math
a,b,c = eval(input("请输入a,b,c值:"))
x = b**2-4*a*c
if x > 0:
	x1 = (-b+math.sqrt(x))/(2*a)
	x2 = (-b-(math.sqrt(x))/(2*a))
	print("x1=",x1,"x2=",x2)
elif x == 0:
	x1 = (-b)/(2*a)
	print("x1=",x1)
else:
	print("no real solution")

题目3:

请分别用if-elif-else结构和嵌套的if结构实现符号函数 (sign function) ,符号函数的定义为:
在这里插入图片描述

#方法一:if-elif-else结构
x = eval(input("请输入一个数字:"))
if x > 0:
	sgn = 1
elif x < 0:
	sgn = -1
else:
	sgn = 0
print('sgn = {:.0f}'.format(sgn))

#方法二:嵌套的if结构
x=eval(input("请输入一个数字:"))
if x != 0:
	if x<0:
		sgn = -1
	else:
		sgn = 1
else:
	sgn = 0
print('sgn = {:.0f}'.format(sgn))
  • eval 作用是将字符串当成有效的表达式来求值并返回计算结果。

二、循环语句

1、for循环

语法:

for iter_var in iterable_object:
	suite_to_repea

iterable_object

  • String
  • List
  • Tuple
  • Dictionary
  • File

可以明确循环次数

  • 遍历一个数据集内的成员
  • 在列表解析中使用
  • 生成器表达式中使用

示例:

for i in range(2,12,2):
	print(i,end=' ')

s="hello"
for i in s:
	print(i,end=' ')

for i in range(len(s)):
	print(s[i],end=' ')

range()函数

常常在与for循环一起使用。

语法:

range(start,end,step=1) :不包括end值
range(start,end) :缺省step值为1
range(end) :缺省start值为0,缺省step值为1

参数:

start:起始值(包含)
end:终值(不包含)
step:步长(不能为0)

返回:

产生一系列整数,返回一个range对象。

示例:

list(range(3,12,2))
list(range(3,12))
list(range(12))

2、while循环

语法:

while expression:
	suite_to_repeat

expression

  • 条件表达式
  • 当expression值为True时执行suite_to_repeat代码块

示例:

sumA=0
j=1
while j<10:
	sumA+=j
	j+=1
sumA

总结: for与while选择

for循环 while循环
循环次数明确
循环次数不明确
把一件事情重复N遍

3、循环中的break/continue和else、pass

【注】:Tab键和空格键不能同时混用

break

break语句:终止当前循环,转而执行循环之后的语句。

  • for 循环与break

语法:

# break语句搭配for循环
for ... in ...:
	...
	if ...:
		break

示例1:

for i in range(5):
	print("轻舟已过万重山")
	if i==3: 
		break #结束循环

本来会循环5次,但循环到第4次时就被break语句打断。

示例2:输出2-100之间的素数。

from math import sqrt
for i in range(2,101):
	flag=1
	k=int(sqrt(i))
	for j in range(2,k+1):
		if i%j == 0:
			flag=0
			break
	if (flag):
		print(i,end=' ')
  • while循环和break

语法:

# break语句搭配while循环
while ...(条件):
	...
	if ...:
		break

示例1:

while True:
	print("轻舟已过万重山")
	t=input("诗句的作者是谁?")
	if t == "李白":
		break
print("李白——《早发白帝城》")

示例2:输出2-100之间的素数。

from math import sqrt
j=2
while j<100:
	i=2
	k=sqrt(j)
	while i <= k:
		if j % i == 0:
			break
		i+=1
	if i>k:
		print(j,end=' ')
	j+=1

continue

continue语句:停止当前循环,重新进入循环!!! 一定要注意,在循环中执行continue语句接下来的语句后面的不会执行。)

  • for循环则判断迭代是否已经结束
  • while循环则判断 循环条件是否满足
  • for循环与continue

语法:

for ... in ...:
	...
	if ...:
		continue
	...

在这里插入图片描述

示例1:

for i in range(5):
	print("轻舟已过万重山")
	if i == 3:
		continue
	print("李白——《早发白帝城》")

当i==3时会触发continue语句,于是回到了循环开头,跳过了一句print语句。

示例2:

sumA=0 
i =1
for i in range(1,6) :
 	sumA+=i
 	if i==3:
 		continue
 	print("i={},sum={}".format(i,sumA))
  • while循环与continue

语法:

while ...(条件):
	...
	if ...:
		continue
	...

在这里插入图片描述
示例1:

while True:
	q1=input("轻舟已过万重山来源于哪首诗?")
	if q1 != "早发白帝城":
		continue
	print("答对了,下面是第二问")
	q2=input("这首诗的作者是谁?")
	if q2 != "李白":
		continue
	print("答对了,下面是第三问")
	q3=input("李白最终的下场是怎么样的?")
	if q3 == "不知道":
		break
print("恭喜你都答对了。")	

如果q1错,q1对q2错,q1和q2对q3错,都会返回第一个问题重新循环,直到q3答对,才结束循环。

示例2:

sumA=0 
i =1
while i<=5:
 	sumA+=i
 	i+=1
 	if i==3:
 		continue
 	print("i={},sum={}".format(i,sumA))

else

循环中的else,else不但可以和if配合使用,还能跟for循环和while循环配合使用。

  • 如果循环代码从break处终止,跳出循环。
  • 正常结束循环,则执行else中代码。
  • for循环与else

示例:

for i in range(5):
	num=int(input("Please enter a number:"))
	if num == 0 :
		print("你触发了break语句,循环结束,导致else语句不会生效")
		break 
else:
	print("5次循环你都错过了,else语句生效了。")
  • while循环与else

示例:

from math import sqrt
num=int(input("Please enter a number:"))
j=2
while j<int(sqrt(num)):
	if num %j ==0:
		print("{:d} is not a prime.".format(num))
		break
	j+=1
else:
	print("{:d} is not a prime.".format(num))

pass

pass 语句:跳过

示例:

num=int(input("Please enter a number:"))
if num>100:
	pass
else:
	print(num)

总结:

语句 说明
break语句 从循环中跳出(必须和if语句连用)
continue语句 跳跃到循环开头(必须和if语句连用)
pass语句 什么都不做(常用在if语句下)
else语句 用在循环语句后,如果正常结束循环就执行else语句(没有遇到break)

4、循环与递归

示例:斐波那契数列

0,1,1,2,3,5,8…
规律:从第三位数开始,是前两位数的和。

循环表示:

def fib(n):
	a,b = 0,1
	count = 1
	while count < n :
		a,b = b,a+b
		count = count+1
	print(b)

递归表示:

def fib(n):
	if n == 0 or n == 1:
		return n 
	else:
		return fib(n-1)+fib(n-2)

在这里插入图片描述

示例2:模拟3的个数乘法。

def f1(a,b):
    if b==1:
        return a 
    else:
        return a+f1(a,b-1)
f1(3,5)

# 输出:
# 15

3+f(3,4)
3+3+f(3,3)
3+3+3+f(3,2)
3+3+3+3+f(3,1)

示例3:十进制表示为二进制的表示方法。

def f2(n):
    if n>=2:
        f2(n//2)
    print(n%2,end='')

f2(8)

练习题

题目1:

输入一个整数,求其逆序数。注:虽然可通过字符串切片等方法轻获得一个数的逆序数,但用整数通过循环来获得逆序数是锻炼逻思维的一好例子。

方法一:字符串切片。

str_int=eval(input("请输入一个整数"))
list_int=list(str_int)
if list_int[0] >= list_int[1]:
	new_int=list_int[0]+list_int[1]
else:
	new_int=list_int[1]+list_int[0]

for i in range(2,len(list_int)):
	for j in new_int:
		if list_int[i]>j:			
			new_int.split('j')[0]+list_int[i]+j+new_int.split('j')[1]
		else:
			new_int+i
print(new_int)	

方法二:用整数通过循环来获得逆序数。

n=eval(input("请输入一个整数"))
s=0
m=n
while n != 0:
	s= s * 10 + n % 10
	n=n // 10
print("reversed({:d}) = {:d}",format(m,s))

题目2:

将一个正整数分解质因数。例如: 输入90打印出90=2*3*3*5。

n=int(input("请输入一个正整数:"))

print(n,'=',end='') #这个循环是怎么弄的?
i=2
while n != 1:
	if n % i ==0:
		n //=i
		if n ==1:
			print('{:d}'.format(i))
		else:
			print('{:d} *'.format(i),end =' ')
	else:
		i +=1

三、python函数

1、自定义函数

  • 定义函数:def()语句

语法:

def 函数名(参数1,参数2,.....,参数n): 
	函数体 	
	return 语句

示例:

def hello(name):
	print(name+"Good morning!"
  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值