从字符串输入中收集数值数据

时间:2017-09-27 16:32:49

标签: python vba

我想获得用户输入的信用评级,例如AAA,A,BBB等,然后为此分配利率。例如,如果用户具有良好的信用评级,例如AAA,我将收取1%的利率。

我已经插入了我在VBA中用于此特定功能的代码,所以你有一个我想要的想法/它是如何工作的,虽然我删除了各种行,因为我只添加了代码以更好地透视我的内容我想做。

creditRate = InputBox("Please enter credit rating:")

If creditRate = "AAA" Then GoTo intcalc Else
If creditRate = "A" Then GoTo intcalc Else
If creditRate = "BBB" Then GoTo intcalc Else
If creditRate = "BB" Then GoTo intcalc Else
If creditRate = "CCC" Then GoTo intcalc Else
If creditRate = "DDD" Then GoTo intcalc Else

If creditRate = "AAA" Then intRate = 0.01 Else
If creditRate = "A" Then intRate = 0.03 Else
If creditRate = "BBB" Then intRate = 0.05 Else
If creditRate = "BB" Then intRate = 0.06 Else
If creditRate = "CCC" Then intRate = 0.08 Else
If creditRate = "DDD" Then intRate = 0.1 Else

2 个答案:

答案 0 :(得分:0)

在Python中,这很可能是使用dict计算的,dict是一种基于哈希的数据结构,允许查找(相当)任意键。这样的dict可以创建如下

rate_dict = {"AAA": 0.01, "A": 0.03, "BBB", 0.05, "BB", 0.06, "CCC": 0.08, "DDD": 0.1}

然后,您将使用

设置利率(使用Python的标准命名约定)
int_rate = rate_dict[credit_rate]

如果根据用户输入设置credit_rate,您可能需要检查它是否有效。你可以用

做到这一点
if credit_rate in rate_dict:
    ...

如果要询问用户有效输入,请从无效值开始并迭代,直到用户提供了有效值。一个简单的方法是

credit_rate = '*'
while credit_rate not in rate_dict:
    credit_rate = input("Credit rating: ")

如果您想提供错误消息,那么可接受值为break的无限循环可能更具可读性。

while True:
    credit_rate = input("Credit rating: ")
    if credit_rate in rate_table:
        int_rate = rate_dict[credit_rate]
        break
    print(credit_rate, "is not a known credit rating"

使用Python 2的读者应该注意使用内置的raw_input,因为旧版本input会尝试将输入评估为Python表达式。

答案 1 :(得分:0)

Python还提供了一个默认字典,如果字典中不存在键,则返回默认值。

from collections import defaultdict
rates = defaultdict(lambda: None, { 
                     "AAA" : 0.01, "A" : 0.03,
                     "BBB" : 0.05, "BB" : 0.06, 
                     "CCC" : 0.08, "DDD" : 0.1  
                      })

所以

rate = rates['AAA'] #rate = 0.01

rate = rates['D']) #rate = None