计算机导论课作业 04(基于Python)

2、(10 points)《计算机导论》程序练习2.2.1,

i_number = input("请输入一个二进制数字")
sum = 0
for i in i_number:
    sum += sum
    sum += int(i)
    
print(sum)

3、(10 points)《计算机导论》程序练习2.2.2

in_num = int(input("请输入一个10进制的数字"))
L = []
while(in_num  >= 1):
    modu = in_num % 2
    in_num = int(in_num / 2)
    L.append(modu)

out_num = ""
for i in range(len(L)-1,-1,-1):
    
    out_num += str(L[i])

print(out_num)

4、(15 points)《编程导论》老虎机游戏的练习题2.5.4

import random
money = int(input("请输入本金"))
test_number = int(input("请输入测试次数"))
initial = money
count1 = 0
count2 = 0
for i in range(test_number):
    r = random.random()
    money -= 1
    if(r < 0.6):prize = 0 
    elif(r < 0.8):
        prize = 1
        count1 += 1
    elif(r < 0.9):
        prize = 2
        count1 += 1
    else:
        prize = 3
        count1 += 1
    money += prize
    count2 += 1
    if( money == 0):break
print("一共玩了",count2,"次")
print("胜利的次数为",count1,"次")
print("手中剩余钱数为",money)

6、(10 points)《编程导论》习题2.14。请不要用递归完成此程序。我们以后考试时可能会问你此题如何用递归完成,但是现在请不用。

def ite_merge(in1,in2):
    out = []
    for i in range(len(in1)+len(in2)):
        if len(in1) == 0 and  len(in2) == 0:
            return out
        elif len(in1) == 0:
            out.append(in2.pop(0))
        elif len(in2) == 0:
            out.append(in1.pop(0))
        elif in1[0] <= in2[0]:
            out.append(in1.pop(0))
        else:
            out.append(in2.pop(0))
    print(out)

ite_merge([1,5,6],[2,3,7])

7、
大舅要贷款买房,知道你是华师大计算机专业的学生,认为你什么都懂,所以就请你为他解释并分析贷款的计算方式。你学了基本编程后自然功力大为增进,因此准备写个Python程序来回答大舅的疑问。
这个题目包含三个层面:探索、编程及分析,我们要自行探索现在银行最通用的贷款方式“等额本息”的原理,我们要利用编程计算出还款金额、每年所付出本金和利息,等等,最后是分析利弊得失。完成这个题目后,你已经比你中学同学上商学院一年级的要厉害多了!
首先假设本金为A,月利率为r,贷款期限为n个月,
a) (5 points)使用”等额本息”方式,请推导并说明每月还款金额的公式,请自行到网上探索;
b) (10 points)编写Python程序,假设贷款的本金为80万,年利率6%(月利率是它的1/12),贷款30年
(1)求出每月还款金额;

loan = 8e5
pro = 0.005
month = 30 * 12
repay = loan*pro*pow((1.0+pro),month) /(pow((1.0+pro),month) - 1)
print(repay)

2)列出每年归还的本金及利息,以及全部交付的本金及利息;想想为什么要付这么多的利息啊?你大舅问你是不是前几年付的钱大部分都是付给利息啊?

loan = 8e5
int_rate = 0.005
month = 30 * 12
repay = loan*int_rate*pow((1.0+int_rate),month) /(pow((1.0+int_rate),month)-1)

def pri_int(loan,int_rate,year):
    month = 12*year
    repay_month = loan*int_rate*pow((1.0+int_rate),month) /(pow((1.0+int_rate),month)-1)
    
    
    for i in range(year):
        sum_int = 0
        sum_loan = 0
        repay_loan = 0
        for j in range(12):
            repay_int = loan * int_rate
            sum_int += repay_int
            repay_loan = repay_month - repay_int
            loan -= repay_loan
            sum_loan += repay_loan
        print('第',i+1,"年利息的偿还为",sum_int)
        print('第',i+1,"年本金的偿还为",sum_loan)
            
pri_int(loan,int_rate,30)

c) (5 points)重复前面题目b),但是贷款期限为20年;利息是不是少了很多?
d) (10 points)大舅为了要节省利息,所以想早点还款,如前所述,贷款期限为20年,但是在第三年结束时大舅提前多归还银行本金20万(注意是本金),注意这个时候大舅归还了3年原来每月还的本金部分和额外的20万本金。若以后每月还款金额维持原状(最后一个月还款数可以较少),那么本来需要240个月还清的贷款,现在需要多少个月还清?不准用log在公式上计算。

loan = 8e5
int_rate = 0.005
month = 240
repay = loan*int_rate*pow((1.0+int_rate),month) /(pow((1.0+int_rate),month)-1)

#目标是为了计算剩余偿还的月数

repay_month = loan*int_rate*pow((1.0+int_rate),month) /(pow((1.0+int_rate),month)-1)
    

for i in range(3):
   
        
        
    month_load = 0
    for j in range(12):#每年应该教的内容
        month_int = loan * int_rate
        month_load = repay_month - month_int
        loan -= month_load
#重复三年,来处理利息和本金

loan -= 2e5  

count = 0
while(loan > 0):
    month_int = loan * int_rate
    month_load = repay_month - month_int
    loan -= month_load
    count += 1
 
print(count+36)

e) (10 points)另外一种贷款计算方式叫做“等额本金”,请到网上查询。请以20年贷款80万,年利率6%为例,为简单起见,以“月”为单位,不以“天”为单位,请编程计算出使用等额本金方式所支付的利息总数,以及列出前12个月每月所还的金额,并且请从利息的角度说明它与等额本息的差异,请分析两者,等额本息和等额本金,的优劣,为什么现在银行都喜欢用等额本息方式来计算贷款?

loan = 8e5
int_rate = 0.005
month = 30 * 12
def pri(loan,int_rate,year):
    month = 12 * year
    month_load = loan / month
    sum_int = 0
    for i in range(year):
        year_int = 0
        for j in range(12):
            month_int = loan * int_rate
            loan -= month_load
            year_int += month_int
            #print("第",j+1,"月的利息支出为",month_int)
        sum_int += year_int
        #print("第",i,"年的利息支出为",year_int)
    print("总利息为",sum_int)
pri(loan,int_rate,30)

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值