学习python的第四天

学习python的第四天

作业

1.找出100~999之间的水仙花数(各位数字的立方和刚好等于这个数本身)

153 = 1^3 + 5^3 + 3^3

123 // 100 = 1 ---> 23
123 // 10 --> 12 % 10 --> 2
123 % 100 --> 23 // 10 --> 2
123 % 10 = 12 ---> 3
567 // 100 = 5 ---> 67
567 % 10 = 56 ---> 7

for num in range(100, 1000):
    bw = num // 100
    sw = num // 10 % 10
    gw = num % 10
    if bw ** 3 + sw ** 3 + gw ** 3 == num:
        print(num)

2.找出1~10000之间的完美数(除自身外所有因子的和等于这个数) 6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14

for i in range(1,10001):
    total=0
    for j in range(1,i):
        if i%j==0:
            total +=j
    if i==total:
        print(i)

然而该代码的执行效率却不行,我们将代码改成如下代码

import time
start =time.time()
for num in range(2,10000):
    total=1
    for i in range(2,int(num**0.5)+1):#范围+1
        if num %i == 0:
            total += i
            if i!=num // i:
                total += num //i
    if num == total:
        print(num)
end = time.time()
print(f'执行时间:{end-start:0.3f}秒')

从修改后代码中,我运用了import相关的函数,同时在第二for…in…循坏里我们将range的范围缩小,将num进行的开根号,从而使效率极大提高,减轻了内存的运行。

3.输入两个非负整数m和n(m >= n),计算C(m, n)的值A(m, n) = m! / (m - n)! —> 排列 —> permutation
C(m, n) = m! / n! / (m - n)! —> 组合 —> combination

C(5, 3) = 5! / 3! / 2! = 10

m = int(input('m='))
n = int(input('=n'))

fm =1
for i in range(2,m+1):
    fm *=i

fn=1
for i in range(2,n+1):
    fn *= 1

fk=1
for i in range(2,n+1):
    fk *=i

print(fm//fn//fk)

在该代码中,可以import math,从math模块导入factorial函数并别名为f

as --> alias --> 别名:别名是什么名字就是什么名字
from math import factorial as fac
m = int(input('m = '))
n = int(input('n = '))
print(fac(m) // fac(n) // fac(m - n))
  1. 输入一个正整数,判断它是不是质数(只能被1和自身整除的数)例子:50 ----> 2 3 4 5 6 | 10 12 15 20 30
for num in range(1, 100):
    is_prime = True

    for i in range(2,int(num**0.5)+1):
# for i in range(2, num ):
        if num % i == 0:
            is_prime = False
            break
    # 注意这里的bool值、

    if num > 1 and is_prime:
        print(num, end=' ')
# 先找出某一状况找到相应的条件,并运用到外层的条件运用
  1. 输入三角形三条边的长度,如果能构成三角形就计算周长和面积,如果不能构成三角形,提示用户重新输入,直到正确。
while True:
     a= float(input('a='))
     b= float(input('b='))
     c= float(input('c='))
     if a+b>c and b+c>a and a+c>b:
         perimeter = a+b+c
         half=perimeter/2
         # 海伦公式
         area=(half*(half-a)*(half-c))**0.5
         print(f'三角形的周长:{perimeter}')
         print(f'三角形的面积:{area}')
         break
     else:
         print('不能构成三角形')

课堂练习

2.补充练习:输入一个正整数n,将n进行反转

num = int(input('输入一个数:'))
total=0
while num > 0:
    total=total*10+num%10
    num //= 10
print(total)
  1. 白钱百鸡问题:
    鸡翁一值钱5,鸡母一值钱3,鸡雏三值钱1,用百钱买百鸡,问鸡翁,母鸡,鸡雏
    各几何
    穷举法:穷尽所有的可能性,然后设置条件,找到问题的解 ----》暴力破解法
#条件范围是假设鸡翁之类的数量到20之类的
for x in range(0,21):
    for y in range(0,34):
        for z in range(0,100,3):
            if x + y + z==100 and 5*x+3*y+z//3==100:
              #没有20 0 0的结果,要满足100只的条件
                print(x,y,z)

3.斐波拉切数

a,b= 1,1 #一定手动给
print(a,b,end=' ')
for _ in range(18):
    #将这里的换成下划线,合法的变量名,在写循坏的时候变量用不上
    a,b=b,a+b #把b的值赋给a,把a+b的值赋给b
    print(b,end=' ')

4.乘法口诀

for i in range(1,10):
    for j in range(1,i+1):
        print(f'{i}*{j}={i*j}',end='\t')
    print()  #代表有换行

5.五个人(ABCDE)晚上去埔鱼,然后i累了去睡觉。
第二天,A第一个醒过来,把鱼分成了5份,扔掉了多余的1条,然后拿走自己的的一份
B第二个醒过来,以为鱼没有分过,把剩下的鱼分成了5分,扔掉多余的一余
C,D,E依次醒过来,都按照同样的方法来分鱼,问他们最少捕了多少条鱼?

fish = 6
while True:
    is_enough = True

    #检查目前的鱼的数量够不够五人分
    total=fish
    for _ in range(5):
        if (total - 1)%5 == 0:
            total=(total - 1)//5 * 4
        else:
            is_enough=False
            break
    if is_enough:
        print(fish)
        break
    fish += 5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值