大数跨境
0
0

美元和人民币的汇率兑换:Python语言的实现

美元和人民币的汇率兑换:Python语言的实现 数据皮皮侠
2020-03-26
0
导读:计算机程序最大的优势就是可以迭代和重现,作者“苦笑”在上了几次课结合自己课下学习,完成了这个汇率兑

     计算机程序最大的优势就是可以迭代和重现,作者“苦笑”在上了几次课结合自己课下学习,完成了这个汇率兑换的功能。虽然有些粗糙,但整个程序非常流畅与规范,定义函数,实现常规程序语句,主函数调用等等,是初学Python的同学用于训练的好例子。


 A.想做的事情:  在网站上爬取到美元人民币的实时汇率,然后再设计一个汇率换算器的程序,其功能是实现人民币(CNY)与美元(USD)之间的汇率转换,要先判断输入的是美元还是人民币,然后进行相应的转换计算。并且为了用户的方便,要使程序可以一直运行,直到用户选择退出。

    B.程序设计流程图:



  C.算法的实现及解读:  

 1#首先,要先在网上爬取美元人民币实时汇率,需要使用三个模块,其命令如下:
2import re
3import json
4import urllib.request
5#这三个模块可以爬取网站上我们所需要的的数据,保存到本地,并转化成程序可#识别的字符。
6url="http://webforex.hermes.hexun.com/forex/quotelist?code=FOREXUSDCNY&column=Code,Price"                      
7#选择网站api接口,网站是和讯外汇的行情数据网址为:http://quote.forex.hexun.com/USDCNY.shtml
8req = urllib.request.Request(url)
9f = urllib.request.urlopen(req)
10#向指定的url发送请求,并返回服务器响应的类文件对象
11html = f.read().decode("utf-8")
12#读取文件内容,并将utf-8编码表示的字符串转换为Unicode字符串
13s = re.findall("{.*}",str(html))[0]
14#使用正则表达式,在字符串中匹配出我需要的汇率字符串{"Data":[[["USDCNY",71099]]]}
15sjson = json.loads(s)
16#反序列化;把json字符串转化成python
17USDCNY = sjson["Data"][0][0][1]/10000
18print('当前美元人民币实时汇率为: {}人民币/美元'.format(USDCNY))
19#将爬取出的汇率赋值给USDCNY并输出结果
20#然后,流程图,首先我们需要判断用户是否需要继续使用,可以使用以下几行代码:
21currency_str_value = input('请输入带单位(USD或者CNY)的货币金额(退出程序请输入Q):')
22while currency_str_value != 'Q':
23print('程序已退出')
24#当用户选择继续使用时,我们直接在第二行代码循环语句while中继续判断是人民币还是美元,代码如下:
25 unit = currency_str_value[-3:]    #获取货币单位
26 if unit == 'CNY':                 #当货币单位是人民币时
27     exchange_rate = 1 / USD_  #汇率为1/6.77
28 elif unit == 'USD':                  #当货币单位是美元时
29     exchange_rate = USD_VS_RMB       #汇率为6.77
30 else:                                #当为其他的货币单位时
31     exchange_rate = -1              #汇率为-1
32 if exchange_rate != -1:             #当汇率不是-1时
33     in_money = eval(currency_str_value[:-3])   #获取输入货币的值convert_currency2 = lambda x:x * exchange_rate           #用lambda函数
34    out_money = convert_currency2(in_money)     
35 #调用lambda函数,进行汇率换算
36    print('转换后的金额:', out_money)            
37#输出换算后的金额
38 else:                #当汇率为-1
39    print('不支持该种货币!')                      
40    currency_str_value = input('请输入带单位(USD或者CNY)的货币金额(退出程序请输入Q):')
41#这样我们就实现了人民币与美元间的汇率转换,由于要使用函数,使程序模块化,可以将上述所以代码放进主函数main中,最后调用这个函数即可。
42#代码是:
43def main():
44if __name__ == '__main__':
45    main()

   

D.相关知识点:

1.input,print是输入输出

2.while循环语句:
结构:
while 判断条件:
执行语句……
判断所给的条件,对于符合其所给的条件,就循环执行其执行语句,不符合就不执行其执行语句
3.if 条件语句:
结构:
if 判断条件:
   执行语句……
else:
执行语句……
4.eval() 函数用来执行一个字符串表达式,并返回表达式的值。
5.lambda函数  用于简单的,能在一行内表示的函数
函数名=lambda参数列表:表达式,直接输出表达式的结构
6.注释,单行直接用#,多行”””
7.使用函数的优势:
○1便于阅读和复用,○2对一组表达特定功能表达式的封装,○3使程序模块化,这样不仅有助于代码的检测,同时使得你编写的代码不至于那么繁多复杂,便于观看。
8.re模块,json模块和urllib.request模块的使用,相关内容和使用方法可以直接在网站上查询
9.{n} .format(),形式为n(n为整数)的占位符将被format()第n个参数所代替。例如:
print('当前美元人民币实时汇率为: {}人民币/美元'.format(USDCNY)),输出结果为:
当前美元人民币实时汇率为: 7.1099人民币/美元


E. 完整代码:

 1import re
2import json
3import urllib.request
4
5#获取美元人民币的实时汇率
6def USD_VS_RMB():
7    """
8        在网站爬取美元与人民币的实时汇率
9    """

10    url = "http://webforex.hermes.hexun.com/forex/quotelist?code=FOREXUSDCNY&column=Code,Price"
11    req = urllib.request.Request(url)
12    f = urllib.request.urlopen(req)
13    html = f.read().decode("utf-8")
14
15    s = re.findall("{.*}", str(html))[0]
16    sjson = json.loads(s)
17    USDCNY = sjson["Data"][0][0][1] / 10000
18    print('当前美元人民币实时汇率为: {}人民币/美元'.format(USDCNY))
19return USDCNY
20
21
22def main():
23    """
24    主函数
25    """

26    #调用实时汇率
27    USDCNY = USD_VS_RMB()
28
29    #带单位的货币的输入
30    currency_str_value = input('请输入带单位(USD或者CNY)的货币金额(退出程序请输入Q):')
31
32    while currency_str_value != 'Q':
33
34        #获取货币单位
35        unit = currency_str_value[-3:]
36
37        #判断人民币还是美元
38        if unit == 'CNY':
39            exchange_rate = 1 / USDCNY
40
41        elif unit == 'USD':
42            exchange_rate = USDCNY
43
44        else:
45            exchange_rate = -1
46
47        if exchange_rate != -1:
48            in_money = eval(currency_str_value[:-3])
49
50            #使用lambda定义函数
51            convert_currency2 = lambda x: x * exchange_rate
52
53            #调用lambda函数
54            out_money = convert_currency2(in_money)
55
56            print('转换后的金额:', out_money)
57        else:
58            print('不支持该种货币!')
59        print('************************')
60        currency_str_value = input('请输入带单位(USD或者CNY)的货币金额(退出程序请输入Q):')
61    print('程序已退出')
62
63#调用函数
64if __name__ == '__main__':
65    main()

    

  F. 结果显示:


【声明】内容源于网络
0
0
数据皮皮侠
社科数据综合服务中心,立志服务百千万社科学者
内容 2137
粉丝 0
数据皮皮侠 社科数据综合服务中心,立志服务百千万社科学者
总阅读2.8k
粉丝0
内容2.1k