if <条件>:
<语句块>
guess =eval(input())
if guess==99:
print("猜对了")
else:
print("猜错了")
<表达式1> if <条件> else <表达式2>
guess=eval(input())
print("猜{}了".format("对" if guess==99 else "错"))
score=eval(input())
if score >= 90:
grade="A"
elif score >= 80:
grade="B"
elif score >= 70:
grade="C"
elif score >= 60:
grade="D"
print("输出成绩属于级别{}".format(grade))
guess = eval(input())
if guess > 99 or guess < 99:
print("猜错了")
else:
print("猜对了")
num = eval(input("请输入一个整数:"))
print(num**2)
try:
<语句块1>
except:
<语句块2>
#或
try:
<语句块1>
except <异常类型>:
<语句块2>
try:
num=eval(input("请输入一个整数:"))
print(num**2)
except:
print("输入不是整数")
try:
num = eval(input("请输入一个整数"))
print(num**2)
except NameError: #标注异常类型后,仅响应该异常异常类型名字等同于变量
print("输入不是整数")
try :
<语句块1>
except :
<语句块2>
else : #不发生异常时执行
<语句块3>
finally : #一定执行
<语句块4>
- 定义: B M I = 体 重 ( k g ) / 身 高 2 ( m 2 ) BMI=体重(kg)/身高^2(m^2) BMI=体重(kg)/身高2(m2)
- 输入:给定体重和身高值
- 输出:BMI指标分类信息(国际和国内)
难点在于同时输出国际和国内对应的分类
- 思路一:分别计算并给出国际和国内BMI分类
height,weight=eval(input("请输入身高(米)和体重(公斤)[逗号隔开]:"))
bmi=weight/pow(height,2)
print("BMI 数值为:{:.2f}".format(bmi))
who=" "
if bmi < 18.5:
who = "偏瘦"
elif 18.5 <= bmi < 25
who = "正常"
elif 25 <= bmi < 30
who = "偏胖"
else:
who= "肥胖"
print("BMI 指标为:国标'{0}'".format(who))
- 思路二:混合计算并给出国际和国内BMI分类
height,weight=eval(input("请输入身高(米)和体重(公斤){逗号隔开}:"))
bmi=weight/pow(height,2)
print("BMI数值为:{:.2f}".format(bmi))
who,nat="",""
if bmi<18.5:
who,nat="偏瘦","偏瘦"
elif 18.5<=bmi<24:
who,nat="正常","正常"
elif 24<=bmi<25:
who,nat="正常","偏胖"
elif 25<=bmi<28:
who,nat="偏胖","偏胖"
elif 28<=bmi<30:
who,nat='偏胖','肥胖'
else:
who,nat="肥胖","肥胖"
print("BMI指标为:国标'{0}',国内'{1}'".format(who,nat))
- 多分支条件之间的覆盖是重要问题
- 程序可运行,但不正确,要注意多分支
- 分支结构是程序的重要框架,读程序先看分支
for <循环变量> in <遍历结构>:
<语句块>
- 从遍历结构中逐一提取元素,放在循环变量中
- 由保留字 f o r for for和 i n in in组成,完整遍历所有元素后结束
- 每次循环所获得元素放入循环变量,并执行一次语句块
for i in range(N):
<语句块>
遍历由 r a n g e ( ) range() range()函数产生的数字序列,产生循环
示例1:
>>> for i in range(5):
print(i)
0
1
2
3
4
示例2:
>>> for i in range(5):
print("Hello:",i)
Hello: 0
Hello: 1
Hello: 2
Hello: 3
Hello: 4
for i in range(M,N,K):
<语句块>
示例1:
>>> for i in range(1,6):
print(i)
1
2
3
4
5
示例2:
>>> for i in range(1,6,2):
print("Hello:",i)
Hello: 1
Hello: 3
Hello: 5
for c in s:
<语句块>
s是字符串,遍历字符串每个字符,产生循环
示例:
>>> for c in "Python123":
print(c,end=",")
P,y,t,h,o,n,1,2,3,
for item in ls:
<语句块>
l s ls ls是一个列表,遍历其每个元素,产生循环
示例
>>> for item in [123,"PY",456]:
print(item,end=",")
123,PY,456,
for line in fi:
<语句块>
f i fi fi是一个文件标识符,遍历其每行,产生循环
示例:
>>>for line in fi:
print(line) #输出文件每一行的内容
while <条件>:
<语句块>
反复执行语句块,直到条件不满足时结束
>>>a=3
>>>while a>0:
a=a-1
print(a)
2
1
0
>>>a=3
>>>while a>0:
a=a+1
print(a)
4
5
...(CTRL+C退出)
b r e a k break break跳出并结束当前整个循环,执行循环后的语句
c o n t i n u e continue continue结束当前次循环,继续执行后续次数循环
b r e a k break break和 c o n t i n u e continue continue可以与 f o r for for和 w h i l e while while循环搭配使用
>>>for c in "PYTHON":
if c =="T":
continue
print(c,end="")
PYHON
>>>for c in "PYTHON":
if c =="T":
break
print(c,end="")
PY
>>>s="PYTHON"
>>>while s !="":
for c in s:
print(c,end="")
s=s[:-1]
PYTHONPYTHOPYTHPYTPYP
>>> s="PYTHON"
>>> while s !="":
for c in s:
if c=="T":
break
print(c,end="")
s=s[:-1]
PYPYPYPYPYP
break仅跳出当前最内层循环
当循环没有被break语句退出时,执行else语句块
else语句块作为"正常"完成循环的奖励
这里else的用法与异常处理中else用法相似
>>>for c in "PYTHON":
if c == "T":
continue
print(c,end="")
else:
print("正常退出")
PYTHON正常退出
>>>for c in "PYTHON":
if c =="T":
break
print(c,end="")
else:
print("正常退出")
PY
- 伪随机数:采用梅森旋转算法生成的(伪)随机序列中元素
- random库主要用于生成随机数
- 基本随机数函数:seed(),random()
- 扩展随机数函数:randint(),getrandbits(),uniform(),randrange(),choice(),shuffle()
示例:
>>>import random
>>>random.seed(10)
>>>random.random()
0.5714025946899135
>>>random.random()
0.4288890546751146
......
>>>import random
>>>random.seed(10)
>>>random.random()
0.5714025946899135
>>>random.seed(10)
>>>random.random()
0.5714025946899135
- 能够利用随机数种子产生"确定"伪随机数
- 能够产生随机整数
- 能够对序列类型进行随机操作
pi=0
N=100
for k in range(N):
pi += 1/pow(16,k)*(4/(8*k+1)-2/(8*k+4)-1/(8*k+5)-1/(8*k+6) #过长的公式可用"\"进行换行
print("圆周率值是:{}".format(pi))
输出结果:
圆周率值是:3.141592653589793
from random import random
from time import perf_counter
DARTS=1000*1000
hits=0.0
start=perf_counter()
for i in range(1,DARTS+1):
x,y=random(),random()
dist=pow(x**2+y**2,0.5)
if dist <=1.0:
hits=hits+1
pi=4*(hits/DARTS)
print("圆周率值是:{}".format(pi))
print("运行时间是:{:.5f}s".format(perf_counter()-start))
运行结果:
圆周率值是:3.144
运行时间是:1.54555s
数学思维:找到公式,利用公式求解
计算思维:抽象一种过程,用计算机自动化求解
使用time库的计时方法获得程序运行时间
改变撒点数量,理解程序运行时间的分布
初步掌握简单的程序性能分析方法
实例一 身体质量指数BMI
题目描述:
题目要求:
(1) 混合计算并给出国际和国内的 BMI 分类;
(2) 使用input()获得测试用例输入时,不要增加提示字符串。
输入示例:1.68,41
输出示例:
BMI数值为:14.53
BMI指标为:国际'偏瘦',国内'偏瘦'
代码如下:
height, weight = eval(input())
bmi = weight / pow(height, 2)
print("BMI数值为:{:.2f}".format(bmi))
who, nat = "", ""
if bmi < 18.5:
who, nat = "偏瘦", "偏瘦"
elif 18.5 <= bmi < 24:
who, nat = "正常", "正常"
elif 24 <= bmi < 25:
who, nat = "正常", "偏胖"
elif 25 <= bmi < 28:
who, nat = "偏胖", "偏胖"
elif 28 <= bmi < 30:
who, nat = "偏胖", "肥胖"
else:
who, nat = "肥胖", "肥胖"
print("BMI指标为:国际'{0}',国内'{1}'".format(who, nat))
实例二 圆周率的计算
题目描述:求解圆周率可以采用蒙特卡罗方法,在一个正方形中撒点,根据在1/4圆内点的数量占总撒点数的比例计算圆周率值。
题目要求:请以123作为随机数种子,获得用户输入的撒点数量,编写程序输出圆周率的值,保留小数点后6位。
输入示例:1024
输出示例:3.218750
from random import random, seed
DARTS = eval(input())
seed(123)
hits = 0.0
for i in range(DARTS):
x, y = random(), random()
dist = pow(x ** 2 + y ** 2, 0.5)
if dist <= 1.0:
hits = hits + 1
pi = 4 * (hits/DARTS)
print("{:.6f}".format(pi))
实例三 整数的加减和
题目描述:编写程序计算如下数列的值:
1-2+3-4…966
其中,所有数字为整数,从1开始递增,奇数为正,偶数为负
输出示例:111
代码如下:
s = 0
count = 1
while count <=966:
if count%2 == 0:
s -= count
else:
s += count
count += 1
print(s)
实例四 三位水仙花数
题目描述:“水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身。
例如:ABC是一个"3位水仙花数”,则:A的3次方+B的3次方+C的3次方 = ABC。
请按照从小到大的顺序输出所有的3位水仙花数,请用"逗号"分隔输出结果。
输出示例:111,222
代码如下:
s = ""
for i in range(100, 1000):
t = str(i)
if pow(eval(t[0]),3) + pow(eval(t[1]),3) + pow(eval(t[2]),3) == i :
s += "{},".format(i)
print(s[:-1])
实例五 用户登录的三次机会
题目描述:给用户三次输入用户名和密码的机会,要求如下:
1)如输入第一行输入用户名为‘Kate’,第二行输入密码为‘666666’,输出‘登录成功!’,退出程序;
2)当一共有3次输入用户名或密码不正确输出“3次用户名或者密码均有误!退出程序。”。
输入示例:
Kate
666666
输出示例:
登录成功!
代码如下:
count = 0
while count < 3:
name = input()
password = input()
if name == 'Kate'and password == '666666':
print("登录成功!")
break
else:
count += 1
if count == 3:
print("3次用户名或者密码均有误!退出程序。")
题目描述:四位玫瑰数是4位数的自幂数。自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。
例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂数,3位数的自幂数被称为水仙花数。
请输出所有4位数的四位玫瑰数,按照从小到大顺序,每个数字一行。
输入输出示例:
代码如下:
s = ""
for i in range(1000, 10000):
t = str(i)
if pow(eval(t[0]),4) + pow(eval(t[1]),4) + pow(eval(t[2]),4) + pow(eval(t[3]),4) == i :
print(i)
题目描述:求100以内所有素数之和并输出。
素数指从大于1,且仅能被1和自己整除的整数。
提示:可以逐一判断100以内每个数是否为素数,然后求和。
输入输出示例:
代码如下:
def is_prime(n):
for i in range(2,n):
if n%i == 0:
return False
return True
sum = 0
for i in range(2,100):
if is_prime(i):
sum += i
print(sum)