[英]more elegant way to do this? python multiples of 2, 3 or 4
编写一个返回给定数字的程序。 但是对于2的倍数返回“ Fizz”而不是数字,对于3的倍数返回“ Buzz”,对于4的倍数返回“ Bang”。 对于两个和三个的倍数的数字,返回“ FizzBuzz”。 对于两个,三个和四个的倍数的数字,返回“ FizzBuzzBang”
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.