小编tee*_*eee的帖子

为比标准牌组中更复杂的扑克牌类型制作课程的好方法?

我对面向对象编程非常陌生,并且正在尝试通过制作一个简单的纸牌游戏(似乎是传统的!)来开始学习 Python。我已经完成了以下工作正常的示例,并教我如何PlayingCard()创建类的多个实例以创建类的实例Deck()

class PlayingCard(object):
    def __init__(self, suit, val):
        self.suit = suit
        self.value = val

    def print_card(self):
        print("{} of {}".format(self.value, self.suit))

class Deck(object):
    def __init__(self):
        self.playingcards = []
        self.build()

    def build(self):
        for s in ["Spades", "Clubs", "Diamonds", "Hearts"]:
            for v in range(1,14):
                self.playingcards.append(PlayingCard(s,v))

deck = Deck()
Run Code Online (Sandbox Code Playgroud)



我现在想用更复杂的卡片制作一些东西,而不仅仅是标准的 52 副牌(它有很好的递增值)。我想到的牌组是大富翁纸牌游戏:

在此处输入图片说明

卡片有 3 种基本类型 - 行动卡片、财产卡片和金钱卡片。动作卡执行不同的动作,属性卡属于不同的颜色组,钱卡可以有不同的值。此外,属性卡可以是“通配符”,并且可以用作两组之一的一部分。最后,每张卡还具有等值的货币价值(在每张卡的顶角标明)。在租金行动卡中,该卡只能适用于卡上标明的颜色属性。

我的问题通常是如何处理这样的情况,以及将这些不同的卡片包含在基于类的 Python 程序中的好方法是什么?我应该保留我的单一PlayingCard()课程,并且只有很多输入,例如PlayingCard(type="PROPERTY", value="3M"). 还是会更好地创建单独的类,如ActionPlayingCard()PropertyPlayingCard()等?或者,还有更好的方法?正如我所说,我刚刚开始在这里学习,以及如何根据更高级别的设计来组织这些类型的情况。

非常感谢。

python oop class instance object-oriented-analysis

9
推荐指数
2
解决办法
541
查看次数

在组织 InfluxDB 数据库时,这两种方法中的哪一种最受青睐?

我试图决定如何在 InfluxDB 数据库中组织测量(我相信他们称之为架构设计和数据布局),但我认为这可能是一个更一般的数据库类型问题。

举一个简单的例子,我正在测量两个数量,温度湿度(我知道是有想象力的!),在两个位置,客厅室外

InfluxDB 具有插入数据点的语法

测量, tag_key=tag_value field_key=field_value

所以有两个明显的(至少对我而言)选择。简而言之,第一个选项将插入这样的数据点:

INSERT temperature,location=outside value=15
INSERT humidity,location=outside value=50
Run Code Online (Sandbox Code Playgroud)

而第二种选择会这样做:

INSERT sensor_measurements,location=outside temperature=15,humidity=50
Run Code Online (Sandbox Code Playgroud)

我的问题更高级:

  • 有没有首选/接受的方法来解决这个问题?
  • 如果我尝试将其扩展到更多数量/位置/数据类型,我会遇到其中任何一个问题吗?
  • 例如,如果我稍后尝试在 Grafana 中绘制这些内容,或者如果我稍后尝试实现许多InfluxQL 函数中的一些,这两种方法中的任何一种是否都具有优势?
  • 有没有人对此有任何一般建议?

我个人的想法:

在我看来,选项 1 更像是 InfluxDB 描述“测量”所暗示的内容。温度和湿度都是独立的量。但仅仅称其为“价值”似乎有点笨拙。

选项 2 似乎具有以下优势:湿度和温度共享完全相同的时间戳。这将很有用,例如,如果我想将数据导入其他软件并在两个数量之间进行关联,这意味着我不必进行任何插值或分箱来使它们匹配。

我不确定在选项 2 中只进行一个名为sensor_measurements的一般测量是否是一个坏主意,并且以后很难维护。

详细:


选项1

  • 对每个温度湿度进行单独的“测量” ,将位置用作“标签”,并将“字段”命名为

在时间t1,插入数据:

INSERT humidity,location=outside value=50
INSERT temperature,location=outside value=15
INSERT humidity,location=living_room …
Run Code Online (Sandbox Code Playgroud)

sql influxdb grafana influxql

6
推荐指数
1
解决办法
237
查看次数

我们如何更改 Grafana Query Inspector 中的“precision:ms”设置?

我有一个 InfluxDB 数据库,其中只有 x11 个数据点。当它们之间的时间短于 1 毫秒时,这些数据在 Grafana 中无法正确显示(或至少如我所料)。

如果我插入相距 1 毫秒的数据点,那么一切都会按预期进行,并且我会在正确的时间看到所有 x11 点,如下所示:

在此处输入图片说明

但是,如果我删除这些点并上传新点,但这次每 100 ?s 一个点,那么尽管数据在 InfluxDB 中正确显示,但在 Grafana 中,我在图表中只看到两个点:

在此处输入图片说明

似乎数据被四舍五入/分箱到最接近的毫秒,这与此处查询中的“precision=ms”设置有关:

在此处输入图片说明

但我找不到任何方法来更改此设置。解决此问题的正确方法是什么?

influxdb grafana

5
推荐指数
0
解决办法
631
查看次数

如何获取这些数组并使用它们来填充结构的字段?

我有几个向量,想用它们来填充结构数组中的字段。向量将永远只有两种长度之一 - 它们的长度为 N,或长度为 1。例如,如果 N=3,我的向量可能如下所示:

a = [0 5 7]
b = [-2 6 8]
c = 6
d = [11 12 13]
e = 20
Run Code Online (Sandbox Code Playgroud)

我希望结果是

my_structure(1).a = 0
my_structure(2).a = 5
my_structure(3).a = 7

my_structure(1).b = -2
my_structure(2).b = 6
my_structure(3).b = 8

my_structure(1).c = 6
my_structure(2).c = 6
my_structure(3).c = 6

my_structure(1).d = 11
my_structure(2).d = 12
my_structure(3).d = 13

my_structure(1).e = 20
my_structure(2).e = 20
my_structure(3).e = 20
Run Code Online (Sandbox Code Playgroud)

您可以看到,对于最初只有 length=1 的向量,结构数组的每个元素都应该具有相同的值。

有没有一种简洁的方法来实现这一点而不必遍历每个元素?它应该是可扩展的,以便我可以在需要时添加更多向量 f,g,h,...。

正如评论中所查询的,我不能简单地使用my_structure.a …

arrays matlab struct vector

1
推荐指数
1
解决办法
48
查看次数

为什么在这个“switch”语句中第二个表达式的计算结果也为 true?

我希望有人可以帮助我解决一个初学者问题(这是专门在 Arduino 上运行的,但我怀疑这是一个比这更基本的 C++ 问题)。

我不明白为什么以下“switch”语句同时输出“Channel 1”和“Channel 2”语句:

void setup() {
  delay(100);
  Serial.begin(57600);
  delay(100);

  int channel = 1;

  switch (channel) {
    case 1:
      Serial.println("Channel 1");
    case 2:
      Serial.println("Channel 2");
  }
}

void loop() {

}
Run Code Online (Sandbox Code Playgroud)

我读过 switch 语句“follow-though”或“cascade”,即我理解如果满足条件 1,那么代码仍然会继续检查后续条件(并且您可以添加显式的“break”命令)跳出)。这一切都很好。

但我不明白第二个表达式的计算结果为true(因为整数变量channel=1,并且只有当channel=2时它才应计算为true)。

我在这里缺少什么?

谢谢你!

c++ expression arduino switch-statement

-1
推荐指数
1
解决办法
100
查看次数