day5 作业
一、基础
1、读程序,总结程序的功能:
numbers=1
for i in range(0,20):
numbers *= 2
print(numbers)
答案:分解程序:功能:2的20次方。
i = 1 numbers = number *2 = 1*2 =2**1
i = 2 numbers = number *2 = 2*2 =2**2
i = 3 numbers = number *2 = 4*2 =2**3
....
i = 4 numbers = number *2 2**20
2、读程序,总结程序的功能:
summation=0
num=1
while num<=100:
if (num%3==0 or num%7==0) and num%21!=0:
summation += 1
num+=1
print(summation)
答案:功能:
num = 1;取值范围[1,100]
求和条件:满足能被3或者7整除,但是不能被21整除的值、
功能:求出1(包含)-100(包含)能被3或者7整除,但不能被21整除的个数。
编程实现(for和while各写⼀遍):
3. 求1到100之间所有数的和、平均值
答案 for循环
sum1 = 0
count = 0
for num2 in range(1,101):
sum1 += num2
count +=1
ave = sum1 / count
print("和为",sum1,"平均值为"+str((ave)))
答案:while循环
sum2 = 0
i = 1
count = 0
while i <= 100:
sum2 += i
i = i+1
count +=1
ave = sum2 / count
print("和为",sum1,"平均值为"+str((ave)))
4、. 计算1-100之间能3整除的数的和
答案 for循环
sum1 = 0
for i in range(101):
if i % 3 ==0:
sum1 +=i
i = i+1
print(sum1)
答案:while循环
num = 1
sum1 = 0
while num <=100:
if num %3 ==0:
sum1 += num
num +=1
print(sum1)
5、 计算1-100之间不能被7整除的数的和
答案:for循环
sum2 = 0
for i in range(101):
if not(i % 7 == 0):
sum2 +=i
i +=1
print(sum2)
sum2 = 0
for i in range(101):
if i % 7 != 0:
sum2 +=i
i += 1
print(sum2)
答案:while循环
sum3 = 0
num = 1
while num <= 100:
if not (num % 7 ==0):
sum3 +=num
num += 1
print(sum3)
sum3 = 0
num = 1
while num <= 100:
if num % 7 !=0:
sum3 +=num
num += 1
print(sum3)
二、稍微困难
6 求斐波那契数列中第n个数的值:1,1,2,3,5,8,13,21,34....
答案:列表操作
n = int(input("你想知道第几位的斐波那契数列值?请输入:"))
before1 = 1
before2 = 1
count = 2
a = []
if n==1:
print("第%d位" % n + "的斐波那契数列是" + "1")
elif n == 2:
print("第%d位" % n + "的斐波那契数列是" + "1")
else:
a.append(before1)
a.append(before2)
current3 = before1 + before2
a.append(current3)
while True:
bb = int(a[-1])+int(a[-2])
a.append(bb)
print(a)
count +=1
if n == count:
break
print("第%d位"%n+"的斐波那契数列是"+"%d"%a[n-1])
二、
pre_1 = 1
pre_2 = 1
current = 1
n=int(input("请输入n:"))
for i in range(3,n+1):
current = pre_1+pre_2
pre_1,pre_2 = current,pre_1
print("第%d的数是%d"%(n,current))
7 判断101-200之间有多少个素数,并输出所有素数。判断素数的⽅法:⽤⼀个数分别除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数
答案
kk = []
bb = []
a = 2
for i in range(101,201):
bb.append(i)
a = 2
while 2 <= a < i:
j = 0
while a+j <i:
if i % a+j ==0:
kk.append(i)
j +=1
a +=1
kkk = list(set(kk))
# print(kkk)
# print(len(kkk))
# print(bb)
num = 0
# print(kkk[0])
# bb.remove(kkk[num])
# print(bb)
while 0<= num <= len(kkk)-1:
bb.remove(kkk[num])
num += 1
print(bb)
二、
for i in range(101,201):
for a in range(2,i):
if i%a == 0:
break
else:
print(i,end="\t")
三、for num in range(101,201):
count = 0 #存储2到num-1之间能够被num整除的的个数。
for x in range(2,num):
if num % x ==0:
count +=1
break
if count ==0:
print("不是素数",num,end="\t")
8 打印出所有的⽔仙花数,所谓⽔仙花数是指⼀个三位数,其各位数字⽴⽅和等于该数本身。例如:153是⼀个⽔仙花数,因为153 = 1^3 + 5^3 + 3^3
答案:
aa = []
for i in range(100,999):
a = i
print(str(a))
a = (int(str(a)[0]))**3+(int(str(a)[1]))**3+(int(str(a)[2]))**3
if i == a:
aa.append(i)
print(aa)
二、
for i in range(100,999):
a = i
a = (int(str(a)[0]))**3+(int(str(a)[1]))**3+(int(str(a)[2]))**3
if i == a:
print(i)
9 有⼀分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的第20个分数分⼦:上⼀个分数的分⼦加分⺟ 分⺟: 上⼀个分数的分⼦ fz = 2 fm = 1 fz+fm / fz
答案 :第20位的值是17711/10946
n = int(input("你想知道第几位的值?请输入:"))
first = 2/1
a1 = str((str(2)+"/"+str(1)))
aa = [2,1]
count = 1
if n == 1:
print("第%d"%n+"位的值是%s"%a1)
else:
while True:
next_fm = aa[-2]
next_fz = int(aa[-1])+int(aa[-2])
aa.append(next_fz)
aa.append(next_fm)
count +=1
if n == count:
break
print("第%d" %n + "位的值是%s" %(str(aa[-2])+"/"+str(aa[-1])))
二、
fen_zi = 2
fen_mu = 1
n = int(input("你想知道第几位:?"))
for x in range(2,n+1):
fen_zi,fen_mu = fen_zi+fen_mu,fen_zi
print("%d/%d"%(fen_zi,fen_mu))
10 给⼀个正整数,要求:1、求它是⼏位数 2.逆序打印出各位数字
答案:
import random
suiji_int_n = random.randint(1000,9999)
num1 = str(suiji_int_n)
len_num1 = len(num1)
print("这个数%s是%s"%(num1,len_num1)+"位数",end="\t")
count = len_num1-1
b = ""
while 0 <= count <= len_num1-1:
b += num1[count]
count -= 1
print("逆序是%s"%b)
二、
import random
suiji_int_n = random.randint(1000,9999)
num1 = str(suiji_int_n)
print(num1)
len_num1 = len(num1)
print("这个数%s是%s"%(num1,len_num1)+"位数",end="\t")
print(num1[::-1])
三、n = 1236
count = 1
while n // 10:
count +=1
n //= 10
print(count)
n = 1236
for _ in range(count):
print(n % 10,end=" ")
n //=10
三、扛把子困难
1.控制台输入年龄,根据年龄输出不同的提示(例如:老年人,青壮年,成年人,未成年,儿童)
答案:
import random
age = random.randint(1,99)
i = 0
while i <= 10:
age = random.randint(1, 99)
if age <= 14:
print("小朋友,你才%d你还是儿童"%age,"回家吧打游戏吧")
elif age <= 18:
print("你才%d你未成年" %age, "回家看吧")
elif age <= 40:
print("大兄弟,你%d正值壮年" %age, "里边请")
elif age <= 60:
print("老板好,你都%d了" %age, "注意身体,要节制啊")
elif age <= 100:
print("老爷子,你都%d了" %age, "红灯区不适合你了")
else:
print("%d?" %age, "滚装逼")
i+=1
2.计算5的阶乘 5!的结果是
答案: 5!的值是 120
import random
i = 0
while i<= 10:
num1 = random.randint(1,10)
a = num1
print(a)
cj = 1
while True:
cj *= num1
num1 -= 1
if num1 == 0:
break
i += 1
print("%d!的值是"%a,"%d"%cj)
3.求1+2!+3!+...+20!的和 1.程序分析:此程序只是把累加变成了累乘。
答案:从1!加到20! 的值是从1!加到20! 的值是2561327494111820313
import random
num1 = int(input("你想求出1!到多少的阶乘的和?请输入:"))
i = 1
sum =0
while i <= num1:
cj = 1
flag = True
a = i
while flag:
cj *= a
a -= 1
if a ==0:
flag =False
sum += cj
i += 1
print("从1!加到%d!"%num1,"的值是%d"%sum)
二】
cj = 1
sum = 0
for i in range(1,21):
cj *= i
sum +=cj
print(cj,sum)
4.计算 1+1/2!+1/3!+1/4!+...1/20!=?
答案:大约为 1.7183
num1 = int(input("你想求出1/1!到多少的1/阶乘的和?请输入:"))
i = 1
sum =0
while i <= num1:
cj = 1
flag = True
a = i
while flag:
cj *= a
a -= 1
if a ==0:
flag =False
sum += 1/cj
i += 1
print("从1!加到1/%d!"%num1,"的值是%s"%sum)
5.循环输入大于0的数字进行累加,直到输入的数字为0,就结束循环,并最后输出累加的结果。
答案:
import random
sum1 = 0
flag = True
while flag:
num1 = random.randint(0,3)
print(num1, end="\t")
if num1 == 0:
flag = False
sum1 += num1
print("求和为%d"%sum1)
6.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 1.程序分析:关键是计算出每一项的值。
答案:
import random
n = int(input("输入几位相同的num1相加?请输入:"))
num1 = random.randint(1,9)
sum = num1
i = 2
while i <= n:
print()
cc = str(num1)
b = str(num1).rjust(i,cc)
print(b,end=' ')
sum += int(b)
i +=1
print("求和为%d"%sum)
7.输入三个整数x,y,z,请把这三个数由小到大输出。
答案:
import random
a=[]
n = int(input("你想几个数比较大小:请输入:"))
m = int(input("你想几位数比较大小:请输入:"))
i= 1
bb = []
while i <= n:
x = random.randint(10**(m-1),10**m-1)
a.append(x)
i += 1
for kkk in range(n):
aa = max(a)
bb.append(aa)
a.remove(aa)
print(bb)
8.控制台输出三角形
a.根据n的值的不同,输出相应的形状
n = 5时 n = 4
***** ****
**** ***
*** **
** *
*
答案:
import random
i = 1
while i <=2:
num1 = random.randint(1,9)
if num1 & 1: # 奇数
k = num1
while 1 <= k <= num1:
b = "*"
print(b*k)
k -=1
else:
k = num1
while 1 <= k <= num1:
b = "*"
print(b*k)
k -=1
i += 1
b.根据n的值的不同,输出相应的形状(n为奇数)
n = 5 n = 7
* *
*** ***
***** *****
*******
答案:
import random
flag = True
while flag:
num1 = random.randint(3,20)
if num1 %2 !=0:
flag =False
if num1 %2 !=0:
k = 1
while 1 <= k <= num1:
b = "*"
d = b*k
c = d.center(num1," ")
print(c)
k +=2
9.输出9*9口诀。 1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
答案:
fir = 1
while fir <= 9:
sec = 1
while sec <= fir:
print(str(sec)+"*"+str(fir)+"="+str(sec*fir),end="\t")
sec += 1
fir +=1
print()
10.这是经典的"百马百担"问题,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?
答案:
大马有2中马有30小马有68
大马有5中马有25小马有70
大马有8中马有20小马有72
大马有11中马有15小马有74
大马有14中马有10小马有76
大马有17中马有5小马有78
大马有20中马有0小马有80
horse = 100
for i_big in range(101):
big_horse = i_big
for i_midle in range(horse-i_big+1):
midle_horse = i_midle
for i_smail in range(horse-i_big-i_midle+1):
smail_horse = i_smail
if (big_horse + midle_horse + smail_horse == horse) and (3*big_horse + 2*midle_horse + 0.5*smail_horse == 100):
print("大马有%d"%big_horse+"中马有%d"%midle_horse+"小马有%d"%smail_horse)
11.我国古代数学家张邱建在《算经》中出了一道“百钱买百鸡”的问题,题意是这样的: 5文钱可以买一只公鸡,3文钱可以买一只母鸡,1文钱可以买3只雏鸡。现在用100文钱买100只鸡,那么各有公鸡、母鸡、雏鸡多少只?请编写程序实现。
答案:
公鸡有0,母鸡有25,小鸡有75,
公鸡有4,母鸡有18,小鸡有78,
公鸡有8,母鸡有11,小鸡有81,
公鸡有12,母鸡有4,小鸡有84,
chicken = 100
for i_g in range(101):
g_chicken = i_g
for i_m in range(chicken-i_g+1):
m_chicken = i_m
for i_s in range(chicken-i_g-i_m+1):
s_chicken = i_s
if (s_chicken % 3 == 0) and (g_chicken + m_chicken + s_chicken == 100) and ((5*g_chicken + 3*m_chicken + 1*s_chicken*(1/3) == 100)):
print("公鸡有%d,"%g_chicken+"母鸡有%d,"%m_chicken+"小鸡有%d,"%s_chicken)
12.小明单位发了100元的购物卡,小明到超市买三类洗化用品,洗发水(15元),香皂(2元),牙刷(5元)。要把100元整好花掉,可如有哪些购买结合?
答案:
可以买洗发水0 可以买香皂0 可以买牙刷20
可以买洗发水0 可以买香皂5 可以买牙刷18
可以买洗发水0 可以买香皂10 可以买牙刷16
可以买洗发水0 可以买香皂15 可以买牙刷14
可以买洗发水0 可以买香皂20 可以买牙刷12
可以买洗发水0 可以买香皂25 可以买牙刷10
可以买洗发水0 可以买香皂30 可以买牙刷8
可以买洗发水0 可以买香皂35 可以买牙刷6
可以买洗发水0 可以买香皂40 可以买牙刷4
可以买洗发水0 可以买香皂45 可以买牙刷2
可以买洗发水1 可以买香皂0 可以买牙刷17
可以买洗发水1 可以买香皂5 可以买牙刷15
可以买洗发水1 可以买香皂10 可以买牙刷13
可以买洗发水1 可以买香皂15 可以买牙刷11
可以买洗发水1 可以买香皂20 可以买牙刷9
可以买洗发水1 可以买香皂25 可以买牙刷7
可以买洗发水1 可以买香皂30 可以买牙刷5
可以买洗发水1 可以买香皂35 可以买牙刷3
可以买洗发水1 可以买香皂40 可以买牙刷1
可以买洗发水2 可以买香皂0 可以买牙刷14
可以买洗发水2 可以买香皂5 可以买牙刷12
可以买洗发水2 可以买香皂10 可以买牙刷10
可以买洗发水2 可以买香皂15 可以买牙刷8
可以买洗发水2 可以买香皂20 可以买牙刷6
可以买洗发水2 可以买香皂25 可以买牙刷4
可以买洗发水2 可以买香皂30 可以买牙刷2
可以买洗发水2 可以买香皂35 可以买牙刷0
可以买洗发水3 可以买香皂0 可以买牙刷11
可以买洗发水3 可以买香皂5 可以买牙刷9
可以买洗发水3 可以买香皂10 可以买牙刷7
可以买洗发水3 可以买香皂15 可以买牙刷5
可以买洗发水3 可以买香皂20 可以买牙刷3
可以买洗发水3 可以买香皂25 可以买牙刷1
可以买洗发水4 可以买香皂0 可以买牙刷8
可以买洗发水4 可以买香皂5 可以买牙刷6
可以买洗发水4 可以买香皂10 可以买牙刷4
可以买洗发水4 可以买香皂15 可以买牙刷2
可以买洗发水4 可以买香皂20 可以买牙刷0
可以买洗发水5 可以买香皂0 可以买牙刷5
可以买洗发水5 可以买香皂5 可以买牙刷3
可以买洗发水5 可以买香皂10 可以买牙刷1
可以买洗发水6 可以买香皂0 可以买牙刷2
可以买洗发水6 可以买香皂5 可以买牙刷0
money = 100
for xi_fa in range(50):
num_xi_fa = xi_fa
for xiang_zao in range(50):
num_xiang_zao = xiang_zao
for ya_shua in range(50):
num_ya_shua = ya_shua
if 15*num_xi_fa+2*num_xiang_zao+5*num_ya_shua == money:
print("可以买洗发水%d"%num_xi_fa,"可以买香皂%d"%num_xiang_zao,"可以买牙刷%d"%num_ya_shua)