【问题标题】:Trying to make a random character generator but won't always get an answer试图制作一个随机字符生成器,​​但并不总是得到答案
【发布时间】:2017-02-20 15:48:26
【问题描述】:

我正在尝试为 D&D 制作一个随机字符生成器。到目前为止,我能够根据两个最大的统计数据来决定选择哪个课程,但由于某种原因,我时不时地得不到答案。据我所知,我的代码很好,但我是 python 的初学者。我很想知道为什么它不会总是返回答案以及如何解决它。

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")

【问题讨论】:

  • 很难说。您的代码有几个缺陷。你能找出一个输入失败的具体例子吗?尝试提供一个示例,其中包含输入、获得的输入(如果有)和预期输出。此外,请给出data 列表值的一个具体示例。
  • 第一个:没有其他声明。第二:从 6 个元素中选择 2 个元素,有 15 个可能的结果。尊重顺序使30种不同的组合(最大和第二大不相等)
  • 如果有人想知道是否涵盖了所有可能性(它们是):gist.github.com/minitech/97723bb4ae8d19b3b6b320a4995afb91
  • 我认为我对所有 30 种可能性都有潜在的反应。我的问题是,当代码运行时,它时不时地确定并显示统计信息,然后我没有得到应该选择哪个类的响应。响应只是空白然后继续。它给出了大约 7/10 次的响应,但我不知道为什么它不会一直工作。
  • 基本调试:printlargestsecond_largest选中后。

标签: python


【解决方案1】:

获取最大和第二大的代码不正确:

largest = None
second_largest = None

for a in data:
    if not largest or a > largest:
        if largest:
            second_largest = largest
        largest = a

如果最大的属性出现在第二大的属性之前,second_largest 将不会被填写。一个简短易读的方法是使用排序,假设效率不是那么重要:

largest, second_largest = sorted(data, reverse=True)[:2]

【讨论】:

  • 谢谢。我现在就试试这个。
【解决方案2】:

如果你的最大元素是第一个,你永远不会得到 second_largest 分配。 您可以将其更改为:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 2015-07-07
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    相关资源
    最近更新 更多