[英]Trying to make a random character generator but won't always get an answer
I'm trying to make a random character generator for D&D. 我正在尝试为D&D创建一个随机字符生成器。 So far I am able to make a decision on what class to pick based on the two largest stats but for some reason every now and then I get no answer. 到目前为止,我可以根据两个最大的统计信息来决定选择哪个班级,但是由于某些原因,我时不时地没有答案。 My code is fine as far as I can tell but I am a beginner in python. 据我所知,我的代码还不错,但是我是python的初学者。 I would love to know why it won't always return answers and how to fix it. 我很想知道为什么它不会总是返回答案以及如何解决它。
data = [str,int,dex,con,wis,cha]
largest = None
second_largest = None
for a in data:
if not largest or a > largest:
if largest:
second_largest = largest
largest = a
if largest == wis and second_largest == cha or largest == cha and second_largest == str or largest == str and second_largest == cha or largest == str and second_largest == int:
print ("PALADIN")
elif largest == str and second_largest == dex or largest == str and second_largest == con or largest == con and second_largest == str:
print ("BARBARIAN")
elif largest == str and second_largest == wis or largest == con and second_largest == wis or largest == wis and second_largest == str or largest == wis and second_largest == con:
print ("CLERIC")
elif largest == int and second_largest == str or largest == int and second_largest == con or largest == con and second_largest == int or largest == wis and second_largest == int:
print ("WIZARD")
elif largest == int and second_largest == dex or largest == dex and second_largest == int or largest == cha and second_largest == wis:
print ("ROGUE")
elif largest == int and second_largest == wis:
print ("DRUID")
elif largest == int and second_largest == cha or largest == con and second_largest == cha or largest == cha and second_largest == int:
print ("SORCERER")
elif largest == dex and second_largest == str:
print ("MONK")
elif largest == dex and second_largest == con or largest == con and second_largest == dex:
print ("FIGHTER")
elif largest == dex and second_largest == wis or largest == wis and second_largest == dex:
print ("RANGER")
elif largest == dex and second_largest == cha:
print ("BARD")
elif largest == cha and second_largest == dex or largest == cha and second_largest == con:
print ("WARLOCK")
Your code for getting the largest and second largest isn't right: 您获得最大和第二大的代码不正确:
largest = None
second_largest = None
for a in data:
if not largest or a > largest:
if largest:
second_largest = largest
largest = a
If the largest attribute appears before the second largest, second_largest
won't be filled in. A short and readable way would be just to use a sort, assuming efficiency isn't that much of a concern: 如果最大属性出现在第二大属性之前,则不会填充second_largest
。一种简短易读的方式就是使用排序,假设效率并不是您所关心的重点:
largest, second_largest = sorted(data, reverse=True)[:2]
If your largest element is the first, you will never get the second_largest assigned. 如果最大的元素是第一个,则永远不会分配第二个最大的元素。 You can change it to: 您可以将其更改为:
entlargest = -float('inf')
second_largest = -float('inf')
for a in data:
if a > second_largest:
second_largest = a
if second_largest > largest:
largest, second_largest = second_largest, largest
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.