完全不懂(=_=),有无人教教我,万分感谢!!能告诉我每个代码的意思最好
题目给的输入输出例子的格式看一下
from random import *
def makechange(num):
changes = {}
numint = int(num)
numdec = round(num - numint, 2)
Coins = [50, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05, 0.02, 0.01] # 创建可用的货币面值列表
i = 0
for n in (numint, numdec):
while n > 0: # 如果剩下的钱大于0,就一直减去最大的可用货币
if n >= Coins[i]:
changes[Coins[i]] = changes.get(Coins[i], 0) + 1 # 更新字典,使用货币数量加一
n = round(n - Coins[i], 2) # 不断用当前面值的货币找零,剩下的钱继续
else:
i += 1 # 如果当前货币面值比剩下的钱少,就检查列表里下一个货币
else:
i = 6 # 整数部分找完,跳到小数部分的货币列表
return changes
if __name__ == "__main__":
seed(0)
for i in range(10):
num = round(random() * 100, 2)
print(sorted(makechange(num).items(), key=lambda item: item[0], reverse=True))
def makechange(num):
changes = {}
numint = int(num)
numdec = round(num - numint, 2)
while numint > 0:
if numint >= 50:
changes["50元"] = changes.get("50元", 0) + 1
numint -= 50
elif numint >= 20:
changes["20元"] = changes.get("20元", 0) + 1
numint -= 20
elif numint >= 10:
changes["10元"] = changes.get("10元", 0) + 1
numint -= 10
elif numint >= 5:
changes["5元"] = changes.get("5元", 0) + 1
numint -= 5
elif numint >= 2:
changes["2元"] = changes.get("2元", 0) + 1
numint -= 2
elif numint >= 1:
changes["1元"] = changes.get("1元", 0) + 1
numint -= 1
while numdec > 0:
if numdec >= 0.5:
changes["5角"] = changes.get("5角", 0) + 1
numdec -= 0.5
elif numdec >= 0.2:
changes["2角"] = changes.get("2角", 0) + 1
numdec -= 0.2
elif numdec >= 0.1:
changes["1角"] = changes.get("1角", 0) + 1
numdec -= 0.1
elif numdec >= 0.05:
changes["5分"] = changes.get("5分", 0) + 1
numdec -= 0.05
elif numdec >= 0.02:
changes["2分"] = changes.get("2分", 0) + 1
numdec -= 0.02
elif numdec >= 0.01:
changes["1分"] = changes.get("1分", 0) + 1
numdec -= 0.01
return changes
程序填空,固化 了思路
from random import *
def makechange(num):
changes = {}
numint = int(num)
numdec = round(num - numint, 2)
l = {5000:'50元', 2000:'20元', 1000:'10元', 500:'5元', 200:'2元', 100:'1元', 50:'5角', 20:'2角', 10:'1角', 5:'5分', 2:'2分', 1:'1分'}
numint_ = int((numint + numdec) * 100)
for i in l:
x, y = divmod(numint_, i)
if x > 0: changes[i] = x
numint_ = y
return changes
if __name__ == "__main__":
seed(0)
for i in range(10):
num = round(random() *100, 2)
print(num, '元')
print(sorted(makechange(num).items(), key = lambda item: item[0], reverse = True))
#!/usr/bin/nve python
# coding: utf-8
from random import * # 在实际编程中一般不会使用这种载入所有方法的方式,用到具体方法则载入具体方法,更“经济”。
def makechange(num):
''' 找出给出金额的钱币张数组合 '''
print(f"\n{num}元:", end='')
changes = {} # 钱币组合字典。
numint = int(num) # 输入金额整数部分。
numdec = round(num-numint, 2) # 输入金额小数部分。
# 请在此添加代码,补全makechange
# -----------Begin-------------
ch = changes # 给钱币组合字典取别名,简化代码书写。
yuan = [50, 20, 10, 5, 2, 1]
jiao = [5, 2, 1]
fen = [5, 2, 1] # yuan、jiao、fen为币值。
# 依次轮询找出各种币值钱币张数
for y in yuan: # 找元币。
if numint <= 0: break
#print(numint, y, numint//y)
if (other := numint//y): # 海象运算符赋值,方便后续代码引用。
ch[f"{y}元"] = round(other) # 张币值张数存入字典。
numint -= other*y # 减去已找币值金额。
numdec *= 10 # 化小数为角。
for j in jiao:
if numdec <= 0: break
#print(numdec, j, numdec//j)
if (other := numdec//j):
ch[f"{j}角"] = round(other)
numdec -= other*j
numdec *= 10 # 化小数为分。
for f in fen:
if numdec <= 0: break
#print(numdec, f, numdec//f)
if int(other := numdec//f):
ch[f"{f}分"] = round(other)
numdec -= other*f
# -----------End----------------
return changes # 返回钱币组合字典
if __name__ == '__main__': # 直接执行本*.py文件,才执行后面的代码。
seed(0) # 设置随机数种子,让产生的随机数有稳定值。
for i in range(10): # 轮询10次。
num = round(random()*100, 2) # 随机生成100以内的两位小数。
print(sorted(list(makechange(num).items()), key=lambda item: item[0][-1], reverse=True)) # 输出以钱币种类排序的钱币张数组合。
#!/usr/bin/nve python
# coding: utf-8
from random import * # 在实际编程中一般不会使用这种载入所有方法的方式,用到具体方法则载入具体方法,更“经济”。
def makechange(num):
''' 找出给出金额的钱币张数组合 '''
print(f"\n{num}", end='元:')
changes = {} # 钱币组合字典。
money = [50, 20, 10, 5, 2, 1,
0.5, 0.2, 0.1,
0.05, 0.02, 0.01] # 币值列表。
flag = '' # 钱币单位初值。
for i in money: # 找币。
#print(f"{i}, {round(num,2)}, {round(num//i)}")
if i >= 1:
i_s = i
flag = '元'
elif i >= 0.1:
i_s = round(i*10)
flag = '角'
elif i >= 0.01:
i_s = round(i*100)
flag = '分'
if num-num%i:
if num<0.01:
changes[f"{i_s}{flag}"] = round(round((num - num%i), 2)/i)
else:
changes[f"{i_s}{flag}"] = round((num - num%i)/i)
num = num%i
if num <= 0:
break
return changes # 返回钱币组合字典
if __name__ == '__main__': # 直接执行本*.py文件,才执行后面的代码。
seed(0) # 设置随机数种子。
for i in range(10): # 轮询10次。
num = round(random()*100, 2) # 随机生成100以内的两位小数。
print(sorted(list(makechange(num).items()), key=lambda item: item[0][-1], reverse=False)) # 输出以钱币种类排序的钱币张数组合。