Python FizzBuzz问题
我收到一个用Python做的题目:
让用户输入一串数字,然后对这些数字进行FizzBuzz处理。
在遍历这个数字列表时,要记住以下规则:
如果这个数字能被3和5同时整除,就打印
FizzBuzz
如果只能被3整除,就打印
Fizz
如果只能被5整除,就打印
Buzz
否则就直接打印这个数字
还有,记得用elif哦!
我写了一个脚本,但在 n%3=True
这一行出错了。
n = input()
if n % 3 = True:
print("Fizz")
else if n % 5 = True:
print("Buzz")
elif print n
有人能帮帮我吗?非常感谢!
11 个回答
我找到的一个最简短的答案是
c=1
while c<101:print((c%3<1)*'Fizz'+(c%5<1)*'Buzz'or c);c+=1
总共61个字符
这是我用生成器实现的方法。解释部分我加了注释。
# the factors to check for, along with its
# associated text data.
FACTORS = {
3 : "Fizz",
5 : "Buzz",
}
def fizzbuzz(start, stop):
"""FizzBuzz printer"""
for i in range(start, stop+1):
string = "" # build string
# iterate through all factors
for j, dat in FACTORS.items():
# test for divisibility
if i % j == 0:
# add data to string if divisible
string += dat
if not string:
# if string's length is 0, it means,
# all the factors returned non-zero
# modulus, so return only the number
yield str(i)
else:
# factor had returned modulo as 0,
# return the string
yield string
if __name__ == "__main__":
for each in fizzbuzz(1, 100):
print(each)
这个版本的好处是它不需要依赖任何额外的条件检查。
n % 3
(或者说n %
任何数字)并不会得到True
或False
,它不是一个布尔表达式。另一方面,n % 3 == 0
则会得到这样的结果。
顺便问一下,当n % 3 == 0
和n % 5 == 0
都为True
时,会发生什么呢?
根据这个链接
FizzBuzz:对于从1到100的整数,如果这个整数能被3和5整除(也就是15),就打印“FizzBuzz”;如果能被3整除但不能被5整除,就打印“Fizz”;如果能被5整除但不能被3整除,就打印“Buzz”;否则就打印这个整数。
def FizzBuzz():
for i in range(1,101):
print {
3 : "Fizz",
5 : "Buzz",
15 : "FizzBuzz"}.get(15*(not i%15) or
5*(not i%5 ) or
3*(not i%3 ), '{}'.format(i))
这里的.get()
方法非常好用。
它的工作原理如下:
对于从1到100的所有整数(101不包括在内),
根据这些规则打印我们通过get调用的字典键的值。
“获取get
调用中第一个非假值的项目,或者返回整数作为字符串。”
在检查一个值是否为True
时,Python会把0当作False
。如果i对15取余等于0,那就是False
,我们就跳到下一个。
因此,我们对每个“取余”结果取反(也就是取反余数),这样如果余数等于0,也就是False
,我们就能得到一个True
的结果。我们把True
乘以字典键,这样就能返回字典键的值(比如3*True == 3
)。
当这个整数不能被3、5或15整除时,我们就会执行默认的操作,打印整数'{}'.format(i)
,这只是把i插入到字符串中 - 作为字符串。
一些输出示例:
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz
你的代码有几个问题。第一个问题是,在比较的时候,你应该用 ==
,而不是 =
,后者是用来给变量赋值的。
第二个问题是,你需要检查除法的余数(也就是模运算符计算的结果)是否为 零,而不是检查它是否为 true,这样说其实没有什么意义。
你应该用 elif
来表示“否则如果...”,用 else
来表示“否则”。另外,你还需要修正一下 else
语句的格式。
你想要的是:
n=input()
if n%3 == 0:
print("Fizz")
elif n%5 == 0:
print ("Buzz")
else:
print n
最后,你的代码没有符合要求:
1) 如果这个数字能被3和5同时整除,就打印 "FizzBuzz"
上面的代码无法做到这一点。这个部分我就不帮你解决了,因为我不是来替你完成作业的 :)