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)