【问题标题】:Read json data entries as objects in python file将json数据条目作为python文件中的对象读取
【发布时间】:2019-04-29 16:16:16
【问题描述】:

我想在 python 中使用 SOLID 原则解决 fizzbuzz 问题 我写了这段代码:

class tester(object):
    def check(self, number, string):
        return ", ".join(self.check_numbers(number, string))

    def check_numbers(self, number, string):
        number_list = []
        for n in range (1, 101):
            if n%number==0:
                number_list.append(string)
            else:
                number_list.append(str(n))
        return number_list

效果很好。当我运行代码时,我通过:em = tester() 创建一个对象,然后调用检查函数,如:em.check(3, "Fizz")

他们说:规则应该是对象,所以我可以动态地将它们添加/注册到规则执行器,或者通过依赖注入 我想用 JSON 文件来存储所有规则并将它们作为 .py 文件中的对象读取,但我卡住了。

有什么帮助吗?

【问题讨论】:

  • 为什么要使用类?只有成员函数,但没有数据......
  • 我在运行阶段实例化数据。
  • 像这样:em=tester() em.checker(3, "Fizz")
  • 您是否推荐任何其他使用 SOLID 原则的解决方案?
  • 如果你用它的方法定义一个新的数据类型,一个类是有意义的。你不要在这里这样做,你的数据类型是普通的integers。所以是的:我建议您不要为此编写课程。顺便说一句:这与json 有什么关系?

标签: python json fizzbuzz


【解决方案1】:

我终于有了一个解决办法,就是这样:

from collections import namedtuple

def is_divisible(number, modulo):
   return number % modulo == 0

FizzBuzz = namedtuple('FizzBuzz', 'number, name')

fizz_buzz_words = [
    FizzBuzz( 3, 'Fizz'),
    FizzBuzz( 4, 'Buzz'),
    FizzBuzz( 7, 'Bang'),
    FizzBuzz(11, 'Boom'),
 ]

def to_fizz_buzz_string(n):
    fizz_buzzes = [fb.name for fb in fizz_buzz_words if is_divisible(n, 
    fb.number)]

    return ''.join(fizz_buzzes) if fizz_buzzes else str(n)

for a in range(124, 134):
    print to_fizz_buzz_string(a)

print ', '.join(to_fizz_buzz_string(n) for n in range(923, 935))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多