Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python的替代技术”;“如果……如果……如果……否则”;循环超过1500个选项_Python_If Statement_Python 3.4 - Fatal编程技术网

Python的替代技术”;“如果……如果……如果……否则”;循环超过1500个选项

Python的替代技术”;“如果……如果……如果……否则”;循环超过1500个选项,python,if-statement,python-3.4,Python,If Statement,Python 3.4,下面是我正在进行的一个社区项目的示例代码 cat1 = 'Engr, Bricklayer, Attendant' cat2 = 'Programmer, Artist, Engr, Servant' cat3 = 'Programmer, Typist' amount = float(input("Enter amount: ")) choice = input("Select Beneficiary: ") print("------------------------------

下面是我正在进行的一个社区项目的示例代码

cat1 = 'Engr, Bricklayer, Attendant'
cat2 = 'Programmer, Artist, Engr, Servant'
cat3 = 'Programmer, Typist'


amount = float(input("Enter amount: "))

choice = input("Select Beneficiary: ")


print("-----------------------------------")

if choice == cat1:
    print("Name: Engr\nShare: 1/6 (1 cikin 6)\nBenefits: N" + str((amount/6) * 1))
    print("-----------------------------------")
    print("Name: Bricklayer\nShare: 1/2 (3 cikin 6)\nBenefits: N" + str((amount/6) * 3))
    print("-----------------------------------")
    print("Name: Attendant\nShare: 1/3 (2 ciin 6)\nBenefits: N" + str((amount/6) * 2))
    print("-----------------------------------")
    print("Jimilla: N" + str(sum([(amount/6) * 1, (amount/6) * 3, (amount/6) * 2])))

elif choice == cat2:
    print("Name: Programmer\nShare: 1/8 (3 cikin 24)\nBenefits: N" + str((amount/24) * 3))
    print("-----------------------------------")
    print("Name: Artist\nShare: 1/6 (4 cikin 24)\nBenefits: N" + str((amount/24) * 4))
    print("-----------------------------------")
    print("Name: Engr\nShare: 1/6 (4 cikin 24)\nBenefits: N" + str((amount/24) * 4))
    print("-----------------------------------")
    print("Name: Servant\nShare: Ragowa (13 cikin 24)\nBenefits: N" + str((amount/24) * 13))
    print("-----------------------------------")
    print("Jimilla: N" + str(sum([(amount/24)*3,(amount/24)*4,(amount/24)*4,(amount/24)*13])))
以下是从用户接收值后的输出:

Enter amount: 2540000
Select Beneficiary: Engr, Bricklayer, Attendant
-----------------------------------
Name: Engr
Share: 1/6 (1 cikin 6)
Benefits: N423333.3333333333
-----------------------------------
Name: Bricklayer
Share: 1/2 (3 cikin 6)
Benefits: N1270000.0
-----------------------------------
Name: Attendant
Share: 1/3 (2 ciin 6)
Benefits: N846666.6666666666
-----------------------------------
Jimilla: N2540000.0
>>> 
如您所见,我使用If…elif…else控制语句来遍历代码顶部定义的类别中的元素。我必须创建大约1500个不同的类别,其中包含有权享有不同股份的不同要素/受益人。有没有什么技巧可以代替If…elif…else在选项之间循环

我是Python新手。上面代码的输出是我想要的,但是使用If…elif…else来检查1500个类别的用户输入将有点单调,或者更确切地说,是忙碌


我需要您的帮助。

首先,您可以将所有受益人编码为以下格式的CSV文件

[受益人、分子、二名分子]

如下图所示

category.csv
内容:

Engr, 1, 6
Bricklayer, 3, 6
Attendant, 2, 6
Programmer, 3, 24
Artist, 4, 24
Engr, 4, 24
Servant, 13, 24
然后将数据转换为字典并进行相应的操作。下面的代码将为您提供类似的输出

import csv

beneMap = {}

with open("category.csv") as f:
    csvFile = csv.reader(f)
    for row in csvFile:
        beneMap[row[0]] = (row[1], row[2])

def getJimilla(beneMap, benef, amount):
    benList = benef.split(', ')
    jimilla = 0
    for name in benList:
        ben = beneMap[name]
        jtemp = amount*int(ben[0])/int(ben[1])
        print("Name: "+name 
              +"\nShare: "+ben[0]+"/"+ben[1]+" ("+ben[0]+" cikin "+ben[1]+")"
              +"\nBenefits: N" + str(round(jtemp,2))
              +"\n-----------------------------------")
        jimilla += jtemp
    print("Jimilla: N"+str(round(jimilla,2)))

amount = float(input("Enter amount: "))
choice = input("Select Beneficiary: ")

print("-----------------------------------")

getJimilla(beneMap, choice, amount)
样本运行:

Enter amount: 2540000
Select Beneficiary: Engr, Bricklayer, Attendant
-----------------------------------
Name: Engr
Share:  4/ 24 ( 4 cikin  24)
Benefits: N423333.33
-----------------------------------
Name: Bricklayer
Share:  3/ 6 ( 3 cikin  6)
Benefits: N1270000.0
-----------------------------------
Name: Attendant
Share:  2/ 6 ( 2 cikin  6)
Benefits: N846666.67
-----------------------------------
Jimilla: N2540000.0

请注意,当给出输入序列时,类别是可以理解的,因此无需在CSV文件中携带有关受益人类别的额外信息。

字典是一个不错的选择。并使打印值具有唯一性,并使其成为函数的形式。可能会有帮助吗?建立函数字典,构造要打印的字符串。非常感谢。我真的很感激。然而,正如我所说的,我对python是新手。一个示例代码将真正帮助我了解如何重新考虑代码。我再次感谢你!我会将int转换移动到beneMap填充,并使用string formap进行打印……你说得对,@Copperfield。我最初认为,从技术上讲,保留语义是正确的。然而,我把它作为一个字符串,以便集中精力减少OP可能需要的代码长度。否则,您将看到更多的
str()
转换。非常感谢@ÉbeIsaac。这正是我想要的。虽然在实际执行中,受益人有不同的份额。例如,一个受益人可以有1/2、2/3、1/6,这取决于所选受益人的组合。比如,如果选择了程序员和助理,程序员的份额将是3/6,而艺术家的份额将是2/6。但是,如果单独使用,程序员可以获得全部份额等。此外,也可能存在受益人可以与其他受益人共享提醒的情况。我真的很感谢你的贡献。我很感激@不客气。这只是基本代码;您可以根据需要定制附加逻辑。