Python经典习题代码

精心收集的Python经典习题代码

1. 用4个数字组成多少个不重复3位数?

    print('用2,4,8,9 `组成不重复的3位数:')
    l=0
    for i in (2,4,8,9):
        for j in (2,4,8,9):
            for k in (2,4,8,9):
                if i!=j and i!=k and j!=k:
                    print(i*100+j*10+k)
                    l+=1
                        print('共有%d个不同的3位数。'%l)

2.企业资金利润发放问题

‘’’
企业发放的奖金根据利润提成。利润(profit)低于或等于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%提成,从键盘输入当月利润profit,求应发放奖金总数?
程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型
‘’’

方法1:比较笨的方法,才开始学的时候弄的

bonus=0
profit=int(input('请输入你本月的业绩(总利润  元):'))
if profit>100000 :
    if profit <=200000:
        bonus = 100000 * 0.1 + (profit - 100000)*0.075
    elif profit <=400000 :
        bonus = 100000 * 0.1 + 100000 * 0.075+ (profit - 200000)*0.05
    elif profit <= 600000 :
        bonus = 100000 * 0.1 +100000*0.075 +200000*0.05+ (profit - 400000)*0.03
    elif profit <= 1000000 :
        bonus = 100000 * 0.1 +100000*0.075 +200000*0.05+ 200000*0.03+(profit - 600000)*0.0015
    elif profit >1000000 :
        bonus = 100000 * 0.1 +100000*0.075 +200000*0.05+ 200000*0.03+400000*0.015+(profit - 1000000)*0.001

else:
    bonus = profit * 0.1
   
print('你本月的业绩利润是:%d 元,共发放奖金:%d 元,继续加油!'%(profit,bonus))

方法2:利用函数,自行调用

函数1:

def test_02(profit): 
    rate = [0.1, 0.075, 0.05, 0.03, 0.015, 0.01] 
    amount = [10, 20, 40, 60, 100] 
    sum0 = amount[0] * rate[0] 
    sum1 = sum0 + (amount[1] - amount[0]) * rate[1] 
    sum2 = sum1 + (amount[2] - amount[1]) * rate[2] 
    sum3 = sum2 + (amount[3] - amount[2]) * rate[3] 
    sum4 = sum3 + (amount[4] - amount[3]) * rate[4] 
    if profit <= 10: 
        return profit * rate[0] 
    elif (profit > 10) and (profit <= 20): 
        return sum0 + (profit - amount[0]) * rate[1] 
    elif (profit > 20) and (profit <= 40): 
        return sum1 + (profit - amount[1]) * rate[2] 
    elif (profit > 40) and (profit <= 60): 
        return sum2 + (profit - amount[2]) * rate[3] 
    elif (profit > 60) and (profit <= 100): 
        return sum3 + (profit - amount[3]) * rate[4] 
    elif profit > 100: 
        return sum4 + (profit - amount[4]) * rate[5] 
    else: print("输入金额错误!") 

函数2:

def test_02_1(): 
    i = int(input("净利润:")) 
    arr = [1000000, 600000, 400000, 200000, 100000, 0] 
    rat = [0.01, 0.015, 0.03, 0.05, 0.075, 0.1] 
    r = 0 
    for idx in range(0, 6): 
        if i > arr[idx]: 
            # print(idx) 
            r += (i - arr[idx]) * rat[idx] 
            # print((i - arr[idx]) * rat[idx]) 
            i = arr[idx] 
            print(r) 
            return r

3. 判断1000以内的完全平方数

问题:一个整数,它加上100后是一个完全平方数,再加上268又是一个完全平方数,
请问该数是多少?

import math

#笨办法1,效率低下:
def check_sqrt1():
    print('用多个循环嵌套来解决')
    num1=1
    num2=False
    while num1<1000:
        for i in range(num2,num1):
            for j in range(num2,num1):
                for k in range(num2,num1):
                    if j**2==i+100 and k**2==i+268:
                        print('这个数是%d'%i)
                        num2=True
        if num2:
            break
        num1+=1

def check_sqrt2():
    #用数学函数平方根sqrt()来解决,效率高
    print('用int(sqrt())==sqrt() 来判断')
    num=1
    while num <1000:
        if math.sqrt(num + 100)==int(math.sqrt(num+100)) and math.sqrt(num+268)==int(math.sqrt(num+268)):
            print('这个数是:%d  '%num)
        num+=1

#check_sqrt1()
check_sqrt2()d  '%num)
        num+=1

4. 判断一年中的第几天的问题

问题描述:输入某年某月某日,判断这一天是这一年的第几天?

思路:要判断这年有多少天,是不是闰年,再算是第几天

闰年:被4整除、不被100整除,整百年被400整除

def day_in_year(date):
    month_days=[31,28,31,30,31,30,31,31,30,31,30,31]
    year=int(date[:4])
    month=int(date[4:6])
    day=int(date[6:])
    print(year,month,day)
    if year % 4==0 and year%100!=0 or year % 400==0:
        month_days[1]=29
    dayth=0
    for i in range(month-1):
        dayth+=month_days[i]
    dayth+=day
    return dayth

date=input('请输入日期,如:20200202:')
dayth=day_in_year(date)
print('%s 在%s 年中是第%d天。'%(date,date[:4],dayth))

5.输入数字的排序问题

有几个整数,请把这几个数由小到大输出

import math

def paixu(n): #这是经典的冒泡法排序
    tmp=int
    for i in range(len(n)):
        for j in range(i+1,len(n)):
            if n[i]>n[j]:
                n[i],n[j]=n[j],n[i]
    return n

num_list=[4,2,9,65,1]
print('原数字组:',num_list)

print('冒泡法排序:',paixu(num_list))
num_list.sort()
print('函数sort() 排序:',num_list)

6. 斐波那契数列

def fib(n):
    fib1=1
    fib2=2
    for i in range(n):
        print(fib1)
        fib1+=fib2
        fib1,fib2 =fib2,fib1
        time.sleep(0.05)
        #print(fib1)
    
n=int(input('请输入斐波那契个数:'))
fib(n)

7. 输出 9*9 乘法口诀表

输出 9*9 乘法口诀表

for i in range(1,10): #乘数1-9循环
    for j in range(1,i+1):#乘数1-i
        print('%d*%d=%d  '%(i,j,i*j),end='') #
        if i == j:
            print('\n')

9. 输出1000内的水仙花数

打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

for i in range(100,1000):
    bai=int(i/100)
    shi=int(((i-int(i/100)*100))/10)
    ge=int((i-int(i/10)*10))
    if i==bai**3+shi**3+ge**3:
        print('%d = %d + %d + %d '%(i,bai**3,shi**3,ge**3))

10. 将一个正整数分解质因数

例如:输入90,打印出90=2*3*3*5

def zys(num):
    for i in range(2,num):
        if num%i==0:
            yinshu.append(str(i))
            if num/i >i:
                zys(num//i)
            elif num/i>1:
                yinshu.append(str(num//i))
            break
    else:
        yinshu.append(str(num))

num=int(input('请输入一个数字:'))
if num <=1:
    num = int(input('输入错误,请重新输入:'))
    
yinshu=[]
zys(num)
y='+'.join(yinshu)
print(num,'=',y)

11. 汉诺塔问题

def hano(num,a,b,c):
    if num ==1:
        print(a,' -> ',c)
        return
    else:
        hano(num-1,a,c,b)
        print(a,' -> ',c)
        hano(num-1,b,a,c)
        return

num=int(input('请输入要移动的汉诺塔层数:'))
a,b,c='A','B','C'

hano(num,a,b,c)

12. 输出完数

完数:一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。

def wanshu(start,end):
    for i in range(start,end):
        num_list=[1]
        for j in range(2,i):
            if i%j==0:
                num_list.append(j)
                num_list.append(i//j)
        if len(num_list)>2:
            s=0
            num_list=list(set(num_list))
            num_list.sort()
            for k in num_list:
                s+=k
            if s==i:
                print(num_list)
                print(sum(num_list))
    
wanshu(1,10000)

13. 球体下落问题

一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

方法1(我自己的)

h=100.0
s=0.0
for i in range(1,11):
    s+=h    #每次下降的距离
    h=h/2    #弹起的距离
    print('第%d次弹起%f米,球已行动了%f米。'\
        %(i,h,s))
    if i <10:
        s+=h    #这h是前九次下落的距离,第十次不下落,总距离不再加
    
print(h,'   ',s)

方法2:

tour = []
height = []
hei = 100.0  # 起始高度
tim = 10  # 次数
for i in range(1, tim + 1):
     # 从第二次开始,落地时的距离应该是反弹高度乘以2(弹到最高点再落下)
    if i == 1:
        tour.append(hei)
    else:
        tour.append(2 * hei)
    hei /= 2
    height.append(hei)
print('总高度:tour = {0}'.format(sum(tour)))
print('第10次反弹高度:height = {0}'.format(height[-1]))

14.猴子吃桃问题

题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。程序分析:采取逆向思维的方法,从后往前推断。

bea_sum=1
for i in range(10,0,-1):
    if i ==10:
        bea_sum=1
    else:
        bea_sum=(bea_sum+1)*2
  
print('第1天共摘了%d个桃子'%bea_sum)

for i in range(1,11):
    print('第%d 天吃了%d 个桃子'%(i,bea_sum//2+1))
    bea_sum=bea_sum//2 -1

15. 求阶乘

15.1 函数递归

def jiec(n):
    if n==1:
        return 1
    else:
        return jiec(n-1)*n
    
n=int(input('请输入要求阶乘的数字:'))
jie=jiec(n)
print('递归函数:\n%d 的阶乘是:%d '%(n,jie))
print('%d!=%d \n'%(n,jie))

15.2 for循环:

jie2=1
for i in range(1,n+1):
    jie2*=i
print('for循环求解:\n%d 的阶乘是:%d \n'%(n,jie2))

15.3 while 循环求解

jie3=1
while i>=1:
    jie3 *=i
    i-=1
print('while循环求解:\n%d 的阶乘是:%d '%(n,jie3))

16. 输出101-200(区间数可自定)以内的素数

判断101-200之间有多少个素数,并输出所有素数。

count=0
for i in range(101,1001):
    for j in range(2,int(i/2)):
        if i%j==0 : #int(i/j)==i/j:
            print('%d 不是素数:%d=%d x %d'%(i,i,j,i/j))
            break
    else:
        count+=1
        print(i ,' 是素数')
                
print('101-200之间共有%d个素数'%count)

17.


以下问题摘自https://codingbat.com/

monkey_trouble

We have two monkeys, a and b, and the parameters a_smile and b_smile indicate if each is smiling. We are in trouble if they are both smiling or if neither of them is smiling. Return True if we are in trouble.

monkey_trouble(True, True) → True
monkey_trouble(False, False) → True
monkey_trouble(True, False) → False

def mokey_trouble(a_smile,b_smile):
    if (a_smile and b_smile) or (not a_smile and not b_smile):
        return True
    else:
    return False

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 vault@coolxy.cn

×

喜欢就点赞,疼爱就打赏

github