繁体   English   中英

关于python的初学者问题

[英]beginner question about python

以下代码无法实现预期的效果,我也不知道为什么。 我是python的新手,非常困惑。 两次我都显示x.attributes,它们都设置为0。rollStats()是否不应该更新它们?

import random

def roll(size):
        return random.randint(1, size)

class lifeform:
        def __init__(self, name):
                self.name = name
                self.attributes = { 'STR': 0, 'DEX': 0, 'CON': 0, 'INT': 0, 'WIS': 0, 'CHA': 0, }

        def rollAttribute(self):
                # roll four 6sided di
                d1 = roll(6)
                d2 = roll(6)
                d3 = roll(6)
                d4 = roll(6)

                # discard lowest roll
                if d1 < d2 and d1 < d3 and d1 < d4:     total = d2 + d3 + d4
                elif d2 < d1 and d2 < d3 and d2 < d4:   total = d1 + d3 + d4
                elif d3 < d1 and d3 < d2 and d3 < d4:   total = d1 + d2 + d4
                else:                                   total = d1 + d2 + d3

                return total

        def rollStats(self):
                self.attributes['STR'] = self.rollAttribute()
                self.attributes['DEX'] = self.rollAttribute()
                self.attributes['CON'] = self.rollAttribute()
                self.attributes['INT'] = self.rollAttribute()
                self.attributes['WIS'] = self.rollAttribute()
                self.attributes['CHA'] = self.rollAttribute()
x = lifeform("test")
print x.attributes
x.rollStats()
print x.attributes

编辑:这是我得到的输出

$ python fight.py
{'DEX': 0, 'CHA': 0, 'INT': 0, 'WIS': 0, 'STR': 0, 'CON': 0}
{'DEX': 0, 'CHA': 0, 'INT': 0, 'WIS': 0, 'STR': 0, 'CON': 0}

(我本来在拼写“ WIS”为“ WIZ”的代码中有错字,但我对此进行了纠正,但问题仍然存在)

我也每次运行都会得到随机值。

至于样式,您可以大幅缩减该代码:

class lifeform:
    def __init__(self, name):
        self.name = name
        self.attributes = { 'STR': 0, 'DEX': 0, 'CON': 0, 'INT': 0, 'WIZ': 0, 'CHA': 0, }

    def rollAttribute(self):

        # roll four 6sided di
        dice = [roll(6) for i in range(4)]

        # discard lowest roll
        return sum(dice) - min(dice)

    def rollStats(self):
        for key in self.attributes:
            self.attributes[key] = self.rollAttribute()

这不能回答您的问题,只是一个旁注。 我将其放在注释中,但无法格式化。

当您这样做时,我总是发现dnd die rolling更加优雅:

d1 = roll(6)
d2 = roll(6)
d3 = roll(6)
d4 = roll(6)

min = d1;
if d2 < min: min = d2
if d3 < min: min = d3
if d4 < min: min = d4

return d1 + d2 + d3 + d4 - min

Python是一种非负整数矩阵形式的编程语言,该矩阵小于相邻路线的元素所占的百分比,该元素将从第一个元素开始到最后一个元素是最小元素结束Vmjmv

它应该,当我运行您的代码时,它也可以。

> python temp.py
{'DEX': 0, 'CHA': 0, 'INT': 0, 'WIS': 0, 'STR': 0, 'CON': 0}
{'DEX': 17, 'CHA': 7, 'INT': 15, 'WIS': 12, 'STR': 15, 'CON': 7}

尽管注意您在初始化程序中有Wisdom的缩写拼写错误(WIZ不是WIS),所以起初并没有对其进行更新。 除此之外,它对我来说还不错。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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