一,第三关卡作业答案
1、题目1:计算约瑟夫环问题
persons=[True]*30 #创建一个列表,元素全部为True,即假定30个人全为基督徒
count,i,number=0,0,0
while count<15: #记数,非基督徒有15人
if persons[i]:
number+=1 #遍历列表元素
if number==9: #第9个人
persons[i]=False #将该列表元素改为False,即非基督徒
count+=1
number=0
i+=1 #从下一个人开始数
i%=30
L1=[]
for i in range(len(persons)):
if persons[i]:
L1.append('1')
else:
L1.append('0')
L1
2、题目2:计算机票票价¶
while 1:
a =int(input( "请输入月份:"))
b =int(input( "请输入订票张数:"))
c =int(input( "请输入机票原价:"))
if a<=2 or (a>=7 and a<=10) or a==12:
if b>15:
p = 0.15
else:
p = 0.05
else:
if b>20:
p = 0.3
elif b>5:
p = 0.2
else:
p= 0.1
f=b*c*(1-p)
print("机票优惠率为:%.2f" %p)
print('应付票款:%.1f'%f)
d = str(input("请输入结束了吗:"))
if d == 'y' or d == 'Y':
break
L2 =[]
L2.append(p)
L2.append(f)
print(L2)
3、题目3:计算指定的年月日是这一年的第几天。
import datetime
input_date = input('请输入日期,以逗号隔开:')
date2 = input_date.split(",")
L3 = []
for i in date2:
a = datetime.datetime.strptime(i,"%Y-%m-%d").date()
year1 = a.year
b = datetime.date(year1,1,1)
c = (a-b).days +1
L3.append(c)
L3
二、第四关卡作业
1.题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
import math
L1 =[]
for i in range(100,1000):
a = math.floor(i/100)
b = math.floor(i/10)-a*10
c = i%10
if a in [1,2,3,4]:
if b in [1,2,3,4]:
if c in [1,2,3,4]:
if (a-b)*(b-c)*(a-c)!= 0:
L1.append(i)
L1
2、题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从输入利润为120000时,求应发放奖金总数?结果转换成int,保存到L2数组中
def qian(i):
i = i/10000
if i<=10:
c =i*0.1
elif i<=20:
c =10*0.1 +(i-10)*0.075
elif i<=40:
c = (i-20)*0.05
elif i<=60:
c =(i-40)*0.03
elif i<=100:
c =(i-60)*0.015
else:
c =(i-100)*0.01
return c
L2 = int(qian(120000)*10000)
L2
3、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
L3 =[]
for i in range(2,85,2):
if 168%i ==0:
j =int(168/i)
m =int((i+j)/2)
n =int((i-j)/2)
if m**2 -n**2==168 and n<=0:
x =m**2-268
if isinstance(x,int):
L3.append(x)
L3.sort()
L3
4/输入2021-09-30,判断这一天是这一年的第几天?
import datetime
a =input("请输入日期:")
b=datetime.datetime.strptime(a,'%Y-%m-%d').date()
year1 = b.year
c = datetime.date(year1,1,1)
L4 =(b-c).days+1+5
L4
5、输入三个整数13, 4,20,请把这三个数由小到大输出
L5 =[13,4,20]
for i in range(len(L5)-1):
for j in range(i,len(L5)):
if L5[i]>L5[j]:
L5[i],L5[j] =L5[j],L5[i]
L5
6、斐波那契数列。
程序分析:斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。输出第10个斐波那契数列
list1 = [0,1]
for i in range(9):
a=list1[i]+list1[i+1]
list1.append(a)
L6 =list1[10]
L6
7、题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子有多少对?要求输出从第1个月到第10个月分别有多少对兔子
L7 = [1,1]
for i in range(8):
a=L7[i]+L7[i+1]
L7.append(a)
L7
8、题目:将一个正整数分解质因数。要求输入90,打印出90=233*5,将分解出的质因数保存到L8数组中。
#判断是否为质数
def zhishu(x):
L=[]
for i in range(1,x+1):
if x%i==0:
L.append(i)
if len(L) ==2:
return 1
else:
return 0
a=90
L8 = []
L0 = []
for i in range(2,a+1):
if zhishu(i):
L0.append(i)
i = 0
while 1:
b = L0[i]
if a%b==0:
a = int(a/b)
L8.append(b)
i=0
elif zhishu(a):
L8.append(a)
break
else:
i+=1
L8
9、题目:输入'123runoobc kdf235*(dfl)',分别统计出其中英文字母、空格、数字和其它字符的个数。按照顺序将个数保存到L9;
a = input("请输入字符串")
digit = 0
char =0
space =0
others=0
L9=[]
for i in range(len(a)):
if a[i].isdigit():
digit+=1
elif a[i].isalpha():
char+=1
elif a[i].isspace():
space+=1
else:
others+=1
list1 =[char,space,digit,others]
L9.extend(list1)
L9
10、题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。将结果保存到L10中;
def yinzi(x):
L =[]
for i in range(1,x):
if x%i==0:
L.append(i)
return L
L10 =[]
for i in range(2,1001):
s = 0
L= yinzi(i)
for j in range(len(L)):
s+=L[j]
if s==i:
L10.append(i)
L10
11、题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?结果保存到L11中;
a =100
L11 = 0
i=1
while i<=10:
if i==1:
a =100
else:
a =100/(2**(i-2))
L11 =L11+a
i+=1
L11
12、题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
a = 1
L12= 1
while a<=9:
L12 = (L12+1)*2
a+=1
L12
13、题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出与a对战的是谁?结果保存到L13中;
list=['x','y','z']
for a in list:
for b in list:
for c in list:
if a!=b and a!=c and b!=c and a!='x' and c!='x' and c!='z':
L =a
L=[]
L.append(a)
output_str = ', '.join(L)
L13=[]
L13.append(output_str)
L13
14、题目:给出23459,逆序打印出各位数字。并保存到L14中;
import math
a = 23459
L14 =[]
for i in range(1,6):
b = math.floor(a/(10**i))
if i ==5:
d = 2
else:
c = math.floor(a/(10**(i-1)))
d = c-b*10
L14.append(d)
L14
15、题目:将数组[9,6,5,4,1]逆序输出,结果保存到L15中。
L = [9,6,5,4,1]
L15=[]
for i in range(len(L)):
L15.append(L[4-i])
L15