python练习

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次投掷36的实验,算平均次数

    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('投出36所需的平均投掷次数:',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

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值