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中与、或、非的运算符是什么?
and or not
4.试写出python中条件语句的一般结构,循环语句for /while 的一般结构。
if 条件:
语句块1
else:
语句块2
for x in range(10):
循环语句块
while 条件:
循环语句块
5. break 和 continue 语句有何区别?
break :在循环语句内部使用,用于直接跳出循环
continue :在循环语句内部使用,用于结束本次循环,开始下一次的新循环
for x in range(1, 11):
if x%2==0:
break # 直接跳出循环
print(x)
上面的程序段将只输出1
for x in range(1, 11):
if x%2==0:
continue # 结束本次循环(不再执行后续语句),重新开始下一次循环
print(x)
上面的程序段将输出1 3 5 7 9
6.如何调用一个模块中的函数?例如有模块 m05, 其中有一个函数mysqrt.
应先引入该模块, 语法为 import 模块
import m05
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) for x in range(97, 97+26)) # 97是'a'的 ascii码
13、查询'A', 'b', '\n' 的 ASCII码。 查询“中文”的unicode 编码,并转为对应的utf-8编码。
ord('A') ; ord('b') ; ord('\n')
for x in '中文':
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. 输入直角三角形的两条直角边长,求斜边长
import math # 为了使用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 题改写为函数
def gtokg(x): # 克转为千克的函数
return x/1000
test=[ 100, 5000, 1234] # 用列表构造几个测试数据
for x in test: # 依次取出列表中的数据 进行测试
print('{0}g={1}kg'.format(x, gtokg(x)))
将第2 题改写为函数
import math
def xiebian(a,b): #计算斜边的函数
return math.sqrt(a*a + b*b)
test=[ (3,4), (5,12) ] # 构造两个测试数据, 计算直角边为3,4 和 5, 12
for a, b in test: # 每次取出一个元组,例如(3,4) , 分别赋值给 a, b
print('a={0}, b={1}, c={2}'.format(a,b,xiebian(a,b)))
4. 输出1-100内 的偶数
方法1
for x in range(1,101):
if x%2==0:
print(x)
方法2
for x in range(2,101,2): # 从2开始,并将步长设为 2
print(x)
5. 投资复利计算器。假定你初始投资 1 万元, 每年收益 12%,每年的收益继续投资。 试输出投资1- 60 年每年的资金总额。
注:巴菲特复利是20.12%, 投资60年。
amount=10000
rate=0.12
years=60
print('year money')
for x in range(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)
def invest(amount, rate, years):
return round( 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 # 华氏 转 摄氏
def FtoC(f):
return round( (f-32)*5/9 ,1) #转换结果保留1位小数
test=[100, 120, 0] # 用列表构造3个测试数据
for x in test: # 依次取出每个数据,进行测试
print('{0}F={1}C'.format(x,FtoC(x)))
8. 编写根据半径求圆的周长 和 圆的面积的两个函数。
import math
def circleround(r):
return 2*math.pi*r
def circlearea(r):
return math.pi*r*r
9.输入正整数n, 输出其所有因子。
例如输入24, 应输出 2, 3, 4, 6, 8 ,12。
n=input('n=')
n=int(n) # 将字符串n 转为 整数 n
li=[ ] # 先设一个空列表, 用于容纳因子
for x in range(2, n//2+1):
if n%x==0:
li.append(x) # 如果能整除,则将因子添加到列表中
print(n , '的因子为:', li)
10.编程输出三角函数表的部分。横向是3个列,纵向是0度到45度,每次递增1度.
如下表.数据精度保留小数点后面3位。
sin cos tan
0 0.000 1.000 0.000
1
2
..
30 0.500 0.866 0.577
..
45 0.707 0.707 1.000
注意计算时要转换为弧度.可以用如下两种方式转换
cos(30) = math.cos(30/360*2*math.pi)
cos(30) = math.cos(math.radians(30))
#从math库中直接引入所需的三角函数。这样可只写sin, 不用写为math.sin
from math import sin, cos, tan, radians
print( 'x sin cos tan ')
for x in range(46):
rad= radians(x) # 将角度转为弧度
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间的整数,将其按从小到大 和 从大到小 两种顺序分别输出。
import random # 先引入随机数模块
li=[random.randint(1,100) for x in range(20)] #用列表生成式, 生成20个随机数
print('原始顺序', li)
li.sort() # 排序,默认是从小到大
print('从小到大', li)
li.sort(reverse=True) # reverse=True 表示要逆序, 按从大到小
print('从大到小', li)
12. 编写程序,每次随机生成20个 1-100间的整数,然后
(1)分别输出其奇数下标和偶数下标的数据。
(2)输出平均数,并统计超过平均数的数据有多少个,小于平均数的数据有多少个。
import random # 先引入随机数模块
li=[random.randint(1,100) for x in range(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
for x in li:
if x>=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 |
def fun(x):
if x<0:
return 0
elif x<5:
return x
elif x<10:
return 3*x -5
elif x<20:
return 0.5*x -2
else:
return 0
test=[-1, 2, 5, 6, 11, 21] # 构造几个测试数据
for x in test:
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个元素降序排列,并输出结果。
import random
li=[random.randint(1,50) for x in range(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个随机整数,每行一个数据。
import random
f=open('data.txt', 'w') # 以w写入方式打开文件
for x in range(10):
f.write(str(random.randint(1,100))+'\n') #整数转字符串并加上 \n(换行) , 写入文件
f.close() # 记得,一定要关闭文件
18. 编写程序,读取上题的 data.txt , 将文件中的数据累加求和。
s=0
f=open('data.txt', 'r') # 以 r 读的方式打开文件
for x in f:
line=f.readline().strip() # 每次读一行, strip是去掉字符串两边可能含有的空白字符
if line!='': # 该行非空,表示有数据
s = s+ int(line) # 转为整数, 累加
f.close()
print('和为:', s)
19. 编写函数,判断一个整数是否为素数,并编写主程序调用该函数。
def isprimenumber(n): # 素数返回True; 非素数返回False
if n<2:
return False
for x in range(2,int(n**(1/2))+1):
if n%x==0:
return False
return True
li=[0,1, 2, 3, 5, 6, 7, 8, 13, 100]
for x in li :
if isprimenumber(x):
print( x, '是质数')
else:
print( x, '不是质数')
20. 任意输入一个英文字符串,统计其中的 大写、小写、数字、其它字符的个数。
import string
s=input('请输入字符串(含大小写字母,数字,符号等):')
capital = 0
lowercase = 0
digit = 0
other = 0
for c in s:
if c.isupper(): #判断是否是大写字母
capital+=1
elif c.islower(): #小写
lowercase+=1
elif c.isdigit(): #数字
digit+=1
else: # 其它
other+=1
print ('大写:{0}, 小写:{1}, 数字:{2}, 其它:{3}'.format(capital,lowercase,digit,other))
注: 上面的判断也可用如下语句
for c in s:
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(x for x in li if x>0))
print('支出为:', sum(x for x in li if x<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
for index , x in enumerate(Gender): # 产生: 序号 数据
if x=='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=[ x for x in li if x[0]=='f'] #女性
male=[ x for x in li if x[0]=='m'] #男性
print('男性平均看电视时间:', sum( x[1] for x in male)/len(male))
print('女性平均看电视时间:', sum( x[1] for x in female)/len(female))
方法三
from itertools import compress
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' for x in Gender] # 得到True/False构成的列表, True对应 'm'
f=[x=='f' for x in Gender]
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位小数。
from math import log2, log, log10
print('x log2 log(e) log10')
for x in range(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次后该角色的属性值。
本例练习字典的使用
import random
role={'force':100 , 'health':50 , 'energy':200} # 构造一个字典
for x in range(10):
for key in role.keys(): # 遍历其三个属性
role[key]+= random.randint(-3,10) # 对属性进行随机修改
print('运行10次后, role= ', role)
1. 用文件的形式保存你班上同学的姓名和手机号码。每次输入某个同学的姓名和手机号码,将其添加到 tel.txt 文件中。
f=open('tel.txt','a') # a 添加模式
while True:
name=input('姓名=')
if name=='':break # 姓名为空则跳出循环
mobile=input('手机号=')
f.write(name+' '+mobile+'\n') #写入文件
f.close() #关闭文件
2. 读取上例 tel.txt 文件, 先输出全部同学的姓名和手机号码。然后可以输入一个姓名,查询对应的手机号码。
tel={ } #空字典,用于容纳电话号码表
f=open('tel.txt','r') # r 读模式
for s in f:
li=s.split() #读一行,分解, li[0]姓名, li[1]电话
tel[li[0]]=li[1] # 存入字典中
f.close()
print('电话号码表如下:', tel)
while True:
name=input('要查询的姓名=')
if name=='':break # 姓名为空则跳出循环
if name in tel:
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 读模式
for s in f:
li=s.split() #读一行,分解, li[0]姓名, li[1]电话
if len(li[1])!=11:continue # 号码不是 11位长
phone=li[1][:3] # 取号码前3位
if mobile.find(phone)>=0:
num['移动'] +=1
elif unicom.find(phone)>=0:
num['联通'] +=1
elif telecom.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 文件夹已存在
for k in range(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
for k in range(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=[ ]
for x in range(100): # 做100次投掷3个6的实验,算平均次数
num=0
while True:
x=random.randint(1,6)
y=random.randint(1,6)
z=random.randint(1,6)
num+=1
if x==6 and y==6 and 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=[ ]
while True:
s=input('请输入 学号,姓名,入学分数=') # 三个数据项输入时应逗号分开
if s=='':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个数中?
本题可利用集合完成。
from collections import Counter
import random
li=[random.randint(1,1000) for x in range(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='!.;,$%\"\':' # 标点符号列表
with open('Walden.txt') as file: # with 是另一种使用文件的语法
for line in file:
for x in signs:
line=line.replace(x,' ') # 将标点符号都用 空格替换
li=[x.lower() for x in line.strip().split()] #每次一行,按空格分隔得到单词,单词都转小写
words.extend(li) #加入到单词总表中
print('\n总单词数:',len(words))
from collections import Counter
di=Counter(words)
print('\n共有不同的单词数:',len(di))
print('\n出现最多的10个单词是:')
for k,v in di.most_common(10):
print('{0:10s} {1}'.format(k,v))
print('\n出现最少的10个单词是:')
for k,v in di.most_common()[-10:]: #先全部排,然后从倒数第10个开始取到末尾
print('{0:10s} {1}'.format(k,v))
10. 使用 Python 编写一个生成由4个大写字母构成的随机验证码函数,例如 BXAM, XYMZ 等。然后你的程序调用这个函数,生成一个验证码并输出,要求用户再输入这个验证码,检查输入是否正确。
import random
def verifify_code():
letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
key=random.sample(letters,4) # sample是取样,从letters中取4个,返回一个列表
return ''.join(key) # 将列表元素连接为一个字符串返回
code=verifify_code()
print('验证码为:', code)
s=input('请输入上面的验证码:')
if code==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)
if length%2==0: # 数据个数为偶数个
median=(li2[length//2-1]+li2[length//2])/2 # 则中位数是中间两个数的平均值
else:
median=li2[length//2]
print('\n 中位数为:', median)
from collections import Counter
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 x in li ) # (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='))
for x in range(1,n+1): #先输出上半部分
s=' '*(n-x) + '*'*(2*x-1) # 前面的空格数 + 本层的*数
print(s)
for x in range(1,n): # 下半部分
s=' '*x + '*'*(2*(n-x)-1)
print(s)
14. 练习使用try 和 except 语句,要求用户输入的年龄必须是 20-30 间的一个整数,如果不是或输入的是字符串,则要求用户重新输入年龄。
while True:
try:
age=int(input('请输入年龄(20-30):'))
if 20<=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 ([x for x in range(100) if x%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