一、基本数据类型中的例题:
编写一个根据体重和身高计算BMI值的程序,井同时输出国际和国内的BMI指标建议值。
二、练习题
4.1 判断题: 复杂的程序结构都是由基本结构组合而成。
4.2 判断题: 分支结构可以向已经执行过的语句部分跳转(即向后跳转)。
4.3 下面 是流程图的基本元素的是( )。
A.判断框 B.顺序结构 C.分支结构 D.循环结构
4.4 循环结构可以使用Python 语言中的( ) 语句实现?
A. print B. while C. loop D. if
4.5 判断题:简单分支结构是最基础的程序结构,在设计中一般用不到。
4.6 判断题:多分支结构是使用最广泛的结构,可替代任何选择性结构。
4.7 判断题: Python 语法认为条件x<=y<=z是合法的。
4.8 Python 通过(, )来判断操作是否在分支结构中。-1i
A.括号 B.缩进 C.花括号 D.冒号
4.9 请分析下面的程序, 若输入score为80,输出grade为多少?是否符合逻辑?为什么?
三、程序设计题
4.1 猜数游戏。 在程序中预设一个0-9之间的整数,让用户通过键盘输入所猜的数,如果大于预设的数,显示“遗憾,太大了”:小于预设的数,显示“遗憾,太小了”,如此循环,直至猜中该数,显示“预测N次, 你猜中了!”,其中N是用户输入数字的次数。
4.2 统计不同字符个数。 用户从键盘输入一行字符,编写“个程序, 统计并输(>= u’"u4e00’出其中英文字符、数字、空格和其他字符的个数。
an从ic=u’\ufas’
4.3 最大公约数计算。 从键盘接收两个整数,编写程序求出这两个整数的最大公约数和最小公倍数(提示:求最大公约数可用辗转相除法,求最小公倍数则用两数的积除以最大公约数即可)。
4.4 猜数游戏续。 改编程序练习题4.1,让计算机能够随机产生一个预设数字,范围在0~100之间,其他游戏规则不变。
4.5 猜数游戏续。 对于程序练习题4.4程序,当用户输入的不是整数(如字母、浮点数等)时,程序会终止执行退出。改编该程序,当用户输入出错时给出“输入内容必须为整数!”的提示,并让用户重新输入。
4.6 羊车门问题。有3扇关闭的门,-扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面是什么。参赛者可以选择一扇门, 在开启它之前, 主持人会开启另外一扇门,露出门后的山羊,然后允许参赛者更换自己的选择。请问:参赛者更换选择后能否增加猜中汽车的机会?-这是一 个经典问题。请使用random库对这个随机事件进行预测,分别输出参赛者改变选择和坚持选择获胜的机率。
4.7 请用异常处理改造实例I,使其能够接收并处理用户的任何输入。
(1)使用循环的方法简单计算
(2)使用递归思想纳入到计算中降低复杂度(优化)
#第一种方法:使用简单的循环实现
height, weight = eval(input("请输入身高(米)和体重\(公斤)[逗号隔开]: "))
bmi = weight/(pow(height,2))
print("BMI数值为:{:.2f}".format(bmi))
who,dom = "",""
if bmi< 18.5:
who = "偏瘦"
elif bmi < 25:
who = "正常"
elif bmi < 30:
who = "偏胖"
else:
who = "肥胖"
if bmi< 18.5:
dom = "偏瘦"
elif bmi < 24:
dom = "正常"
elif bmi < 28:
dom = "偏胖"
else:
dom = "肥胖"
print("BMI为:国际'{0}',国内'{1}'".format(who,dom))
(第二种方式:if else严格循环方式)
#author fntp 2020/04/05
#第二种实现方法:
height, weight = eval(input("请输入身高(米)和体重\(公斤)逗号隔开]: "))
bmi=weight/pow(height,2)
print("BMI数值为: {:2f}".format(bmi))
who,dom="",""
if bmi< 18.5:
who, dom = "偏瘦", "偏瘦"
elif 18.5<= bmi < 24:
who, dom = "正常", "正常"
elif 24<= bmi < 25:
who, dom ="正常", "偏胖"
elif 25<= bmi < 28:
who, dom = "偏胖", "偏胖"
elif 28 <= bmi < 30:
who, dom = "偏胖", "肥胖"
else:
who, dom = "肥胖", "肥胖"
print("BMI为:国际'{0}',国内'{1}'".format(who, dom))
(第一种:使用简单的循环遍历实现方式)
#第一种方法:使用简单的循环实现
shuru,target,time=eval(input("请输入一个0-9之间的一个正整数!")),8,0
while shuru not in [target]:
if shuru<target:
time+=1
print("很遗憾!太小了!")
else:
time += 1
print("很遗憾!太大了!")
shuru=eval(input("请输入一个0-9之间的一个正整数!"))
print("恭喜你!才花了",(time+1),"次就猜中了!")
(第二种:随机数递归方法:(优化方法))
#author fntp 2020/04/05
#第一种实现方法:随机数猜数,使用递归方法:
import random
time=0
def caishu():
shuru,target=eval(input("请输入一个随机正整数!")),5
if shuru==target:
global time
time+=1
print("恭喜你!才花了",time,"次就猜中了!")
exit()
elif shuru<target:
time+=1
print("很遗憾!太小了!")
elif shuru>target:
time += 1
print("很遗憾!太大了!")
caishu()
caishu()
(第一种for循环遍历加判断结构写法:)
#第一种方法
#author fntp 2020/04/05
# 汉字:
# 十六进制 [0x4e00, 0x9fa5]
# 十进制 [19968,40869]
# 数字:
# 十六进制 [0x30, 0x39]
# 十进制 [48, 57]
# 小写字母:
# 十六进制 [0x61, 0x7a]
# 十进制 [97,122]
# 大写字母:
# 十六进制 [0x41, 0x5a]
# 十进制 [65, 90],
def suanfa():
shuru,zhongwen,yingwenxiaoxie,yingwendaxie,kongge,shuzi,other=input("请输入字符!(不要输入标点符号)"),0,0,0,0,0,0
for i in shuru:
if 40869 >= ord(i) >= 19968:
zhongwen+=1
elif 57 >= ord(i) >= 48:
shuzi+=1
elif 122 >= ord(str.lower(i)) >= 97:
yingwenxiaoxie+=1
elif 90>= ord(str.lower(i)) >=65:
yingwendaxie+=1;
elif i == ' ':
kongge+=1
else:
other+=1
print("中文字符数为:",zhongwen,"个")
print("英文字符数为:",yingwendaxie+yingwenxiaoxie,"个")
print("英文小写字符数为:",yingwenxiaoxie,"个")
print("英文大写字符数为:",yingwendaxie,"个")
print("数字字符数为:",shuzi,"个")
print("其他字符数为:",other,"个")
print("所有字符数为:",other+zhongwen+yingwendaxie+yingwenxiaoxie+shuzi,"个")
suanfa()
(第二种:if elif循环结构写法)
#author fntp QQ358566760
#第二种方法
shuru=input("请输入一句任意数据!")
zw,yw_da,yw_xiao,space,num,other=0,0,0,0,0,0
for i in shuru:
if i.isdigit():
num+=1
elif i.isspace():
space+=1
elif i.isupper():
yw_da+=1
elif i.islower():
yw_xiao+=1
elif 40869 >= ord(i) >= 19968:
zw+=1
else:
other+=1
print("中文字符数为:",zw,"个")
print("英文字符数为:",yw_da+yw_xiao,"个")
print("英文小写字符数为:",yw_xiao,"个")
print("英文大写字符数为:",yw_da,"个")
print("数字字符数为:",num,"个")
print("其他字符数为:",other,"个")
print("所有字符数为:",other+zw+yw_xiao+yw_da+num,"个")
(第一种:欧几里得算法)
#author fntp 2020/04/05
#被除数不可为零,第一种欧几里得算法:
import math
def suanfa(a,b):
try :
return math.gcd(a,b)
except NameError:
print("输入错误!请重新输入!")
a,b=eval(input("请输入两个整数!第一个数:")),eval(input("第二个数:"))
print("最大公约数为:",suanfa(a,b))
(第二种方法:辗转相除法)
shuzi1,shuzi2=eval(input("请输入两个数据!第一个数据:")),eval(input("第二个数据:"))
if shuzi2!=0:
middle=shuzi1 % shuzi2
while (middle!=0):
shuzi1=shuzi2
shuzi2=middle
middle=shuzi1%shuzi2
print("最大公约数为:",shuzi2)
else:
print("您的输入有误!请重新运行")
(第一种方式:随机数递归方式:)
#author fntp 2020/04/05
#第一种实现方法:随机数猜数,使用递归方法:
import random
time=0
def caishu():
shuru,target=eval(input("请输入一个0-100内随机正整数!")),random.randint(0,100)
if shuru==target:
global time
time+=1
print("恭喜你!才花了",time,"次就猜中了!")
exit()
elif shuru<target:
time+=1
print("很遗憾!太小了!")
elif shuru>target:
time += 1
print("很遗憾!太大了!")
caishu()
caishu()
(第二种:使用循环实现)
#第二种方法:使用简单的循环实现
import random
shuru,target,time=eval(input("请输入一个0-100之间的一个正整数!")),random.randint(0,100),0
while shuru not in [target]:
if shuru<target:
time+=1
print("很遗憾!太小了!")
else:
time += 1
print("很遗憾!太大了!")
shuru=eval(input("请输入一个0-9之间的一个正整数!"))
print("恭喜你!才花了",(time+1),"次就猜中了!")
(第一种方法:随机数猜数递归实现)
#第一种实现方法:随机数猜数,使用递归方法:
import random
time=0
def caishu():
shuru,target=eval(input("请输入一个0-100内随机正整数!")),random.randint(0,100)
if shuru==target:
global time
time+=1
print("恭喜你!才花了",time,"次就猜中了!")
exit()
elif shuru<target:
time+=1
print("很遗憾!太小了!")
elif shuru>target:
time += 1
print("很遗憾!太大了!")
else:
time += 1
print("输入内容必须是整数!请重新输入!")
caishu()
caishu()
(第二种方式:使用简单的循环实现)
#第二种方法:使用简单的循环实现
import random
shuru,target,time=eval(input("请输入一个0-100之间的一个正整数!")),random.randint(0,100),0
while shuru not in [target]:
if shuru<target:
time+=1
print("很遗憾!太小了!")
elif shuru>target:
time += 1
print("很遗憾!太大了!")
else:
time += 1
print("输入内容必须是整数!请重新输入!")
shuru=eval(input("请重新输入一个0-9之间的一个正整数!"))
print("恭喜你!才花了",(time+1),"次就猜中了!")
第一种间接方式:元组实现:
#author fntp 2020/04/05
#猜车问题:
#我个人认为会增加选择几率
import random
choice_one,choice_two,one,two,time=False,False,0,0,0
for i in range(10000):
time+=1
chushi=['羊','车','羊']
xuanze=chushi.pop(random.randint(0,2))
chushi.remove('羊')
if chushi[0]=='羊':
one+=1
choice_one=True
else:
two+=1
choice_two=True
print("第一次选择为正确的时候!概率为:",(one/time))
print("第二次选择是正确的时候!概率为:",(two/time))
if choice_two:
print("并且本次获胜是因为第2次更改后的才选中的!并且概率为:", (two / time), "所以验证成功!")
else:
print("并且本次获胜的是根据第1次直接选中的!但是概率为:", (one / time))
第二种方式:传统方式:
from random import*
TIMES = 10000
my_first_choice_1=0#初始化不改选择的次数
my_change_choice_2=0#初始化更改选择的次数
for i in range(TIMES):
car_inDoor=randint(0,2)
my_guess=randint(0,2)
if car_inDoor==my_guess:
my_first_choice_1+=1
else:
my_change_choice_2+=1
print("不改选择:{}".format(my_first_choice_1/TIMES))
print("更改选择:{}".format(my_change_choice_2/TIMES))
(第一种方法:)
#author fntp 2020/04/05
#第一种实现方法:随机数猜数,使用递归方法:
import random
time=0
def caishu():
shuru,target=eval(input("请输入一个随机正整数!")),5
if shuru==target:
global time
time+=1
print("恭喜你!才花了",time,"次就猜中了!")
exit()
elif shuru<target:
time+=1
print("很遗憾!太小了!")
elif shuru>target:
time += 1
print("很遗憾!太大了!")
caishu()
caishu()
(第二种方法:)
#第二种方法:使用简单的循环实现
shuru,target,time=eval(input("请输入一个0-9之间的一个正整数!")),8,0
while shuru not in [target]:
if shuru<target:
time+=1
print("很遗憾!太小了!")
elif shuru>target:
time += 1
print("很遗憾!太大了!")
else:
time += 1
print("不对哦!重新输入吧!")
shuru=eval(input("请输入一个0-9之间的一个正整数!"))
print("恭喜你!才花了",(time+1),"次就猜中了!")
本期Python编程实例到此结束,感谢大家的耐心阅读!我们下期再见!(PS:由于课程繁忙,我可能更新的不是很及时!大家不要介意!嘻嘻嘻)欢迎各位读者加我QQ一起探讨编程技术!