周末练习

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

time = 0   #定义次数变量
while True:
    time += 1   #次数依次增加
    sum = int(0.08*2**(time) / 8848130)  #求比值
    
    if sum == 1:   
        print(time,'次')   #当比值等于1时,输出次数
        break
    

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

# 2, 2, 4, 6, 10, 16, 26, 42, 68......
n = int(input('请输入月数:'))   
month1 = 2   #第一个月兔子的数量
month2 = 2   #第二个月兔子的数量
month = 2   #当 n = 1或2 的时候,兔子的数量
for x in range(2, n):  #从第3个月开始依次增加月数
    month = month1 + month2   # month等于前两个月相加
    month1 = month2   
    month2 = month   #每两个月的往后推,一直到第n个月
print(month,'只')   #输出兔子的只数

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

n = int(input('请输入一个正整数:'))
k = 1  #k的初始值为1
print(n,'=',sep='',end='') #输出'n='
while True:
    k += 1   #k值依次加1
    
    if n % k == 0:  #判断k是否为n的因子
        print(k,sep='',end='')  #如果是打印出k
        n /= k  #n变成n/k的值
        k = 1   #k = 1 从新开始循环
        

        if n != 1:   #判断 n 是否等于1
            print('x',sep='',end='')   #不等于1输出'x'
        else:   #等于1 ,结束循环
            break
print() #换行

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

m = int(input('请输入一个正整数:'))
n = int(input('请输入第二个正整数,且小于第一个:'))
i = m % n   #把m/n的余数附给i
if i == 0:  #判断 i 是否等于 0
    print('最大公约数为:',n)
    print('最小公倍数为:',m)
elif i != 0:  
    
    b = n  #如果i不等于0,把n的值附给b
    while True:
        j = b % i  #把b/i的余数附给j
        a = i    #把i值赋給a
        b = i    
        i = j    #然后b变为i的值,i变为j的值 ,继续循环

        if j == 0:  
            print('最大公约数为:',a)  #当j等于0时结束循环,输出a
            break
     
    print('最小公倍数为:',int(m * n / a))  #输出m,n的最小公倍数

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

for x in range(2,1001): #x从2开始依次循环加1,直到x等于1000
    n = 0   #n的初始值为0
    for i in range(1,x):  #i从1开始依次加1,直到i等于x-1
        if x % i == 0:   #判断i是否为x的因子
            n += i   #把n+i的值赋給n
    if x == n:
        print(x)  #如果n等于x ,打印出x

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

year = int(input('请输入年份:'))
month = int(input('请输入月份:'))
day = int(input('请输入几日:'))
date = day  #把day的值赋給date
for x in range(1, month):  #x依次加1,直到x等于month-1
    if x == 1 or x == 3 or x == 5 or x == 7 or x == 8 or x == 10:  
        date += 31  #将month中1,3,5,7,8,10月中的天数加起来
    elif x == 4 or x == 6 or x == 9 or x == 11:
        date += 30  #将month中4,6,9,11月中的天数加起来
    else:
        if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0): #判断是否为闰年
            date += 29  #如果为闰年,2月为29天
        else:
            date += 28  #不是闰年,2月为28天
print('本年第',date,'天')

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

a = int(input('请输入第一位数:'))
b = int(input('请输入第二位数:'))
c = int(input('请输入第三位数:'))
d = int(input('请输入第四位数:'))
a1 = (a + 5) % 10
b1 = (b + 5) % 10
c1 = (c + 5) % 10
d1 = (d + 5) % 10
print(d1,c1,b1,a1,end='')

你可能感兴趣的:(周末练习)