题目描述
【货币单位换算】
记账本上记录了若干条多国货币金额,需要转换成人民币分(fen),汇总后输出。
每行记录一条金额,金额带有货币单位,格式为数字+单位,可能是单独元,或者单独分,或者元与分的组合。
要求将这些货币全部换算成人民币分(fen)后进行汇总,汇总结果仅保留整数,小数部分舍弃。
元和分的换算关系都是1:100,如下:
1CNY=100fen(1元=100分)
1HKD=100cents(1港元=100港分)
1JPY=100sen(1日元=100仙)
1EUR=100eurocents(1欧元=100欧分)
1GBP=100pence(1英镑=100便士)
汇率如下表:
CNY | JPY | HKD | EUR | GBP |
100 | 1825 | 123 | 14 | 12 |
即100CNY=1825JPY=123HKD=14EUR=12GBP
输入描述
第一行输入为N,N表示记录数。0<N<100
之后N行,每行表示一条货币记录,且该行只会是一种货币。
输出描述
将每行货币转换成人民币分(fen)后汇总求和,只保留整数部分。
输出格式只有整数数字,不带小数,不带单位。
该题是纯逻辑题目,使用正则提取对应单位的数字即可
代码一:
import re,math
count = 0
n = int(input())
for i in range(n):
s = input()
ret = re.findall(r'\d+CNY|\d+fen|\d+HKD|\d+cents|\d+JPY|\d+sen|\d+EUR|\d+eurocents|\d+GBP|\d+pence', s)
for i in ret:
if i.endswith('CNY'):
count += int(i.strip('CNY')) * 100
elif i.endswith('fen'):
count += int(i.strip('fen'))
elif i.endswith('HKD'):
count += int(i.strip('HKD'))/123 * 10000
elif i.endswith('cents'):
count += int(i.strip('cents'))/123 *100
elif i.endswith('JPY'):
count += int(i.strip('JPY'))/1825 * 10000
elif i.endswith('sen'):
count += int(i.strip('sen'))/1825 * 100
elif i.endswith('EUR'):
count += int(i.strip('EUR'))/14 * 10000
elif i.endswith('eurocents'):
count += int(i.strip('eurocents'))/14 * 100
elif i.endswith('GBP'):
count += int(i.strip('GBP'))/12 * 10000
else:
count += int(i.strip('pence'))/12 * 100
print(math.floor(count))
代码二:
import math
import re
n = int(input())
arr = [input() for i in range(n)]
def getResult(arr):
pattern = r"(\d+)((CNY)|(JPY)|(HKD)|(EUR)|(GBP)|(fen)|(cents)|(sen)|(eurocents)|(pence))"
exchage = {
"CNY": 100,
"JPY": 100 / 1825 * 100,
"HKD": 100 / 123 * 100,
"EUR": 100 / 14 * 100,
"GBP": 100 / 12 * 100,
"fen": 1,
"cents": 100 / 123,
"sen": 100 / 1825,
"eurocents": 100 / 14,
"pence": 100 / 12
}
ans = 0
for s in arr:
result = re.findall(pattern, s)
for item in result:
amount = item[0]
unit = item[1]
ans += int(amount) * exchage[unit]
return math.floor(ans)
print(getResult(arr))