计算机导论第五次作业 (Past)

10205102406 edited 3 年,5 月前

This is a past version of blog 计算机导论第五次作业

对所有编程的题目, 请同学们把你的代码拷贝到你的报告word中,并将程序的运行结果截图粘贴到代码下方。有问题可以问TA或其他同学。请有编程经验的同学多帮助别人,但是不是让他们直接拷贝程序。

1、(10 points)《编程导论》 习题3.1. 假设起始res=0

def add(a,b):
   return a+b
 print("最终结果为:",add(2,3))

avatar

2、(10 points)《编程导论》 习题3.3.

会输出8

d是局部变量

3、(10 points)《编程导论》 习题3.4.

先赋值全局变量a,b,c

在do_add中c被改变为5

在do_mul中c被改变为16

在do_mul中打印16,返回到do_sub中

在do_sub中,传入do_div输出8.0并返回,输出8.0,返回到do_add

在do_add中输出8.0并返回

在函数外输出8.0

4、(10 points)《编程导论》 习题3.5.

先赋值全局变量a,b,c

在do_mul中c被改变为16

在do_mul中打印16,返回到do_sub中

在do_sub中,传入do_div输出8.0并返回,输出8.0,返回到do_add

在do_add中输出8.0并返回

在函数外输出16

5、(10 points)《编程导论》 习题3.6.

a,b是全局变量,b传参给fun中局部变量x,并将局部变量y赋值为12,修改局部变量x值为x+2,修改全局变量a的值为F(),在F()中全局变量a被赋值为fun中局部变量x(4)与y(12)以及全局变量b(2)的和(18),并将a返回赋值给a,所以最终打印结果中显示a=18,b=2。

6、(20 points)这题可以两人合作,写下合作同学的名字及学号。请同学们把你的代码拷贝到word报告中,并将程序的运行结果截图粘贴到代码下方。

书本3.4.2中的第二部分:使用三种不同方法删除列表元素的执行时间,现在我们要删除的是字符串的元素。请同学分析三种方法的执行时间和优劣。

首先完成一个函数remove(s.x):删除字符串s中第一次出现的x

def remove(s,x):

for i in range(len(s)):

if s[i]==x: return(s[:i]+s[i+1:])

return (s)

仿照书本的三种方法,完成removeall(s.x)函数:返回一个字符串是s删除所有出现的x,做实验测试执行时间:

s=”1”*1000000+”0”*1000

//时间开始

a=removeall(s,”0”)

//时间结束

print (len(a)) //不要直接打印a, 因为a太长了

import time

def remove(s,x):
    for i in range(len(s)):
        if s[i]==x:  return(s[:i]+s[i+1:])
    return (s)

def removeall1(s,x):
    while x in s:
        s = remove(s,x)
    return s

def removeall2(s,x):
    i=0
    while i < len(s):
        if s[i] == x: s = remove(s,x)
        else: i+=1
    return s

def removeall3(s,x):
    s1 = ""
    for i in s:
        if i!=x:s1+=i
    return s1

s="1"*1000000+"0"*1000

start = time.process_time()
a=removeall1(s,"0")
elapsed = time.process_time()-start
print(len(a))
print(elapsed)

start = time.process_time()
a=removeall2(s,"0")
elapsed = time.process_time()-start
print(len(a))
print(elapsed)

start = time.process_time()
a=removeall3(s,"0")
elapsed = time.process_time()-start
print(len(a))
print(elapsed)

avatar

时间如上

第一种方法比较直观,但是慢

第二种方法既不直观也没快多少

第三种方法直观且快但是使用了新的变量来保存

7、(10 points)《编程导论》 习题3.14

打印结果是改变后的L与原L中偶数之和

代码修改如下

def Sum(L):
    mysum = 0
    i = len(L)-1
    while i >= 0:
        if L[i]%2 == 0:
            mysum += L[i]
        i = i-1
    return mysum

L = [2,2,3,4,5]
mysum = Sum(L)
print(L,mysum)

avatar

8、(10 points)《编程导论》 习题3.15

avatar

运行前默认参数分别为:

[1,2]

[1,2,0]

[1,2,0]

[1,2,0]

9、(10 points)《编程导论》 习题3.16

L = ["%d * %d = %d" %(x,y,x*y) for x in range(1,10) for y in range(x,10)]
print(L)

avatar

制作者:姜博远