将前面几章用while循环的习题,用for循环实现,并尽量写成函数...... 以前的: chapter1-task2: 练习2:仿照实践1,写出由用户指定整数个数,并由用户输入多个整数,并求和的代码。
In [1]:
def compute_sum(n):
total = 0
for i in range(n):
m = int(input('请输入一个正整数为加数,以回车结束。 '))
total += m
return total
n = int(input('请输入一个正整数为次数,以回车结束。 '))
print ('total=',compute_sum(n))
以前的: chapter2-task4: 练习 1:仿照求$ \sum_{i=1}^mi + \sum_{i=1}^ni + \sum_{i=1}^ki$的完整代码,写程序,可求m!+n!+k!
In [2]:
def computer_sum(num):
total = 1
for i in range(1,num+1):
total *= i
return total
m = int(input('请输入第一个整数,回车结束 '))
n = int(input('请输入第二个整数,回车结束 '))
k = int(input('请输入第三个整数,回车结束 '))
print ('tatol =',computer_sum(m)+computer_sum(n)+computer_sum(k))
以前的: chapter2-task4: 练习 2:写函数可返回1 - 1/3 + 1/5 - 1/7...的前n项的和。在主程序中,分别令n=1000及100000,打印4倍该函数的和。
In [3]:
def computer_add(num):
total = 0
for i in range(num):
j = 2*i + 1
if (i+1)%2 != 0:
total += 1/j
else:
total -= 1/j
return total
m = int(input('请输入第一个整数,回车结束 '))
print ('4倍的和:tatol1 =',4*computer_add(m))
n = int(input('请输入第二个整数,回车结束 '))
print ('4倍的和:tatol2 =',4*computer_add(n))
以前的: chapter2-task4: 挑战性练习:写程序,可以求从整数m到整数n累加的和,间隔为k,求和部分需用函数实现,主程序中由用户输入m,n,k调用函数验证正确性。
In [4]:
def computer_sum(m,n,k):
for i in range(m,n):
i += k
return i
m = int(input('请输入第一个整数即m,回车结束 '))
n = int(input('请输入第二个整数即n,回车结束 '))
k = int(input('请输入第三个整数即k,回车结束 '))
print ('tatol =',computer_sum(m,n,k))
以前的: chapter2-task5: 练习 1:求n个随机整数均值的平方根,整数范围在m与k之间。
In [5]:
import random,math
def compute_sqrt(n,m,k,total,avg):
for i in range(1,n):
num = random.randint(m,k)
print ('num',i,': ',num,sep='')
total += num
avg = total/2
sqr = math.sqrt(avg)
return sqr
m = int(input('please input a smaller number '))
k = int(input('please input a bigger number '))
n = int(input('please input a number for times '))
total = 0
avg = 0
num = random.randint(m,k)
print ('num0:',num)
total += num
print (n,'个随机整数均值的平方根等于:',compute_sqrt(n,m,k,total,avg))
以前的: chapter2-task5: 练习 2:共n个随机整数,整数范围在m与k之间,求西格玛log(随机整数)及西格玛1/log(随机整数)
In [6]:
import random,math
def compute_sqrt(n,m,k):
total1 = 0
total2 = 0
for i in range(n):
num = random.randint(m,k)
print ('num',i,': ',num,sep='')
num1 = math.log(num)
num2 = 1/math.log(num)
total1 += num1
total2 += num2
i += 1
print ('西格玛log总和为:',total1,'\n西格玛1/log总和为:',total2)
return
m = int(input('please input a smaller number '))
k = int(input('please input a bigger number '))
n = int(input('please input a number for times '))
compute_sqrt(n,m,k)
以前的: chapter2-task5: 练习 3:写函数,求s=a+aa+aaa+aaaa+aa...a的值,其中a是[1,9]之间的随机整数。 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘输入。
In [7]:
import random,math
def compute(n,a):
b = a
total = a
for i in range(n-1):
b = b*10+a
total += b
print ('total:',total)
return
a = random.randint(1,9)
print ('a:',a)
n = int(input('please input a number for times '))
print ('n:',n)
compute(n,a)
6.8 习题: 写函数,返回一个list中所有数字的和
In [8]:
def compute_sum(numbers):
numTotal = 0
for num in numbers:
numTotal += num
print ('numTotal:',numTotal)
numbers = [i for i in range(1,10)]
compute_sum(numbers)
6.8 习题: 写函数,返回一个list中的最小值
In [9]:
def compute_min(numbers):
min = numbers[0]
for num in numbers:
if num < min:
min = num
print ('Min:',min)
return
numbers = [i for i in range(1,10)]
compute_min(numbers)
6.8 习题: 写函数,返回某个元素/对象在一个list中的位置,如果不在,则返回-1.
In [11]:
def compute_pos(numbers):
n = int(input('please input a number: '))
num = 0
for i in range(len(numbers)):
if numbers[i] == n :
print ('pos:',i+1)
break
num += 1
if num >= len(numbers):
print ('pos:',-1)
numbers = [i for i in range(1,10)]
print (numbers)
compute_pos(numbers)
6.8 习题: 写函数,可求两个向量的夹角余弦值,向量可放在list中。主程序调用该函数。
In [12]:
def compute_cos():
vector_frt = []
vector_sec = []
for i in range(2):
print ('请输入第',i+1,'个向量的坐标')
x = int(input('请输入x坐标: '))
y = int(input('请输入y坐标: '))
if i == 0:
vector_frt.append(x)
vector_frt.append(y)
else:
vector_sec.append(x)
vector_sec.append(y)
print ('vector1: [',vector_frt[0],',',vector_frt[1],']',sep = '')
print ('vector2: [',vector_sec[0],',',vector_sec[1],']',sep = '')
vect_a = math.sqrt(vector_frt[0]*vector_frt[0] + vector_frt[1]*vector_frt[1])
vect_b = math.sqrt(vector_sec[0]*vector_sec[0] + vector_sec[1]*vector_sec[1])
vect_ab = vector_frt[0]*vector_sec[0] + vector_frt[1]*vector_sec[1]
vect_cos = vect_ab/(vect_a*vect_b)
print ('两个向量的夹角余弦值为:',vect_cos)
compute_cos()
6.8 习题: 挑战性习题:python语言老师为了激励学生学python,自费买了100个完全相同的Macbook Pro,分给三个班级,每个班级至少分5个,用穷举法计算共有多少种分法?
In [1]:
def compute_counts():
num = 0
for i in range(5,100):
for j in range(5,100):
for k in range(5,100):
if i+j+k == 100:
num += 1
#print (i,j,k,sep = '--')
print ('total:',num)
compute_counts()