和鲸PYTHON基础

一,第三关卡作业答案

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  

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值