繁体   English   中英

更优雅的方式做到这一点? 2、3或4的python倍数

[英]more elegant way to do this? python multiples of 2, 3 or 4

编写一个返回给定数字的程序。 但是对于2的倍数返回“ Fizz”而不是数字,对于3的倍数返回“ Buzz”,对于4的倍数返回“ Bang”。 对于两个和三个的倍数的数字,返回“ FizzBu​​zz”。 对于两个,三个和四个的倍数的数字,返回“ FizzBu​​zzBang”

def fizz_buzz_bang(i):
    x="Fizz"
    y="Buzz"
    z="Bang"
    if i%2!=0 and i%3!=0 and i%4!=0:
        return i
    if i%2==0 and i%3==0 and i%4==0:
        return x+y+z
    elif i%2==0 and i%3==0:
        return x+y
    elif i%3==0 and i%4==0:
        return y+z
    elif i%2==0 and i%4==0:
        return x+z
    elif i%2==0:
        return x
    elif i%3==0:
        return y
    elif i%4==0:
        return z

当然。 您甚至可以拥有适用于任何此类游戏的通用解决方案

def game(rules, i):
    return ''.join(word for divisor, word in rules if not i%divisor) or i  # Possibly str(i)

_fizzbuzzbang_rules = sorted({2: "Fizz", 3: "Buzz", 4: "Bang"}.items())

def fizzbuzzbang(i):
    return game(_fizzbuzzbang_rules, i)  # You could also use partial
                                         # fizzbuzzbang = partial(game, _fizzbuzzbang_rules)

一些例子:

>>> fizzbuzzbang(2)
'Fizz'
>>> fizzbuzzbang(3)
'Buzz'
>>> fizzbuzzbang(5)
5
>>> fizzbuzzbang(12)
'FizzBuzzBang'

我不知道这是否更优雅,但它更具可读性,并且效率更高。

def fizz_buzz_bang(i):
    fizz = not i % 2
    buzz = not i % 3
    bang = not i % 4
    if fizz:
        if buzz:
            if bang:
                return 'FizzBuzzBang'
            return 'FizzBuzz'
        return 'Fizz' if not bang else 'Bang'
    if buzz:
        return 'Buzz'
    return i

编辑:实际上,这可能是最简单的方法...

def fizz_buzz_bang(i):
    if not i % 12:
        return 'FizzBuzzBang'
    if not i % 6:
        return 'FizzBuzz'
    if not i % 4:
        return 'Bang'
    if not i % 3:
        return 'Buzz'
    if not i % 2:
        return 'Fizz'
    return i

您可以使用以下代码:

def fizz_buzz_bang(i):        
    x="Fizz"
    y="Buzz"
    z="Bang"

    x1 = 2 if i%2 == 0 else 1
    y1 = 3 if i%3 == 0 else 1
    z1 = 4 if i%4 == 0 else 1

    a = x1*y1*z1

    return {
                2 : x,
                3 : y,
                4 : z,
                6 : x+y,
                8 : x+z,
                12: y+z,
                24: x+y+z
            }.get(a, i)

只是根据您的逻辑将数字相乘并根据相乘结果返回所需单词的映射

如果我们不手动执行LCM计算,该如何处理

def fizz_buzz_bang(i, a, b, c):
    x = 'Fizz'
    y = 'Buzz'
    z = 'Bang'
    if not i % b * c:
        return x + y + z
    elif not i % a * b:
        return x + y
    elif not i % c :
        return z
    elif not i % b:
        return y
    elif not i % a:
        return x

fizz_buzz_bang(12, 2, 3, 4)
 FizzBuzzBang 

暂无
暂无

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

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