简体   繁体   English

尝试制作一个随机的字符生成器,​​但不会总是得到答案

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM