《python语⾔程序设计基础》第⼆版-第4章程序练习题答案**若代码有误,欢迎⼤家指正。**
1、猜数游戏
from random import randint
ran = randint(0,9)#产⽣0-9之间的整数(包括9)
number =eval(input("请输⼊你猜测的数字:"))
N =1
while(ran != number):
if(ran > number):
print("遗憾,太⼩了")
else:
print("遗憾,太⼤了")
number =eval(input("请输⼊你猜测的数字:"))
N = N +1
print("预测{}次,你猜中了!".format(N))
运⾏结果
请输⼊你猜测的数字:2
预测1次,你猜中了!
2、统计字符个数
s =input("请输⼊⼀⾏字符:")
letter =0#字母
Space =0#空格
number =0#数字
character =0#其他字符
for i in s:
if ord("a")<=ord(i.lower())<=ord("z"):
letter +=1
elif ord(" ")==ord(i):
Space +=1
elif ord("0")<=ord(i)<=ord("9"):
number +=1
else:
python基础代码练习
character +=1
print("英⽂个数:"+str(letter))
print("空格个数:"+str(Space))
print("数字个数:"+str(number))
print("其他字符个数:"+str(character))
运⾏结果
请输⼊⼀⾏字符:I am a 20-year-old college student.
英⽂个数:25
空格个数:5
数字个数:2
数据库运行管理员其他字符个数:3
3、最⼤公约数
a, b =eval(input("请输⼊两个整数(⽤,分隔)"))
c, d =a, b
while(b !=0):
a, b = b, a % b
b =int(
c *
d / a)
print("这两个整数的最⼤公约数为:"+str(a)+", "+"最⼩公倍数为:"+str(b))
运⾏结果
请输⼊两个整数(⽤,分隔)1253,864
这两个整数的最⼤公约数为:1,最⼩公倍数为:1082592
4、猜数游戏续
from random import randint
ran = randint(0,100)
cursor oracle
number =eval(input("请输⼊你猜测的数字:"))
N =1
while(ran != number):
if(ran > number):
print("遗憾,太⼩了")
else:
print("遗憾,太⼤了")
number =eval(input("请输⼊你猜测的数字:"))
N = N +1
print("预测{}次,你猜中了!".format(N))
运⾏结果
由于结果⾏数过于累赘,这⾥就不再显⽰运⾏结果了。
如果读者想知道运⾏结果如何,那还请⾃⼰去执⾏!
5、猜数游戏续
from random import randint
ran = randint(0,100)
N =1
while(1):
try:
number =eval(input("请输⼊你猜测的数字:"))
if(not(isinstance(number,int))):
print("输⼊内容必须为整形!")
continue
elif(ran > number):
print("遗憾,太⼩了")
elif(ran < number):
print("遗憾,太⼤了")
mysql数据库入门实战教程else:
break
N = N +1
except:linux命令source
print("输⼊内容必须为整形!")
print("预测{}次,你猜中了!".format(N))
运算结果
不展⽰运⾏结果了。
不过在此讲⼀下输⼊的问题:
当你输⼊字母,就会抛出异常,此时会被except所接受并使print打印字符串。
当你输⼊浮点数,number就会指向浮点数,在if(not(isinstance(number,int)))
中,就会判断出来,读进来的数不是整数,这时也会输出字符串。
其实上⽅代码还存在⼀个问题,当你输⼊ran时,就会出现number = ran 这是合法的。解决⽅案:
不再使⽤try和except,直接多分⽀结构
不提前把“”去掉,也就是说不要提前eval()。
先判断字符串是否含有字母,如果含有,则提⽰⽤户输⼊错误。
过了这门槛之后,再调⽤eval()去掉“”,
然后再if(not(isinstance(number,int)))判断是否是整数,
其余的代码⼀样,具体实现就交给读者了。(读万卷书,不如⾏千⾥路)
如果读者有更好的想法,欢迎下⽅回复,互相学习
6、⽺车门问题
根据题⽬的意思,门后⾯物品的次序应该是固定的,不⽤每次实验都打乱。
from random import*
time =0#实验次数
N1 =0#坚持选择获胜的次数
N2 =0#改变选择获胜的次数
while(time !=100000):
s =[0,0,1]# 0代表⽺,1代表车,下标代表门
a = randint(0,2)
k = randint(0,1)
if k != a:
s[k]=2
else:
s[1- k]=2
if(s[a]==1):
N1 = N1 +1
for i in range(3):
if(s[i]!=2)and(i != a):
a = i
break
if(s[a]==1):
N2 = N2 +1
time = time +1
print("参赛者坚持选择获胜的概率为:{}%".format(N1 / time *100))
print("参赛者改变选择获胜的概率为:{}%".format(N2 / time *100))
运⾏结果:
参赛者坚持选择获胜的概率为:33.400999999999996%
参赛者改变选择获胜的概率为:66.599%
如果每次实验都打乱门后⾯物品的次序,其结果为
参赛者坚持选择获胜的概率为:33.219%
参赛者改变选择获胜的概率为:50.105999999999995%
这可能是由于同时改变了实验2个因变量的缘故(这是个⼈见解,欢迎指教)下⾯给出每次实验打乱次序的代码。
from random import*
time =0#实验次数
N1 =0#坚持选择获胜的次数
N2 =0#改变选择获胜的次数
while(time !=100000):
s =[0,0,1]# 0代表⽺,1代表车,下标代表门
a = randint(0,2)
shuffle(s)
sknow =[]#为了知道门后⾯是什么,创建⼀个新的列表,存放⽺和车具体在那个门后⾯for i in range(3):
if(s[i]==0):
sknow.insert(1, i)
else:
sknow.append(i)
k = randint(0,1)
if sknow[k]!= a:
s[sknow[k]]=2
else:
s[sknow[1- k]]=2
if(s[a]==1):
N1 = N1 +1
for i in range(3):
if(s[i]!=2)and(i != a):
a = i
break
if(s[a]==1):
N2 = N2 +1
time = time +1
print("参赛者坚持选择获胜的概率为:{}%".format(N1 / time *100))
print("参赛者改变选择获胜的概率为:{}%".format(N2 / time *100))
百度进制转换计算器
7、异常处理改造实例1
while(1):
TempStr =input("请输⼊温度值符号F或者C(⼤⼩写都可):")
if(TempStr !='F'and TempStr !='f')and(TempStr !='C'and TempStr !='c'):
print("输⼊格式错误,请重新输⼊")
continue
try:
x =eval(input("请输⼊不带符号的温度值:"))
if TempStr in['F','f']:
C =(x -32)/1.8
print("转化后的温度是{:.2f}C".format(C))
break
elif TempStr in['C','c']:
F =1.8* x +32
print("转化后的温度是{:.2f}F".format(F))
break
except:
print("输⼊格式错误,请重新输⼊")
运⾏结果
请输⼊温度值符号F或者C(⼤⼩写都可):f
请输⼊不带符号的温度值:65
转化后的温度是18.33C
请输⼊温度值符号F或者C(⼤⼩写都可):c 请输⼊不带符号的温度值:as
输⼊格式错误,请重新输⼊
请输⼊温度值符号F或者C(⼤⼩写都可):d 输⼊格式错误,请重新输⼊
请输⼊温度值符号F或者C(⼤⼩写都可):c 请输⼊不带符号的温度值:25
转化后的温度是77.00F

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。