day5作业

1.一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?

height = 8e-5  #不能写成8e(-5)
count = 0
while height < 8848.13:
    height *= 2
    count +=1
print('需要折叠',count,'次')

2. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

"""
分析:
月数       | 1| 2| 3| 4| 5| 6| 7| 8| 9|...
小兔子对数 | 1| 0| 1| 1| 2| 3| 5| 8|13|...
大兔子对数 | 0| 1| 1| 2| 3| 5| 8|13|21|...
总兔子对数 | 1| 1| 2| 3| 5| 8|13|21|34|...
"""
month = int(input('请输入月份:'))
a1 = 2
a2 = 2
a = 2
for _ in range(2,month):
    a = a1 + a2
    a1,a2 = a2,a
print('第',month,'个月的兔子总数是:',a)

3. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。

num = int(input('请输入一个正整数:'))
print(num,end='=')
a = num
while True:
    for i in range(2,a):
        if a % i == 0:
            a /= i          # a //= i
            a = int(a)
            print(i,end='x')
            break
    else:
        print(a)
        break

4. 输入两个正整数m和n,求其最大公约数和最小公倍数。 程序分析:利用辗除法

a,b = int(input('请输入第一个数:')),int(input('请输入第二个数:'))
greatest = 1
least = 1
if a == b:
    greatest = a
    least = a
    print('最大公约数是:',greatest)
    print('最小公倍数是:',least)
else:
    while True:
        if a > b:
            min_num = b
            max_num = a
        else:
            min_num = a
            max_num = b
        for i in range(2,min_num):
            if a % i == 0 and b % i ==0:
                greatest *= i
                a //= i
                b //= i
                break
        else:
            print('最大公约数是:',greatest)
            least = greatest * a * b
            print('最小公倍数是:',least)
            break

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

for a in range(1,1001):
    sum1 = 1
    for i in range(2,a):
        if a % i == 0:
            sum1 += i
    if sum1 == a:
        print(a)

6.输入某年某月某日,判断这一天是这一年的第几天? 程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。

year = int(input('请输入年份:'))

is_leap_year = False
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
    is_leap_year = True

month = int(input('请输入月份:'))
while month > 12 or month < 1:
    month = int(input('月份不存在请重新输入:'))

max_day = 31
day = int(input('请输入日期号数:'))
if month == 4 or month == 6 or month == 9 or month == 11:
    max_day = 30
if month == 2 and is_leap_year == True:
    max_day = 29
if month == 2 and is_leap_year == False:
    max_day = 28
while day > max_day or day < 1:
    day = int(input('日期号数不存在,请重新输入:'))

sum_day = 0
for i in range(1,month):
    if i == 4 or i == 6 or i == 9 or i == 11:
        sum_day += 30
    elif i == 2:
        sum_day = sum_day + 28 + is_leap_year
    else:
        sum_day += 31

print('这一天是这一年的第',sum_day + day,'天')

7. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值

num = int(input('请输入4位数字:'))
for _ in range(1,5):
    new_num = ((num % 10) + 5) % 10
    num //= 10
    print(new_num,end='')

你可能感兴趣的:(day5作业)