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。但是,如果单独使用,程序员可以获得全部份额等。此外,也可能存在受益人可以与其他受益人共享提醒的情况。我真的很感谢你的贡献。我很感激@不客气。这只是基本代码;您可以根据需要定制附加逻辑。