我刚开始学习python作为我的第一语言,虽然我编写了fizzbuzz的代码,但我不能为我的生活做下面的项目。我也希望它水平打印而不是垂直打印。任何帮助都会很棒(头脑旋转)。 创建一个执行此操作的函数。 例如
fizzbuzz(20)
会打印出来
1,2,fizz,4,buzz,fizz,7,8,fizz,buzz,11,fizz,13,14,fizzbuzz,16,17,fizz,19,buzz
def fizzbuzz(n):
for x in range (101):
if x%3==0 and x%5==0:
print("fizz buzz")
elif x%3==0:
print('fizz')
elif x%5==0:
print('buzz')
else:
print (x)
def main():
print(fizzbuzz(20))
答案 0 :(得分:6)
更短的时间:
for n in range(100):
print "Fizz"*(not n % 3) + "Buzz"*(not n % 5) or n
或者,如果你想给面试官留下深刻印象,
for n in range(100):
print 'FizzBuzz'[n%-3&4:12&8-(n%-5&4)] or n
答案 1 :(得分:3)
将项目收集到列表中。然后在功能结束时打印列表。您可以使用', '.join(...)
def fizzbuzz(n):
result = []
for x in range(1, n+1):
if x % 3 == 0 and x % 5 == 0:
result.append("fizz buzz")
elif x % 3 == 0:
result.append('fizz')
elif x % 5 == 0:
result.append('buzz')
else:
result.append(str(x))
return result
def main():
print(', '.join(fizzbuzz(20)))
main()
最好还知道print(..., end=', ')
会在末尾用逗号和空格“水平”打印,这几乎可以解决你的问题,除了最后一项还有一个逗号和空格。结束,这不是你想要的。
通常(1)将打印与计算分开,(2)使函数可重用通常是个好主意。您经常想要比打印更频繁地计算。在将来,您可能希望在打印之前将计算传递给其他函数。因此立即打印的功能不那么有用。所以我建议从fizzbuzz
中取出打印语句。
你可以返回字符串', '.join(result)
,但这有用吗?列表result
可能(将来)对进一步处理更有用,因此我选择返回result
。我留给main
函数的打印。
答案 2 :(得分:1)
稍微优雅
def fizzbuzz(n):
for x in range(1,n+1):
if not x % 15:
yield 'fizz buzz'
elif not x % 3:
yield 'fizz'
elif not x % 5:
yield 'buzz'
else:
yield x
if __name__ == "__main__":
print ','.join(fizzbuzz(20))
答案 3 :(得分:1)
def fizzbuzz(numbers, fizz, buzz):
x = ['Fizzbuzz' if x % fizz == 0 and x % buzz == 0 else 'Fizz' if x % fizz == 0 else 'Buzz' if x % buzz == 0 else x for x in numbers]
return x
答案 4 :(得分:1)
我是一名新手编码器,所以我不理解的一些答案或者似乎没有直接适用于我的问题。此答案将Fizz_Buzz作为变量并且x的范围由用户确定。我看了上面的解决方案并想出了这个:
def Fizz_Buzz(x):
for x in range (0,x):
if x % 3 == 0 and x % 5 == 0:
print('FizzBuzz')
elif x % 3 == 0:
print('Fizz')
elif x % 5 == 0:
print ('Buzz')
else:
print (x)
答案 5 :(得分:1)
您可以添加end=', '
进行打印,以便在同一行上打印,并使用您想要分隔值的任何字符。
class FizzBuzz:
@staticmethod
def fizz_buzz(n):
if n % 15 == 0:
return 'FizzBuzz'
elif n % 3 == 0:
return 'Fizz'
elif n % 5 == 0:
return 'Buzz'
else:
return str(n)
def __str__(self, rng):
[print(self.fizz_buzz(n), end=', ') for n in range(1, rng + 1)]
但它最后会留下,
。代替:
def __str__(self, rng):
print(', '.join(self.fizz_buzz(n) for n in range(1, rng + 1)))
答案 6 :(得分:1)
我制作了适用于任何数字和单词的fizzbuzz,因此您可以根据需要进行fizzbuzzfuzz。我做到了6行(如果算上通过fizzfuzz运行的行,则为7行)
def f(n:int,m:list,w:list):
s=''
for x in m:
if n%x==0: s+=w[m.index(x)]
if s=='': s=n
return s
for i in range(1, 100 +1): print(f(i,[3,5],['Fizz','Buzz']))
答案 7 :(得分:0)
def fizzbuzz(num):
if x % 3 == 0 and x % 5 == 0:
return "Fizz Buzz"
elif x % 3 == 0:
return "Fizz"
elif x % 5 == 0:
return "Buzz"
else:
return x
MAXNUM = 100
for x in range (MAXNUM):
print fizzbuzz(x)
答案 8 :(得分:0)
我发现以下效果很好(Python 3):
def fizzbuzz():
for i in range(1,101):
print("Fizz"*(i%3==0)+"Buzz"*(i%5==0) or i)
print (fizzbuzz())
答案 9 :(得分:0)
这是一个有趣的(显然不是最好的可读性,但考虑列表理解仍然有点乐趣):
def fizzBuzz():
print(", ".join(["FizzBuzz" if x%15==0 else "Fizz" if x%3 == 0 else "Buzz" if x%5==0 else str(x) for x in range(1,101)]))
不要忘记,3和5是互质的!因此,对于" FizzBuzz",您可以检查x % 15
而不是(x % 3 and x % 5)
。
答案 10 :(得分:0)
另外一个:)只是为了好玩:)
get_index = lambda i: bool(i%3)+2*bool(i%5) if i !=0 else 3
afb = lambda x: ('fizzbuzz','buzz', 'fizz', str(x))[get_index(x)]
fizzbuzz = lambda inpt: print(','.join([ afb(i) for i in inpt ]))
fizzbuzz(range(101))
“0,1,2,香味,4,嗡嗡声,嘶嘶声,7,8-,香味,嗡嗡声,11,香味,13,14,fizzbuzz,16,17,香味,19,嗡嗡声,嘶嘶声,22, 23,嘶嘶声,嗡嗡声,26,嘶嘶声,28,29,fizzbuzz,31,32,嘶嘶声,34,嗡嗡声,嘶嘶声,37,38,嘶嘶声,嗡嗡声,41,嘶嘶声,43,44,fizzbuzz,46,47,嘶嘶声,49,嗡嗡声,嘶嘶声,51,52,53,嘶嘶声,嗡嗡声,56,嘶嘶声,58,59,fizzbuzz,61,62,嘶嘶声,64,嗡嗡声,嘶嘶声,67,68,嘶嘶声,嗡嗡声,71,嘶嘶声, 73,74,fizzbuzz,76,77,嘶嘶声,79,嗡嗡声,嘶嘶声,82,83,嘶嘶声,嗡嗡声,86,嘶嘶声,88,89,fizzbuzz,91,92,嘶嘶声,94%,嗡嗡声,嘶嘶声,97, 98,嘶嘶声,嗡嗡声'
答案 11 :(得分:0)
又一个列表理解和Python3
# Create come toydata
df <- data.frame(target = rnorm(6))
print(df$target) # A numeric
#[1] -0.6194364 1.8817725 1.2898545 0.8297128 0.7837745 0.1337996
df$target <- cut(df$target, breaks = 4) # Now a factor with 4 levels but with wrong labels
print(df$target)
#[1] (-0.622,0.00587] (1.26,1.88] (1.26,1.88] (0.631,1.26] (0.631,1.26] (0.00587,0.631]
#Levels: (-0.622,0.00587] (0.00587,0.631] (0.631,1.26] (1.26,1.88]
levels(df$target) <- c("c1", "c2", "c3", "c4") # Update labels
print(df$target)
#[1] c1 c4 c4 c3 c3 c2
#Levels: c1 c2 c3 c4