python练习
简单问题 1. 哪3 个函数能分别取得一个值的整型、浮点型或字符串版本?
int ,float,str这三个函数
x=int('12')# 转整数
y=float('12.34')# 转浮点数
s=str(x)# 转字符串
2.为什么下面这个表达式会导致错误?如何修复?
'I have eaten ' + 99 + ' burritos.'
因为 字符串 和 整数不能直接相加
修正为:'I have eaten ' + str(99) + ' burritos.'
3. python中与、或、非的运算符是什么?
andornot
4.试写出python中条件语句的一般结构,循环语句for /while 的一般结构。
if条件:
语句块1
else:
语句块2
forxinrange(10):
循环语句块
while条件:
循环语句块
5. break 和 continue 语句有何区别?
break :在循环语句内部使用,用于直接跳出循环
continue :在循环语句内部使用,用于结束本次循环,开始下一次的新循环
forxinrange(1, 11):
ifx%2==0:
break# 直接跳出循环
print(x)
上面的程序段将只输出1
forxinrange(1, 11):
ifx%2==0:
continue# 结束本次循环(不再执行后续语句),重新开始下一次循环
print(x)
上面的程序段将输出13579
6.如何调用一个模块中的函数?例如有模块 m05, 其中有一个函数mysqrt.
应先引入该模块, 语法为 import模块
importm05
m05.mysqrt(参数)
7. print(a,b,c,end='', sep=',') 语句中end , sep 的作用是?
end=''# 注意''是两个单引号,end=''表示print后不换行.默认是要换行的
sep=','# 表示输出多个数据时用逗号替换默认的空格分隔
a=1;
b=2;
c=3
print(a,b,c,end='', sep=',')# end=''不换行, sep=',' 数据之间用,分隔
print(b,c,end='', sep=',')
将输出显示为1,2,32,3
注意两行print的输出没有换行
8. 在函数内部,如何申明一个变量是全局作用域?
global变量名
9.整数,字符串,元组,列表,字典 哪些是可变数据类型,哪些是不可变数据类型?
整数,字符串,元组:不可变
列表,字典: 可变
10. 列表和元组之间可以用什么函数相互转换。
yz=tuple(li)# tuple 函数可将 列表转为元组
li=list(yz)# list 函数可将 元组转为列表
11. 列表的append()和insert()方法之间的区别是什么?
li=[1,2,3]
li.append(10)#append 总是将数据添加在列表的末尾
print(li)#显示 [1,2,3,10]
li.insert(1, 15)#insert 可以指定将新数据15插入在列表的第1个位置
print(li)#显示 [1,15, 2,3,10]
12. 数据类型练习
(1)创建元组,包含10以内的正整数
yz=tuple(range(1,11))
(2)创建列表,包含100以内的偶数
li = list( range(0, 101,2))
(3)创建字典,描述你的基本信息。字典中可包含姓名、年龄、学号、电话等信息
di={'name':'xxx','age':18, 'stuid','01', 'tel':'18912345678'}
(4)创建集合,包含所有的小写字母
set1=set(chr(x)forxinrange(97, 97+26))# 97是'a'的 ascii码
13、查询'A','b','\n' 的 ASCII码。 查询“中文”的unicode 编码,并转为对应的utf-8编码。
ord('A');
ord('b');
ord('\n')
forxin'中文':
print(x,ord(x))
'中文'.encode('utf-8')
编程初级 1. 设计一个重量转换器,输入以"g"为单位的数字后换算为"kg"。
x=input('x(g)=')
x=float(x)# 输入的x是字符串, 应转为 浮点数
z=x/1000
print(x, 'g=', z, 'kg')
print('{0}g={1}kg'.format(x,z))
2. 输入直角三角形的两条直角边长,求斜边长
importmath# 为了使用sqrt函数,先引入math库
a=input('a=')
a=float(a)
b=input('b=')
b=float(b)
c=math.sqrt(a*a + b*b)# 注意写法 math.sqrt
print('a={0}, b={1}, c={2}'.format(a,b,c))
print('a={}, b={}, c={}'.format(a,b,c))# 也可省略{}中的序号
3. 把上面两题改写为函数的形式。
将第1 题改写为函数
defgtokg(x):# 克转为千克的函数
returnx/1000
test=[ 100, 5000,1234]# 用列表构造几个测试数据
forxintest:# 依次取出列表中的数据 进行测试
print('{0}g={1}kg'.format(x, gtokg(x)))
将第2 题改写为函数
importmath
defxiebian(a,b):#计算斜边的函数
returnmath.sqrt(a*a + b*b)
test=[ (3,4),(5,12) ]# 构造两个测试数据, 计算直角边为3,4和5, 12
fora, bintest:# 每次取出一个元组,例如(3,4) , 分别赋值给 a, b
print('a={0}, b={1}, c={2}'.format(a,b,xiebian(a,b)))
4. 输出1-100内 的偶数
方法1
forxinrange(1,101):
ifx%2==0:
print(x)
方法2
forxinrange(2,101,2):# 从2开始,并将步长设为 2
print(x)
5. 投资复利计算器。假定你初始投资 1 万元, 每年收益 12%,每年的收益继续投资。 试输出投资1- 60 年每年的资金总额。
注:巴菲特复利是20.12%, 投资60年。
amount=10000
rate=0.12
years=60
print('yearmoney')
forxinrange(years+1):
money=amount* pow(1+rate, x)# pow 是次方函数
print('{0:2d}{1:12.2f}'.format(x, money ))
注:{0:2d}表示第0个数据采用2位宽的d(整数)格式
{1:12.2f}表示第1个数据采用12位宽, 保留2位小数的f(浮点数)格式
6. 将上例改写为函数 invest(amount, rate, years ), 它包含三个参数: amount起始资金, rate年收益, years 年数。调用该函数计算invest(1, 0.12, 60) , invest(1, 0.2012,60)
definvest(amount, rate, years):
returnround( amount* pow(1+rate, years) ,2)# 保留2位小数
print( invest(1, 0.12, 60))
print( invest(1, 0.2012, 60))
7. 编写华氏温度f向摄氏温度c转换的函数。
f=c*9/5+32# 摄氏 转 华氏
c=(f-32)*5/9# 华氏 转 摄氏
defFtoC(f):
returnround( (f-32)*5/9 ,1)#转换结果保留1位小数
test=[100, 120, 0]# 用列表构造3个测试数据
forxintest:#依次取出每个数据,进行测试
print('{0}F={1}C'.format(x,FtoC(x)))
8. 编写根据半径求圆的周长 和 圆的面积的两个函数。
importmath
defcircleround(r):
return2*math.pi*r
defcirclearea(r):
returnmath.pi*r*r
9.输入正整数n, 输出其所有因子。
例如输入24, 应输出2, 3, 4, 6, 8 ,12。
n=input('n=')
n=int(n)# 将字符串n 转为 整数 n
li=[ ]# 先设一个空列表, 用于容纳因子
forxinrange(2,n//2+1):
ifn%x==0:
li.append(x)# 如果能整除,则将因子添加到列表中
print(n , '的因子为:', li)
10.编程输出三角函数表的部分。横向是3个列,纵向是0度到45度,每次递增1度.
如下表.数据精度保留小数点后面3位。
sincostan
00.0001.0000.000
1
2
..
300.5000.8660.577
..
450.7070.7071.000
注意计算时要转换为弧度.可以用如下两种方式转换
cos(30) = math.cos(30/360*2*math.pi)
cos(30) = math.cos(math.radians(30))
#从math库中直接引入所需的三角函数。这样可只写sin,不用写为math.sin
frommathimportsin, cos, tan, radians
print( 'xsincostan ')
forxinrange(46):
rad= radians(x)# 将角度转为弧度
【Python|python练习】print('{:2d}{:.3f}{:.3f}{:.3f}'.format(x ,sin(rad),cos(rad),tan(rad)))
注意print('{:2d}{:.3f}{:.3f}{:.3f}'.format(x ,sin(rad),cos(rad),tan(rad)))
也可以写为print('{0:2d}{1:.3f}{2:.3f}{3:.3f}'.format(x ,sin(rad),cos(rad),tan(rad)))
本例省略了参数的序号0,1,2,3 .python会自动按顺序对应。
11. 编写程序,每次随机生成20个 1-100间的整数,将其按从小到大 和 从大到小 两种顺序分别输出。
importrandom# 先引入随机数模块
li=[random.randint(1,100)forxinrange(20)]#用列表生成式, 生成20个随机数
print('原始顺序', li)
li.sort()# 排序,默认是从小到大
print('从小到大', li)
li.sort(reverse=True)# reverse=True 表示要逆序, 按从大到小
print('从大到小', li)
12. 编写程序,每次随机生成20个 1-100间的整数,然后
(1)分别输出其奇数下标和偶数下标的数据。
(2)输出平均数,并统计超过平均数的数据有多少个,小于平均数的数据有多少个。
importrandom# 先引入随机数模块
li=[random.randint(1,100)forxinrange(20)]
print('初始列表', li)
print('奇数下标的数据', li[1::2])# 列表切片, 从第1个元素开始,每2个取1个数据
print('偶数下标的数据', li[0::2])# 从第0个元素开始,每2个取1个数据
avg=sum(li)/len(li)# sum是求和函数, len是求列表长度的函数
print('平均数为:',avg )
big=0
small=0
forxinli:
ifx>=avg:
big+=1
else:
small+=1
print('大于等于平均数的数据个数为:',big, '小于平均数的数据个数为:',small )
13. 编写程序,实现如下分段函数计算。
X |
Y |
x<0 |
0 |
0<=x<5 |
x |
5<=x<10 |
3x - 5 |
10<=x<20 |
0.5x -2 |
20<=x |
0 |
ifx<0:
return0
elifx<5:
returnx
elifx<10:
return3*x -5
elifx<20:
return0.5*x -2
else:
return0
test=[-1, 2,5, 6, 11, 21]# 构造几个测试数据
forxintest:
print('x={0}, y={1}'.format(x,fun(x)))
14. 以初速 20m/s速度垂直向上抛出一个小球,忽略空气阻力,计算小球的最大上升高度。
取 g=9.8m/s2
v=20
g=9.8
print(' 最大上升高度',v*v/(2*g))
15. 编写程序,生成包含20个 1-50之间随机整数的列表,然后将前10个元素升序排列,后10个元素降序排列,并输出结果。
importrandom
li=[random.randint(1,50)forxinrange(20)]
print('初始列表', li)
x=li[:10]# 切片,取得前10个元素
x.sort()# 升序排
y=li[10:]#切片,取得后10个元素
y.sort(reverse=True)# 降序排
li= x + y#将前后两部分 连接起来,重新赋给 li
print('前后各自排序后,列表为:' ,li)
16. 假设有一行英文,其中有单独的字母“I”误写为“i”,请编写程序进行纠正。
提示:用字符串的replace方法就可将单独的“i ”替换为"I ", 单词中的i不受影响。
x = "i am a teacher,i am a man, and i am 38 years old.I am not a businessman."
x = x.replace('i ','I ')# 注意本句i , I 的后面各有一个空格, 这样可只替换单独的i
print(x)
程序执行后, 输出为
I am a teacher,I am a man, and I am 38 years old.I am not a businessman.
可注意到只有单独的i被替换, 单词中的i (例如business) 没有被替换
17. 编写程序,创建一个数据文件data.txt,在文件中写入10个随机整数,每行一个数据。
importrandom
f=open('data.txt', 'w')# 以w写入方式打开文件
forxinrange(10):
f.write(str(random.randint(1,100))+'\n')#整数转字符串并加上 \n(换行) , 写入文件
f.close()#记得,一定要关闭文件
18. 编写程序,读取上题的 data.txt , 将文件中的数据累加求和。
s=0
f=open('data.txt', 'r')# 以 r 读的方式打开文件
forxinf:
line=f.readline().strip()# 每次读一行,strip是去掉字符串两边可能含有的空白字符
ifline!='':# 该行非空,表示有数据
s = s+ int(line)# 转为整数, 累加
f.close()
print('和为:', s)
19. 编写函数,判断一个整数是否为素数,并编写主程序调用该函数。
defisprimenumber(n):# 素数返回True; 非素数返回False
ifn<2:
returnFalse
forxinrange(2,int(n**(1/2))+1):
ifn%x==0:
returnFalse
returnTrue
li=[0,1, 2, 3,5,6, 7, 8, 13, 100]
forxinli :
ifisprimenumber(x):
print( x, '是质数')
else:
print( x, '不是质数')
20. 任意输入一个英文字符串,统计其中的 大写、小写、数字、其它字符的个数。
importstring
s=input('请输入字符串(含大小写字母,数字,符号等):')
capital = 0
lowercase = 0
digit = 0
other = 0
forcins:
ifc.isupper():#判断是否是大写字母
capital+=1
elifc.islower():#小写
lowercase+=1
elifc.isdigit():#数字
digit+=1
else:# 其它
other+=1
print('大写:{0}, 小写:{1}, 数字:{2}, 其它:{3}'.format(capital,lowercase,digit,other))
注: 上面的判断也可用如下语句
forcins:
if'A'<=c<='Z':#判断是否是大写字母
capital+=1
elif'a'<=c<='z':#小写
lowercase+=1
elif'0'<=c<='9':#数字
digit+=1
else:# 其它
other+=1
21. 假设有一个列表,其中的正数代表收入,负数代表支出,试统计列表中收入多少,支出多少?
li=[-50,100,200,-90, 70, -10]
print('收入为:', sum(xforxinliifx>0))
print('支出为:', sum(xforxinliifx<0))
注:本例使用了列表的条件生成式
22. 下面是一个男/女每天看电视时间的调查数据,计算男性/女性每天看电视的平均小时数。
'Gender': ['f', 'f', 'm', 'f', 'm','m', 'f', 'm', 'f', 'm', 'm']
'TV':[3.4, 3.5, 2.6, 4.7, 4.1, 4.1,5.1, 3.9, 3.7, 2.1, 4.3]
方法一
Gender=['f', 'f', 'm', 'f', 'm','m', 'f', 'm', 'f', 'm', 'm']
TV=[3.4, 3.5, 2.6, 4.7, 4.1, 4.1,5.1, 3.9, 3.7, 2.1, 4.3]
malenum = 0
malehours = 0
femalenum = 0
femalehours = 0
forindex ,xinenumerate(Gender):# 产生:序号 数据
ifx=='m':
malenum +=1
malehours +=TV[index]
else:
femalenum +=1
femalehours +=TV[index]
print('男性平均看电视时间:', malehours/malenum)
print('女性平均看电视时间:', femalehours/femalenum)
方法二
Gender=['f', 'f', 'm', 'f', 'm','m', 'f', 'm', 'f', 'm', 'm']
TV=[3.4, 3.5, 2.6, 4.7, 4.1, 4.1,5.1, 3.9, 3.7, 2.1, 4.3]
li=list(zip(Gender,TV))# zip 生成 (性别,时间) 配对列表
female=[ xforxinliifx[0]=='f']#女性
male=[ xforxinliifx[0]=='m']#男性
print('男性平均看电视时间:', sum( x[1] forxinmale)/len(male))
print('女性平均看电视时间:', sum( x[1] forxinfemale)/len(female))
方法三
fromitertoolsimportcompress
Gender=['f', 'f', 'm', 'f', 'm','m', 'f', 'm', 'f', 'm', 'm']
TV=[3.4, 3.5, 2.6, 4.7, 4.1, 4.1,5.1, 3.9, 3.7, 2.1, 4.3]
m=[x=='m'forxin Gender]# 得到True/False构成的列表, True对应 'm'
f=[x=='f'forxinGender]
male=list(compress(TV,m))# 抽取True对应的TV值, 即得到男性看电视时间
female=list(compress(TV,f))
print('男性平均看电视时间:', sum(male)/len(male))
print('女性平均看电视时间:', sum(female)/len(female))
23. 编程输出2- 10 的整数的 log2,log,log10 函数对应值,保留4位小数。
frommathimportlog2,log,log10
print('xlog2log(e)log10')
forxinrange(2,11):
print('{:2d} {:.4f}{:.4f}{:.4f}'.format(x, log2(x), log(x), log10(x)))
24.假设有一个游戏角色用字典表示(武力、生命值、能量),初值为role={'force':100,'health':50,'energy':200} 。现用随机函数random.randint(-3,10)来模拟游戏运行,该函数每次产生 -3到 10之间的一个随机数,用于增减上述的三个属性值。试编程并输出游戏模拟运行10次后该角色的属性值。
本例练习字典的使用
importrandom
role={'force':100 ,'health':50 ,'energy':200}# 构造一个字典
forxinrange(10):
forkeyinrole.keys():# 遍历其三个属性
role[key]+= random.randint(-3,10)# 对属性进行随机修改
print('运行10次后, role= ', role)
编程中级 1. 用文件的形式保存你班上同学的姓名和手机号码。每次输入某个同学的姓名和手机号码,将其添加到 tel.txt 文件中。
f=open('tel.txt','a')# a 添加模式
whileTrue:
name=input('姓名=')
ifname=='':break# 姓名为空则跳出循环
mobile=input('手机号=')
f.write(name+''+mobile+'\n')#写入文件
f.close()#关闭文件
2. 读取上例 tel.txt 文件, 先输出全部同学的姓名和手机号码。然后可以输入一个姓名,查询对应的手机号码。
tel={ }#空字典,用于容纳电话号码表
f=open('tel.txt','r')# r 读模式
forsinf:
li=s.split()#读一行,分解, li[0]姓名, li[1]电话
tel[li[0]]=li[1]# 存入字典中
f.close()
print('电话号码表如下:', tel)
whileTrue:
name=input('要查询的姓名=')
ifname=='':break# 姓名为空则跳出循环
ifname intel:
print(name , '号码为:', tel[name])
else:
print('无此姓名')
3. 统计tel.txt所有手机号码中 移动、联通、电信的各有多少个?规则:
(1)手机号码长度必须为 11位
(2)各公司号段如下:
移动号段:134,135,136,137,138,139,147,150,151,152,157,158,159,182,183,184,187,188
联通号段:130,131,132,145,155,156,176,185,186
电信号段:133,153,177,180,181,189
mobile='134,135,136,137,138,139,147,150,151,152,157,158,159,182,183,184,187,188'
unicom='130,131,132,145,155,156,176,185,186'# 联通
telecom='133,153,177,180,181,189'# 电信
num={'移动':0,'联通':0,'电信':0,'其它:':0}
f=open('tel.txt','r')# r 读模式
forsinf:
li=s.split()#读一行,分解, li[0]姓名, li[1]电话
iflen(li[1])!=11:continue# 号码不是 11位长
phone=li[1][:3]# 取号码前3位
ifmobile.find(phone)>=0:
num['移动'] +=1
elifunicom.find(phone)>=0:
num['联通'] +=1
eliftelecom.find(phone)>=0:
num['电信'] +=1
else:
num['其它'] +=1
f.close()
print('统计结果为:', num)
4. 设计一个程序,每次运行时在 d:\my文件夹中产生1.txt,2.txt, … , 100.txt 共100个文件,每个文件中分别存放 100,99,98,…1的数字。即1.txt中存放100, 2.txt中存放99.
# 本程序运行时要求 d:\my文件夹已存在
forkinrange(1,101):
filepath='d:\\my'+'\\'+str(k)+'.txt'
f=open(filepath,'w')# w 写模式
f.write( str(100-k+1))
f.close()
5. 读取上例的 100个文件, 统计文件中所有数据的和。
s = 0
forkinrange(1,101):
filepath='d:\\my'+'\\'+str(k)+'.txt'
f=open(filepath,'r')# r 读模式
s=s + int(f.readline()) # 读文件的第一行,累加
f.close()
print('和为:', s)
6.假定你手里有三个骰子。试用计算机模拟验证,你平均要投掷多少次才能一次投出3个6。
本题可用 random.randint(1,6) 产生随机数。
import random
li=[]
forxinrange(100):#做100次投掷3个6的实验,算平均次数
num=0
whileTrue:
x=random.randint(1,6)
y=random.randint(1,6)
z=random.randint(1,6)
num+=1
ifx==6andy==6and z==6:
li.append(num)# 将本次的投掷次数加入列表
break# 结束本次循环
print('投出3个6所需的平均投掷次数:',sum(li)/len(li))
7.用元组表示一个同学的信息, 格式为(学号, 姓名, 入学分数) 。连续输入若干位同学的信息,将资料保存在students.txt文件中。对输入数据进行如下处理:
(1)输出平均分, 最高分,最低分
(2) 排序,按学号顺序从小到大输出所有同学的信息
(3)排序,按分数从高到低输出所有同学的信息
f=open('students.txt','a')
stu=[ ]
whileTrue:
s=input('请输入 学号,姓名,入学分数=')# 三个数据项输入时应逗号分开
ifs=='':break
f.write(s+'\n')# 写入文件
li=s.split(',')
li[2]=float(li[2]) # 分数转为浮点数
stu.append(tuple(li))# 将li转为元组, 加入到stu列表中
f.close()
print('平均分:', sum(s[2] for s in stu)/len(stu))
print('最高分:', max(s[2] for s in stu))
print('最低分:', min(s[2] for s in stu))
print('\n按学号从小到大')
li=sorted(stu,key=lambda x: x[0])
print(li)
print('\n按分数从高到低')
li2=sorted(stu,key=lambda x: x[2], reverse=True)
print(li2)
8. 现在随机产生 2000个数, 范围在 1-1000以内。要求:
(1)统计2000个数中每个数出现了多少次?出现次数最多的是哪个数?
(2)统计2000个数中有多少个不重复的数据?
(3) 1- 1000内的数有哪些没有出现在这 2000个数中?
本题可利用集合完成。
fromcollectionsimportCounter
importrandom
li=[random.randint(1,1000)forxinrange(2000)]
di=Counter(li)# 利用Counter统计各个数出现的次数
print('各数出现的次数为', di)
print('\n出现次数最多的是', di.most_common(1))# 返回出现次数最多的数
set1=set(li)# 将列表转为集合,集合会自动剔除重复元素
print('\n 2000个数中不重复的数据个数为:', len(set1))
set2=set(range(1,1001))
set3=set2 -set1# 利用集合的 差 运算
print('\n 1-1000内的数没有出现在这2000个数中的有:', set3)
9.统计英文文件瓦尔登湖 Walden.txt 中出现频次最高的10个单词。统计时应剔除标点符号,对某些大写开头的单词统一转为小写再统计。
words=[ ]
signs='!.; ,$%\"\':'# 标点符号列表
withopen('Walden.txt')asfile:# with 是另一种使用文件的语法
forlineinfile:
forxinsigns:
line=line.replace(x,' ')# 将标点符号都用 空格替换
li=[x.lower() for xin line.strip().split()] #每次一行,按空格分隔得到单词,单词都转小写
words.extend(li)#加入到单词总表中
print('\n总单词数:',len(words))
fromcollectionsimportCounter
di=Counter(words)
print('\n共有不同的单词数:',len(di))
print('\n出现最多的10个单词是:')
fork,vindi.most_common(10):
print('{0:10s}{1}'.format(k,v))
print('\n出现最少的10个单词是:')
fork,vindi.most_common()[-10:]:#先全部排,然后从倒数第10个开始取到末尾
print('{0:10s}{1}'.format(k,v))
10.使用 Python 编写一个生成由4个大写字母构成的随机验证码函数,例如 BXAM,XYMZ 等。然后你的程序调用这个函数,生成一个验证码并输出,要求用户再输入这个验证码,检查输入是否正确。
importrandom
defverifify_code():
letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
key=random.sample(letters,4)# sample是取样,从letters中取4个,返回一个列表
return''.join(key)# 将列表元素连接为一个字符串返回
code=verifify_code()
print('验证码为:', code)
s=input('请输入上面的验证码:')
ifcode==s:
print('正确')
else:
print('验证码输入错误')
11. 假定有如下一个列表, 统计其:中位数,众数,方差,标准差
中位数:数列个数为奇数时,取正中间的数;数列个数为偶数时,取中间两个数的平均值;
众数: 出现次数最多的数
li=[1,2,3,3,3,5,8,9,12,2,3,18,21,23,4,6,8,30]
li=[1,2,3,3,3,5,8,9,12,2,3,18,21,23,4,6,8,30]
li2=sorted(li)
length=len(li2)
iflength%2==0:# 数据个数为偶数个
median=(li2[length//2-1]+li2[length//2])/2# 则中位数是中间两个数的平均值
else:
median=li2[length//2]
print('\n 中位数为:', median)
fromcollectionsimportCounter
di=Counter(li)
print('\n 出现次数最多的数是:', di.most_common(1)[0][0])
print('其出现的次数是:', di.most_common(1)[0][1])
avg=sum(li)/len(li)# 平均值
sum_square=sum( (x -avg)**2 for xinli )# (x - 平均值) 的平方和
var= sum_square /len(li)# 方差
std = var **(1/2)# 标准差
print('\n 方差为{:8.2f}'.format(var))
print('\n 标准差为{:8.2f}'.format(std))
12. 利用随机数平均分布计算 圆周率 pi 。
原理:假定有一个边长为2的正方形,内部包含一个半径为1的圆。在正方形的范围内随机产生一个点,测试点落在圆内的概率p.
由 p= 圆面积/正方形面积= pi*1*1/(2*2) 推出pi=4p
模拟生成 1万个点,计算这些点落在圆内的概率p(提示:假定中心为原点,如果该点到原点的距离<=1,该点就在圆内),进而算出 pi
import random
ci=10000
num=0
for _ in range(ci):
x=random.random()
y=random.random()
if (x**2+y**2)<=1:# 如果到原点距离<=1
num+=1# 落在圆内的次数加 1
p=num/ci# 计算落在圆内的概率
pi=4*p# 计算 pi
print('估计的圆周率pi=',pi)
13. 打印出下列规则图形. 图形层数由键盘输入,例如输入 3,则输出图形如下:
*
***
*****
***
*
输入4,则输出图形如下:
*
***
*****
*******
*****
***
*
提示:计算好每一层 前面的空格数和中间的*数
n=int(input('请输入层数n='))
forx inrange(1,n+1):#先输出上半部分
s=' '*(n-x) + '*'*(2*x-1)# 前面的空格数 +本层的*数
print(s)
forx inrange(1,n):# 下半部分
s=' '*x + '*'*(2*(n-x)-1)
print(s)
14. 练习使用try 和 except 语句,要求用户输入的年龄必须是 20-30 间的一个整数,如果不是或输入的是字符串,则要求用户重新输入年龄。
whileTrue:
try:
age=int(input('请输入年龄(20-30):'))
if20<=age<=30:
break
except:
pass#空语句
print('输入的年龄为:',age)
==================
填空题 1 在Python中,字典和集合都是用一对大括号作为定界符,字典的每个元素由两部分组成,即键和值,其中键不允许重复。
2. 假设有列表a = ['name','age','sex']和b = ['Dong',38,'Male'],请使用一个语句将这两个列表的内容转换为字典,并且以列表a中的元素为键,以列表b中的元素为值,这个语句可以写为 c = dict(zip(a,b))。
3 假设有一个列表a,现要求从列表a中每3个元素取1个,并且将取到的元素组成新的列表b,可以使用语句 b = a[::3]。
4 使用列表推导式生成包含10个数字5的列表,语句可以写为 [5 for i in range(10)]。
5. 不可以(可以、不可以)使用del命令来删除元组中的部分元素。
6 . 使用2种不同的方法计算100以内所有奇数的和。
(1)sum(range(1,100,2)) 或sum(range(1,100)[::2])
(2)sum ([xforxinrange(100)ifx%2==1])
===================
参考网页 1. 17个新手常见Python运行时错误
http://developer.51cto.com/art/201207/351061.htm
2. 国外最大的程序员技术交流网站,可以搜寻技术难点,提问。
https://stackoverflow.com/
3. python学习的一个中文网站
http://www.runoob.com/python3/python3-tutorial.html
推荐阅读
- python的基础语法
- 通信原理|介电常数和电导率
- java|Java 中台技术盘点,这些技术你了解还远远不够
- 数学建模|数学建模之python(一)
- 笔记|初步认识机器学习(Machine Leaning)
- Python数学建模|Python数学建模入门【1】
- Python数学建模|Python数学建模入门【3】
- 学习|Python3学习
- 笔记|15天完成民猫电商毕设——消息模块收尾(12th day)