python 练习题1

第一题

输入某年某月某日判断这天是这一年的第几

years = int(input("请输入年份:"))
months = int(input("请输入月份:"))
days = int(input("请输入日期:"))
def y_num_years(years):
    """判断是否为闰年"""
    if years % 400 == 0 or ( years % 4 == 0 and years % 100 != 0):
        return True
    return False
monthss = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334)
def d_num_days(months, days):
    if (0 < months <= 12):
        days_num = monthss[months - 1] + days
    else:
        print("请输入正确月份!")
    if months > 2:
        if y_num_years(years):
            return days_num + 1
    return days_num
days_nums = d_num_days(months, days)
print(f"这是 {years} 年的第 {days_nums} 天")

# 结果输出
请输入年份:2030
请输入月份:03
请输入日期:30
这是 2030 年的第 89 天

第二题

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

sums = []
for i in range(100, 1000):
    sum_a = i % 10
    sum_b = i // 10 % 10
    sum_c = i // 100
    if i == (sum_a ** 3 + sum_b ** 3 + sum_c ** 3):
        sums.append(i)
print(f"1000以内的水仙花数为:{sums}")


# 结果输出
1000以内的水仙花数为:[153, 370, 371, 407]

第三题

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

# 自由落体
def free_fall(h=100, n=10):
    """自由落体反弹的高度"""
    sums, height = 0, h
    for i in range(1, n+1):
        sums += height * 2
        height /= 2
    return sums - 100, height
h = float(input("请输入初始高度: "))
n = int(input("请输入反弹次数: "))
sums, height = free_fall(h, n)
print(f"第{n}次反弹的高度为:{height}")
print(f"第{n}次落地时经过了:{sums}米")


# 结果输出
请输入初始高度: 100
请输入反弹次数: 10
第10次反弹的高度为:0.09765625
第10次落地时经过了:299.609375米

第四题

有一分数序列:2/1,  3/2, 5/3, 8/5, 13/8,  21/13..求出这个数列的前20项之和。

n = int(input("请输入需要求前几项的和: "))
a, b = 2, 1
sums = 0
for i in range(1, n + 1):
    ab = a / b
    sums += ab
    a, b = a + b, a

print(sums)

# 结果输出
请输入需要求前几项的和: 20
32.66026079864164

第五题

企业发放的奖金根据利润提成。利润(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提成从键盘输入当月利润I,求应发放奖金总数?

profits = int(input("请输入当月的利润:"))
# 分别计算出利润10万,20万,40万,60万和100万的提成
deducts10 = 100000 * 0.1
deducts20 = deducts10 + 100000 * 0.075
deducts40 = deducts20 + 200000 * 0.05
deducts60 = deducts40 + 200000 * 0.03
deducts100 = deducts60 + 400000 * 0.015

# 计算所得的提成
if profits > 1000000:
    deducts = (profits - 1000000) * 0.01 + deducts100
elif profits > 600000:
    deducts = (profits - 600000) * 0.015 + deducts60
elif profits > 400000:
    deducts = (profits - 400000) * 0.03 + deducts40
elif profits > 200000:
    deducts = (profits - 200000) * 0.05 + deducts20
elif profits > 100000:
    deducts = (profits - 100000) * 0.075 + deducts10
else:
    deducts = profits * 0.1
print(f"应发放奖金总数:{deducts}元")


# 结果输出
请输入当月的利润:1673745
应发放奖金总数:46237.45元

第六题

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

分析:

已知一个整数,假设为x,满足:

  1. x + 100 = m² (m是整数)

  2. x + 100 + 268 = x + 368 = n² (n是整数)

因此,可以得到:n² - m² = (x+368) - (x+100) = 268
即:n² - m² = 268
平方差公式: (n-m)(n+m) = 268

设 a = n-m, b = n+m,则 a * b = 268,且a和b都是正整数(因为n>m),并且b>=a,同时由于n和m都是正整数,所以a和b同奇偶(因为n和m都是整数,所以a和b要么都是偶数,要么都是奇数,但268是偶数,所以两个因数必须都是偶数)。

另外,由于n = (a+b)/2, m = (b-a)/2,所以a和b必须都是偶数,这样才能保证n和m是整数。

因此,可以将268分解成两个正偶数的乘积,并且满足a<b(因为n>m,所以b>a),然后求出每一组a,b对应的n和m,进而得到x

import math
def find_number():
    solutions = []
    for i in range(1, math.isqrt(268) + 1):
        if 268 % i != 0:
            continue
        j = 268 // i
        # 必须均为偶数
        if i % 2 == 0 and j % 2 == 0:
            n = (i + j) // 2
            m = (j - i) // 2
            x = m ** 2 - 100
            solutions.append(x)
    return solutions
result = find_number()
print("满足条件的整数:", result)

# 结果输出
满足条件的整数: [4256]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值