20170728学习日报-第三章函数练习题

1、打印2000-3000之间被7整除但不被5整除的数,以,(逗号)分隔

a = ”
for i in range(2000,3001):
if i%7==0 and i%5!=0:
a += str(i)+’,’
b = a.strip(‘,’)
print(“2000-3000之间被7整除但不被5整除的数为:%s”%b)

执行结果:
2000-3000之间被7整除但不被5整除的数为:2002,2009,2016,2023,2037,2044,2051,2058,2072,2079,2086,2093,2107,2114,2121,2128,2142,2149,2156,2163,2177,2184,2191,2198,2212,2219,2226,2233,2247,2254,2261,2268,2282,2289,2296,2303,2317,2324,2331,2338,2352,2359,2366,2373,2387,2394,2401,2408,2422,2429,2436,2443,2457,2464,2471,2478,2492,2499,2506,2513,2527,2534,2541,2548,2562,2569,2576,2583,2597,2604,2611,2618,2632,2639,2646,2653,2667,2674,2681,2688,2702,2709,2716,2723,2737,2744,2751,2758,2772,2779,2786,2793,2807,2814,2821,2828,2842,2849,2856,2863,2877,2884,2891,2898,2912,2919,2926,2933,2947,2954,2961,2968,2982,2989,2996

2、输出9*9口诀表
b = ”
for i in range(1,10):
for j in range(1,i+1):
b += str(j)+’x’+str(i)+’=’+str(j*i)+(3-len(str(j*i)))*’ ’
c = b.strip(’ ‘)
print(c)
b = ”

执行结果:
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

3、计算1 - 1/2 + 1/3 - 1/4 + … + 1/99 - 1/100 + …直到最后一项的绝对值小于10的-5次幂为止

result = 0
for i in range(1,pow(10,5)):
b = 1/i
if i%2 == 0:
result -= b
else:
result += b
print(“1 - 1/2 + 1/3 - 1/4 + … + 1/99 - 1/100 + …=%f”%result)

执行结果:
1 - 1/2 + 1/3 - 1/4 + … + 1/99 - 1/100 + …=0.693152

4、编程将类似“China”这样的明文译成密文,密码规律是:用字母表中原来
的字母后面第4个字母代替原来的字母,不能改变其大小写,如果超出了字母
表最后一个字母则回退到字母表中第一个字母

s = input(“请输入明文:”)
code = ”

for i in s:
b = ord(i)
if 65<=b<=86 or 97<=b<=118:
c = chr(b+4)
else:
c = chr(b-26+4)
code += str(c)
print(“%s的密文为:%s”%(s,code))

执行结果:
请输入明文:China
China的密文为:Glmre

请输入明文:ZOzo
ZOzo的密文为:DSds

5、输出以下如下规律的矩阵
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20

for i in range(1,5):
b1 = 1*i
b2 = 2*i
b3 = 3*i
b4 = 4*i
b5 = 5*i
b = str(b1)+(8-len(str(b1)))’ ‘+str(b2)+(8-len(str(b2)))’ ‘+str(b3)+(8-len(str(b3)))’ ‘+str(b4)+(8-len(str(b4)))’ ‘+str(b5)
print(b)
b1 = b2 = b3 = b4 = 0

执行结果:
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20

第三章练习题:
6、对一个列表求和,如列表是[4, 3, 6],求和结果是 [4, 7, 13],每一项的值
都等与该项的值加上前一项的值
lista = [4,3,5,7,8]
listb = []
for i in range(len(lista)):
if i == 0:
listb.append(lista[i])
else:
listb.append(lista[i]+listb[i-1])
print(listb)

执行结果:
[4, 7, 12, 19, 27]

7、一个字符串 list,每个元素是 1 个 ip,输出出现次数最多的 ip
第一种用字典的方式:
listip = [‘51.1.2.3’,’51.1.2.13’,’51.1.2.13’,’51.1.2.3’,’51.1.2.3’,’51.1.2.23’,’51.1.2.3’,’51.1.23.3’,’51.1.27.3’,’51.1.25.3’,’51.1.2.3’,’51.1.21.3’,’51.1.2.3’,’51.11.2.3’,’51.14.2.31’]
d = {}
for k in range(len(listip)):
i = 0
for v in range(0,len(listip)):
if listip[k] == listip[v]:
i = i+1
d[listip[k]] = i
print(d)

print(“出现次数最多的ip为:%s”%(sorted(d,key=lambda x:d[x])[-1]))

执行结果:
{‘51.1.2.3’: 6, ‘51.1.2.13’: 2, ‘51.1.2.23’: 1, ‘51.1.23.3’: 1, ‘51.1.27.3’: 1, ‘51.1.25.3’: 1, ‘51.1.21.3’: 1, ‘51.11.2.3’: 1, ‘51.14.2.31’: 1}
出现次数最多的ip为:51.1.2.3

第二种多个循环方式:
listip = [‘51.1.2.3’,’51.1.2.13’,’51.1.2.13’,’51.1.2.3’,’51.1.2.3’,’51.1.2.23’,’51.1.2.3’,’51.1.23.3’,’51.1.27.3’,’51.1.25.3’,’51.1.2.3’,’51.1.21.3’,’51.1.2.3’,’51.11.2.3’,’51.14.2.31’]
lista = []
listb = []

for i in listip:
if i not in lista:
lista.append(i)

for j in range(len(lista)):
count = listip.count(lista[j])
listb.append(count)
count_max = max(listb)

for k in range(len(listb)):
if listb[k] == count_max:
print(“出现次数最多的ip为:%s,次数为:%d”%(lista[k],count_max))

执行结果:
出现次数最多的ip为:51.1.2.3,次数为:6

8、打印100以内的素数
素数概念:一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做素数
a = []
b = []
c = []
for i in range(2,101):
a.append(i)
for j in range(2,i):
if i%j == 0:
b.append(i)
continue

for j in a:
if j not in b:
c.append(j)
print(“100以内的素数为%s”%str(c))

执行结果:
100以内的素数为[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

9、实现一个简易版的计算器,功能要求:加、减、乘、除,支持多数同时进行计算

def add(x,y):
return x+y
def reduce(x,y):
return x-y
def multi(x,y):
return x*y
def devision(x,y):
return x/y

while 1:
symbol = input(“请输入运算符号:”)
x = int(input(“请输入数字:”))
y = int(input(“请输入数字:”))

if symbol == '+':
    add(x,y)
    print("%d与%d的和为:%s"%(x,y,str(x+y)))

elif symbol == '-':
    reduce(x,y)
    print("%d与%d的差为:%s"%(x,y,str(x-y)))

elif symbol == '*':
    multi(x,y)
    print("%d与%d的乘为:%s"%(x,y,str(x*y)))

elif symbol == '/':
    devision(x,y)
    print("%d与%d的商为:%s"%(x,y,str(x/y)))

else:
    print("输入的运算符号不存在,退出程序!")
    break

执行结果:
请输入运算符号:+
请输入数字:1
请输入数字:5
1与5的和为:6
请输入运算符号:*
请输入数字:2
请输入数字:3
2与3的乘为:6
请输入运算符号:-
请输入数字:3
请输入数字:1
3与1的差为:2
请输入运算符号:/
请输入数字:3
请输入数字:4
3与4的商为:0.75
请输入运算符号:0
请输入数字:3
请输入数字:4
输入的运算符号不存在,退出程序!

10、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和

a = 1
b = 2
sum = 0
t = 0
s = ”
for i in range(1,21):
s += str(b)+’/’+str(a)+’+’
sum += b/a
t = a
a = b
b = t + b

print(“%s的和为%s”%(str(s.strip(‘+’)),str(sum)))

执行结果:
2/1+3/2+5/3+8/5+13/8+21/13+34/21+55/34+89/55+144/89+233/144+377/233+610/377+987/610+1597/987+2584/1597+4181/2584+6765/4181+10946/6765+17711/10946的和为32.66026079864164
第三章练习题:
11、画等(腰)边三角形(实心、空心)
rows = int(input(‘输入列数: ‘))
print(“打印空心等边三角形”)
for i in range(0, rows + 1): #变量i控制行数
for j in range(0, rows - i): #(1,rows-i)
print(” “,end=”)

for k in range(0, 2 * i - 1):   #(1,2*i)
    if k == 0 or k == 2 * i - 2 or i == rows:
        if i == rows:
            if k % 2 == 0:      #因为第一个数是从0开始的,所以要是偶数打印*,奇数打印空格
                print("*",end='')
            else:
                print(" ",end='')#注意这里的",end=''"可以起到不换行的作用
        else:
            print("*",end='')
    else:
        print(" ",end='')
print("\n")

执行结果:
输入列数: 5
打印空心等边三角形

*
  • *

    • *

    • *


rows = int(input(‘输入列数: ‘))
print(“打印实心等边三角形”)
for i in range(0, rows + 1):
for j in range(0, rows - i):
print(” “,end=”)

for k in range(0, 2 * i - 1):   
    print("*",end='')
print("\n")

执行结果:
输入列数: 5
打印实心等边三角形

*




12、画倒等边三角形
rows = int(input(‘输入列数: ‘))
print(“打印倒三角形”)
for i in range(rows + 1,0,-1): #变量i控制行数
for j in range(rows - i,0,-1): #(1,rows-i)
print(” “,end=”)

for k in range(0, 2 * i - 1):   #(1,2*i)
    print("*",end='')
print("\n")

执行结果:
输入列数: 5
打印倒三角形






*

13、画直角三角形(实心、空心)
rows = int(input(‘输入列数: ‘))
print(“直角三角形实心”)
for i in range(0, rows):
for k in range(0, rows - i):
print(” * “,end=”) #注意这里的”,”,一定不能省略,可以起到不换行的作用
print(“\n”)

执行结果:
输入列数: 5
直角三角形实心




    • *
  • *

14、用*号输出字母C的图案
print(‘ 10)
for i in range(5):
print(‘* ‘)
print(‘ 10)

执行结果:






第三章练习题目
15、打印N,口,H图案

-- coding=UTF-8 --

print(“打印N图案”)
rows = int(input(“请输入行数:”))
for i in range(rows):
print(” * “,end=”)
for j in range(1,rows):
if j == rows-1 or j == i:
print(” * “,end=”)
else:
print(” “,end=”)
print(” “)
执行结果:

打印N图案
请输入行数:5
* *
* * *
* * *
* * *
* *

打印N图案
请输入行数:10
* *
* * *
* * *
* * *
* * *
* * *
* * *
* * *
* * *
* *

-- coding=UTF-8 --

print(“打印口图案”)
rows = int(input(“请输入行数:”))
for i in range(rows):
print(” * “,end=”)
if i == 0 or i == rows-1:
for j in range(1,rows):
print(” * “,end=”)
else:
for k in range(1,rows):
if k == rows-1:
print(” * “, end=”)
else:
print(” “, end=”)
print(” “)

执行结果:

打印口图案
请输入行数:5




打印口图案
请输入行数:4




-- coding=UTF-8 --

print(“打印H图案”)
rows = int(input(“请输入行数:”))
for i in range(rows):
print(” * “,end=”)
if i == int(rows/2):
for j in range(1,rows):
print(” * “,end=”)
else:
for k in range(1,rows):
if k == rows-1:
print(” * “, end=”)
else:
print(” “, end=”)
print(” “)

执行结果:

打印H图案
请输入行数:5
* *
* *


打印H图案
请输入行数:6
* *
* *
* *


16、打印出如图所示的杨辉三角形,要求可以自定义行数
def createL(l): # 生成杨辉三角的一行
L = [1]
for x in range(1, len(l)):
L.append(l[x] + l[x - 1])
L.append(1)
return L

def printL(L, W): # 打印
s = “”
for x in L:
s += str(x) + ” ”
print(s.center(W))

L = [1]
row = int(input(“输入行数:”))
width = row * 4 # 设置打印宽度
for x in range(row):
printL(L, width)
L = createL(L)

执行结果:
输入行数:10
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1

17、打印如图所示图案,要求支持指定行数,但行数必须是奇数行
rows = int(input(“请输入行数,行数需为奇数:”))
t = 1
for i in range(0,rows):
print(” * “,end=”)
if i <= int(rows/2):
for j in range(1,t):
print(” * “,end=”)
t += 2
elif i > int(rows/2):
t -= 4
for k in range(1,t):
print(” * “, end=”)
t += 2
print(” “)

执行结果:
请输入行数,行数需为奇数:7
*






  • *

请输入行数,行数需为奇数:11
*










  • 第三章课件学习
    自己编写函数时,需要注意的几点:
    注意1:定义默认参数要牢记一点:默认参数必须指向不变对象!
    举例:
    def add_end(L=[]):
    L.append(‘END’)
    return L

print (add_end([‘x’, ‘y’, ‘z’])) #调用正常
print (add_end())#调用正常
print (add_end())#调用不正常
print (add_end())#调用不正常

执行结果:
[‘x’, ‘y’, ‘z’, ‘END’]
[‘END’]
[‘END’, ‘END’]
[‘END’, ‘END’, ‘END’]

修改函数:
def add_end(L=None):
if L is None:
L = []
L.append(‘END’)
return L

print (add_end([‘x’, ‘y’, ‘z’])) #调用正常
print (add_end())#调用正常
print (add_end())#调用正常
print (add_end())#调用正常

执行结果:
[‘x’, ‘y’, ‘z’, ‘END’]
[‘END’]
[‘END’]
[‘END’]

coding=utf-8

def my_abs(x):
if not isinstance(x,(int,float)):
raise TyeError(‘bad operate type’)
if x >= 0:
return x
else:
return -x

print(my_abs(1))
print(my_abs(-1))
print(my_abs(-1.5))
print(my_abs(‘abc’))

注意2:传参时命名参数必须在非命名参数的后面,否则就会报SyntaxError:
non-keyword arg after keyword arg的错误.

举例:
def sum(a,b,c):
return a*100+b*10+c

print(sum(a=3,1,2))

执行结果:
print(sum(a=3,1,2))
^
SyntaxError: positional argument follows keyword argument

正确:
def sum(a,b,c):
return a*100+b*10+c

print(sum(3,c=1,b=2))

执行结果:
321

注意3:函数完成计算后,可以返回一个值或一个对象,函数执行完毕也没有return
语句时,自动return None

注意4:在函数或者类中,使用pass语句,表示一个空的语句块,仅作为占位,执行后并没有任何效果,可以用于定义待开发的函数或类

注意5:习惯使用文档字符串
DocStrings是一个重要的工具,由于它帮助你的程序文档更加简单易懂,你应该尽量使用它
举例:

-- coding: utf-8 --

def sum(operandA,operandB):
”’主要用于两数相加”’
return float(operandA)+float(operandB)
print (“10+5=”,sum(10,5))
print (sum.doc)

执行结果:
10+5= 15.0
主要用于两数相加

常用的函数:
1.Lambda 函数
描述:Lambda语句被用来创建新的函数对象,并且在运行时返回它们
1)Python使用lambda关键字来创建匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
2)ambda只是一个表达式,函数体比def简单很多
3)Lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去
4)Lambda函数拥有自己的名字空间,且不能访问自由参数列表之外全局名字空间里的参数。
5)虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数。后者的目的是调用小函数时不占用栈内存从而增加运行效率。
Lambda会返回一个函数对象,但这个对象不会赋给一个标识符,而def则会把函数对象赋值给一个变量(函数名)。
6)像if或for或print等语句不能用于lambda中。
7)Lambda函数不能共享给别的程序调用,def定义的函数可以

举例:
g = lambda x:x-1
print(g(1))
print(g(2))

执行结果:
0
1

g = lambda x,y,z:x*y-z
print(g(1,2,3))
print(g(2,3,5))

执行结果:
-1
1

lambda表达式会返回一个函数对象,如果没有变量接受这个返回值,它很快就会被丢弃,也正是由于lambda只是一个表达式,所以它可以直接作为list、dict等的成员。

举例:

-- coding: UTF-8 --

list_a = [lambda a: a**3, lambda b:b**3]
print (list_a[0])
g = list_a[0]
print(g(2))

执行结果:

-- coding: UTF-8 --

print (“计算字符串中有效的表达式,并返回结果”)
res1 = eval(‘pow(2,2)’)
print (res1)
add = eval(‘2 + 2’)
print (add)
n = 14
res2 = eval(“n + 4”)
print (res2)
print (“将字符串转成相应的对象(如list、tuple、dict和string之间的转换)”)
a = “[[1,2], [3,4], [5,6], [7,8], [9,0]]”
b = eval(a)
print(b)
a = “{1:’xx’,2:’yy’}”
c = eval(a)
print (c)
a = “(1,2,3,4)”
d = eval(a)
print(d)
print(“将反引号引起的对象再反转回对象”)
list1 = [1,2,3,4,5]
print(type(repr(list1)))
print(type(eval(repr(list1))))
a = eval(repr(list1))
print(a)

执行结果:
计算字符串中有效的表达式,并返回结果
4
4
18
将字符串转成相应的对象(如list、tuple、dict和string之间的转换)
[[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
{1: ‘xx’, 2: ‘yy’}
(1, 2, 3, 4)
将反引号引起的对象再反转回对象

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值