本文主要是介绍研一Python基础课程第三周课后习题分享(上)(含源代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这周重点考察程序结构!题目量较大,分两次分享!
一、题目分享
第一题:中国古代数学问题——物不知数
描述
“物不知数”出自《孙子算经》。题目为:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”。
意思是说有一些物品,不知道有多少个,3个3个数的话,还多出2个;5个5个数则多出3个;7个7个数也会多出2个。
现假设物品总数不超过n (n<=1000),请编程计算满足条件的物品个数并输出。
输入格式:输入为一个正整数n,题目保证 0 < n <= 1000 。
输出格式:输出不超过n且满足条件的物品个数m,如果有多个解,则分行输出,如果无解则输出"No solution!"。
第二题:中国古代数学问题——二鼠打洞
描述
《九章算术》的“盈不足篇”里有一个很有意思的老鼠打洞问题。原文是这么说的:今有垣厚十尺,两鼠对穿。大鼠日一尺,小鼠亦一尺。大鼠日自倍,小鼠日自半。问:何日相逢?各穿几何?
这道题的意思是:有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打一尺,小老鼠也是一尺。大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。问它们几天可以相逢,相逢时各打了多少。
请编程求此题的解,要求使用循环来完成,不允许使用幂运算。
输入格式
输入为1个整数wall,代表墙的厚度,单位为尺。
输出格式
输出为两行,第一行输出1个整数,表示相遇时所需的天数。第二行输出2个浮点数,分别为小鼠和大鼠打洞的距离,单位为尺,保留小数点后1位数字。(提示:round(f,1)为浮点数f保留一位小数。)
第三题:中国古代数学问题——李白买酒
描述
诗仙李白,一生好酒。一天,他提着酒壶,从家里出来,酒壶中有酒若干。他边走边唱:无事街上走,提壶去买酒,遇店加一倍,见花喝一斗,五遇店和花,喝光壶中酒,计算并输出壶中原有酒几斗?
要求使用循环来计算,不允许使用幂函数。
输入格式:
本题没有输入。
输出格式:
一个整数n,表示李白的酒壶原来有n斗酒。
输入输出示例
无。
第四题:中国古代数学问题——宝塔上的琉璃灯
描述
有一座八层宝塔,每一层都有一些琉璃灯,每一层的灯数都是上一层的二倍,已知共有765盏琉璃灯,计算并输出每层各有多少盏琉璃灯。
输入格式
本题没有输入。
输出格式
输出为8行,每行都是一个正整数,从上往下数字依次增大,每个数字代表本层宝塔上的琉璃灯数目。
第五题:个人所得税计算器
描述
2018年10月1日以前,个税免征额为3500元/月,调整后,个税免征额为5000元/月,7级超额累进个人所得税税率表如下:
所得税计算公式如下:
应纳税额 = (工资薪金所得 - 五险一金 - 个税免征额) × 适用税率 - 速算扣除数
请编写一个个人所税计算器,用户输入应发工资薪金所得、五险一金金额和个税免征额,输出应缴税款和实发工资,结果保留小数点后两位。当输入应发工资小于0或等于0时,输出“error”。
其中:实发工资 = 应发工资 - 五险一金 - 应缴税款
要求使用下面的输入输出语句并补充代码。
salary = float(input()) # salary 应发工资薪金所得
five_one_insurance_fund = float(input()) # five_one_insurance_fund 五险一金
exemption = float(input(')) # exemption 个税免征额
#=======================================================
# 补充你的代码来计算应缴纳税款
输入格式:
输入为三行,每一行都是一个浮点数,分别代表应发工资、五险一金、个税起征点。
输出格式:
输出为一行,形如:应缴税款490.00元,实发工资11510.00元。
第六题:存款买房(A)
描述
你刚刚大学毕业,在北京找到了一份很好的工作,决定开始存钱买房。由于北京的房价很高,你要攒几年钱才能付得起房子的首付。
现根据以下假定来计算你需要多长时间才能攒够首付款:
1.将你想购买的房子的总价称为total_cost。
2.将首付款占总房价的比例称为portion_down_payment。为简单起见,假设portion_down_payment = 0.30(30%)。
3.将存款金额称为current_savings。你的存款从0元开始。
4.假设你的年薪是annual_salary,按12个月平均发放,单位是元。
5.假设你每个月都要拿出一定百分比的工资来存首付。称为portion_saved,此值为一个表示百分比的整数,例如50表示50%。
写一个程序来计算你需要多少个月才能攒够钱付定金,不足一个月按一个月计算。
要求使用下面的输入输出代码,填充完整并通过测试用例。
total_cost = float(input()) # total_cost为当前房价
annual_salary = float(input()) # 年薪
portion_saved = float(input()) /
100# 月存款比例,输入30转为0.30(即30%)# 根据首付款比例计算首付款down_payment,根据月存款比例计算月存款额monthly_deposit
#=======================================================
# 补充你的代码
#=======================================================
print('首付',down_payment)
print('月存款', monthly_deposit)# 计算多少个月才能存够首付款,结果为整数,不足1月按1个月计算,即向上取整
#=======================================================
# 补充你的代码
#=======================================================
print(f'需要{number_of_months}个月可以存够首付')
输入格式
输入为三行,每行一个浮点数,分别代表房价、年薪、月存工资的百分数。
输出格式
输出为三行,分别为根据输入值计算的首付款、月存款、存够首付的月份数目,输出结果严格保留2位小数,具体输出格式见示例。
第七题:存款买房(B)
描述
你刚刚大学毕业,在北京找到了一份很好的工作,决定开始存钱买房。由于北京的房价很高,你要攒几年钱才能付得起房子的首付。
现根据以下假定来计算你需要多长时间才能攒够首付款:
1.将你想购买的房子的总价称为total_cost。
2.将首付款占总房价的比例称为portion_down_payment。为简单起见,假设portion_down_payment = 0.30(30%)。
3.将存款金额称为current_savings。你的存款从0元开始。
4.假设你的年薪是annual_salary,按12个月平均发放,单位是元。
5.假设你每个月都要拿出一定百分比的工资来存首付。称为portion_saved,此值为一个表示百分比的整数,例如50表示50%。
6.假定你每6个月加一次工资,每半年加薪比例semi_annual_raise是一个表示百分比的整数,例如7表示7%,即第7个月的月初涨一次工资,工资涨幅为7%,以后每过6个月再涨一次工资。
写一个程序来计算你需要多少个月才能攒够钱付定金,不足一个月按一个月计算。
要求使用下面的输入输出代码,填充完整并通过测试用例。
total_cost = float(input()) # total_cost为当前房价
annual_salary = float(input()) # 年薪
portion_saved = float(input()) /
100# 月存款比例,输入30转为0.30(即30%)
semi_annual_raise = float(input()) /
100# 输入每半年加薪比例,输入7转化为0.07(即7%)portion_down_payment =
0.3# 首付比例,浮点数# 根据首付款比例计算首付款down_payment
#=======================================================
# 补充你的代码
#=======================================================
print('首付',down_payment)current_savings =
0# 存款金额,从0开始
number_of_months =
0monthly_salary = annual_salary/
12#月工资
monthly_deposit = monthly_salary * portion_saved # 月存款# 计算多少个月才能存够首付款,结果为整数,不足1月按1个月计算,即向上取整
#每6个月涨一次工资,每年输出年底的存款总额
#=======================================================
# 补充你的代码if number_of_months %
12==
0
:print("第{}个月月末有{:,.0f}元存款".format(number_of_months, current_savings)) #每12个月输出一次存款,保留0位小数,使用千分符
#=======================================================
print(f'需要{number_of_months}个月可以存够首付')
输入格式:
输入为四行,每行一个浮点数,分别表示房价、年薪、月存储工资百分数、半年工资涨幅百分数。
输出格式:
输出为若干行,第一行为首付款,最后一行为存够首付的月数n,中间行是每年年底已存工资款总数(取整)。具体格式见示例。
第八题:存款买房(C)
描述
你刚刚大学毕业,在北京找到了一份很好的工作,决定开始存钱买房。由于北京的房价很高,你要攒几年钱才能付得起房子的首付。
现根据以下假定来计算你需要多长时间才能攒够首付款:
1.将你想购买的房子的总价称为total_cost。
2.将首付款占总房价的比例称为portion_down_payment。为简单起见,假设portion_down_payment = 0.30(30%)。
3.将存款金额称为current_savings。你的存款从0元开始。
4.假设你的年薪是annual_salary,按12个月平均发放,单位是元。
5.假设你每个月都要拿出一定百分比的工资来存首付。称为portion_saved,此值为一个表示百分比的整数,例如50表示50%。
6.假定你每6个月加一次工资,每半年加薪比例semi_annual_raise是一个表示百分比的整数,例如7表示7%,即第7、13、19、25… 个月月初涨一次工资,工资涨幅为7%。
7.假设你每个月都是月初发工资,同时会收到上一个月的存款利息,存款年利率interest_rate固定为2.25%。
写一个程序来计算你需要多少个月才能攒够钱付定金,不足一个月按一个月计算。
要求使用下面的输入输出代码,填充完整并通过测试用例。
输入格式:
输入为四行,每行一个浮点数,分别表示房价、年薪、月存储工资百分数、半年工资涨幅百分数。
输出格式:
输出为若干行,第一行为首付款,最后一行为存够首付的月数n,中间行是每年年底已存工资款总数。具体格式见示例。
二、源代码
注意:如果一个问题有两个程序,第二个是能在系统上跑正确的,第一个虽然也能出结果,但是总有各种问题,如框架不对,个别情况不对!
def problem_1():"""“物不知数”出自《孙子算经》。题目为:意思是说有一些物品,不知道有多少个,3个3个数的话,还多出2个;5个5个数则多出3个;7个7个数也会多出2个。现假设物品总数不超过n (n<=1000),请编程计算满足条件的物品个数并输出。"""n = eval(input())flag = 0for i in range(n + 1):if (i % 3 == 2 and i % 5 == 3 and i % 7 == 2):print(i)flag += 1else:flag += 0if flag == 0:print('No solution!')def problem_2():"""有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打一尺,小老鼠也是一尺。大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。问它们几天可以相逢,相逢时各打了多少。"""wall = int(input())v_1, v_2, day, t = 1, 1, 0, 1s_1, s_2 = 0, 0while wall > 0:if wall - (s_1 + s_2) < 0:t = wall / (v_1 + v_2)wall -= v_1 + v_2s_1 += t * v_1s_2 += t * v_2v_1 *= 2v_2 *= 0.5day = day + 1print(day)print(round(s_2, 1), round(s_1, 1))def problem_3():"""诗仙李白,一生好酒。一天,他提着酒壶,从家里出来,酒壶中有酒若干。他边走边唱:无事街上走,提壶去买酒,遇店加一倍,见花喝一斗,五遇店和花,喝光壶中酒,计算并输出壶中原有酒几斗?"""n = 0for i in range(5):n += 1n /= 2print(n)def problem_4():"""有一座八层宝塔,每一层都有一些琉璃灯,每一层的灯数都是上一层的二倍,已知共有765盏琉璃灯,计算并输出每层各有多少盏琉璃灯。"""sum = 0for i in range(8):sum += 2**ix = int(765 / sum)for i in range(8):print(2**i *x)def problem_5():# 应纳税额 = (工资薪金所得 - 五险一金 - 个税免征额) × 适用税率 - 速算扣除数# 实发工资 = 应发工资 - 五险一金 - 应缴税款salary = float(input()) # 薪资five_one_insurance_fund = float(input()) # 五险一金exemption = float(input()) # 个税免征额money = [3000, 12000, 25000, 35000, 55000, 80000]rate = [0.03, 0.1, 0.2, 0.25, 0.3, 0.35, 0.45]minus = [0, 210, 1410, 2660, 4410, 7160, 15160]if salary <= 0:print('error')elif salary <= exemption:output_1 = 0output_2 = salary - five_one_insurance_fund - output_1print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))else:if salary - five_one_insurance_fund - exemption <= 0:output_1 = 0output_2 = salary - five_one_insurance_fund - output_1print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))elif salary <= 3000:output_1 = (salary - five_one_insurance_fund - exemption)*0.03 - 0output_2 = salary - five_one_insurance_fund -output_1print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))elif salary > 3000 and salary <= 12000:output_1 = (salary - five_one_insurance_fund - exemption)*0.1 - 210output_2 = salary - five_one_insurance_fund -output_1print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))elif salary > 12000 and salary <= 25000:output_1 = (salary - five_one_insurance_fund - exemption)*0.2 - 1410output_2 = salary - five_one_insurance_fund -output_1print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))elif salary > 25000 and salary < 35000:output_1 = (salary - five_one_insurance_fund - exemption)*0.25 - 2660output_2 = salary - five_one_insurance_fund - output_1print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))elif salary > 35000 and salary <= 55000:output_1 = (salary - five_one_insurance_fund - exemption)*0.3 - 4410output_2 = salary - five_one_insurance_fund - output_1print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))elif salary > 55000 and salary <= 80000:output_1 = (salary - five_one_insurance_fund - exemption)*0.35 - 7160output_2 = salary - five_one_insurance_fund - output_1print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))elif salary > 80000:output_1 = (salary - five_one_insurance_fund - exemption)*0.45 - 15160output_2 = salary - five_one_insurance_fund - output_1print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))def problem_5_1():salary = float(input()) # 薪资five_one_insurance_fund = float(input()) # 五险一金exemption = float(input()) # 个税免征额Num = salary-five_one_insurance_fund-exemptionTaxes = 0if salary <= 0 or five_one_insurance_fund <= 0 or exemption <= 0:print("error")else:if Num > 0 and Num <= 3000:Taxes = Num * 0.03elif Num > 3000 and Num <= 12000:Taxes = Num * 0.10 - 210elif Num > 12000 and Num <= 25000:Taxes = Num * 0.20 - 1410elif Num > 25000 and Num <= 35000:Taxes = Num * 0.25 - 2660elif Num > 35000 and Num <= 55000:Taxes = Num * 0.30 - 4410elif Num > 55000 and Num <= 80000:Taxes = Num * 0.35 - 7160elif Num > 80000:Taxes = Num * 0.45 - 15160Salary = salary - five_one_insurance_fund - Taxesprint('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(Taxes, Salary))def problem_6():total_cost = float(input()) annual_salary = float(input()) portion_saved = float(input()) / 100current_savings = 0portion_down_payment = 0.30down_payment = portion_down_payment * total_costmonthly_deposit = (annual_salary / 12) * portion_savednumber = down_payment % monthly_depositif number == 0:number_of_months = int(down_payment / monthly_deposit)else:number_of_months = int((down_payment // monthly_deposit) + 1)print('首付'+' '+ '%.2f' % (down_payment) +' ' + '元')print('月存款'+' ' + '%.2f' % (monthly_deposit) + ' ' + '元')print(f'需要{number_of_months}个月可以存够首付')def problem_7():total_cost = float(input()) # total_cost为当前房价annual_salary = float(input()) # 年薪portion_saved = float(input()) / 100 # 月存款比例,输入30转为0.30(即30%)semi_annual_raise = float(input()) / 100 # 输入每半年加薪比例,输入7转化为0.07(即7%)portion_down_payment = 0.3 # 首付比例,浮点数down_payment = portion_down_payment * total_cost # 首付print('首付',down_payment)current_savings = 0 # 存款金额,从0开始number_of_months = 0monthly_salary = annual_salary / 12 #月工资monthly_deposit = monthly_salary * portion_saveddef year_off_money(number_of_months, monthly_salary, semi_annual_raise, monthly_deposit ):enough = Truecurrent_saving = 0while enough:number_of_months = number_of_months + 1current_saving += monthly_depositif current_saving >= down_payment:print(f'需要{number_of_months}个月可以存够首付')enough = Falsereturnif number_of_months % 12 == 0:print("第{}个月月末有{:,.0f}元存款".format(number_of_months, current_saving)) # 每12个月输出一次存款,保留0位小数,使用千分符if number_of_months % 6 == 0:monthly_deposit = monthly_deposit * (1 + semi_annual_raise) # 六月之期已到,加薪year_off_money(number_of_months, monthly_salary, semi_annual_raise, monthly_deposit)def problem_8():total_cost = float(input()) # total_cost为当前房价annual_salary = float(input()) # 年薪portion_saved = float(input()) / 100 # 月存款比例,输入30转为30%semi_annual_raise = float(input()) /100 # 输入每半年加薪比例,输入7转化为7%portion_down_payment = 0.3 # 首付比例,浮点数down_payment = portion_down_payment * total_cost # 首付款print('首付',down_payment)number_of_months = 0monthly_salary = annual_salary / 12monthly_deposit = monthly_salary * portion_saved # 每个月存的钱def year_off_money(number_of_months, monthly_salary, semi_annual_raise, monthly_deposit):enough = Truecurrent_savings = 0while enough:number_of_months += 1current_savings *= (1 + 0.0225 / 12)current_savings += monthly_depositif current_savings >= down_payment:print(f'需要{number_of_months}个月可以存够首付')enough = Falsereturnif number_of_months % 12 == 0:print("第{}个月月末有{:,.0f}元存款".format(number_of_months, current_savings))if number_of_months % 6 == 0:monthly_deposit = monthly_deposit * (1 + semi_annual_raise)year_off_money(number_of_months, monthly_salary, semi_annual_raise, monthly_deposit)def problem_8_1():total_cost = float(input()) # total_cost为当前房价annual_salary = float(input()) # 年薪portion_saved = float(input()) / 100 # 月存款比例,输入30转为30%semi_annual_raise = float(input()) /100 # 输入每半年加薪比例,输入7转化为7%portion_down_payment = 0.3 # 首付比例,浮点数down_payment = portion_down_payment * total_cost # 首付款print('首付',down_payment)number_of_months = 0monthly_salary = annual_salary / 12monthly_deposit = monthly_salary * portion_saved # 每个月存的钱current_savings = 0enough = Truewhile enough:number_of_months += 1current_savings *= (1 + 0.0225 / 12)current_savings += monthly_depositif current_savings >= down_payment:a = number_of_monthsenough = Falseif number_of_months % 12 == 0:print("第{}个月月末有{:,.0f}元存款".format(number_of_months, current_savings))if number_of_months % 6 == 0:monthly_deposit = monthly_deposit * (1 + semi_annual_raise)print(f'需要{number_of_months}个月可以存够首付') if __name__ == '__main__':problem_8_1()
这篇关于研一Python基础课程第三周课后习题分享(上)(含源代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!