为什么这个Fizzbuzz程序失败了100个数字而不是25个?

时间:2013-07-06 02:40:41

标签: python fizzbuzz

如果我将变量numCount设置为100,程序将无法准确,但如果使用25之类的数字,则它可以正常工作。发生了什么事?

print "Fizzbuzz"
numCount = 0

while numCount < 100:
    numCount = numCount + 1

    if (numCount % 3) == 0:
        if (numCount % 15) == 0:
            print "Fizzbuzz"
        else:
                print "Fizz"
    if (numCount % 5) == 0:
        if (numCount%15) == 0:
            print "Fizzbuzz"
        else:
                print "Buzz"
    else:
        print numCount

3 个答案:

答案 0 :(得分:4)

while numCount < 100:表示numCount 小于 100.如果numCount == 100或更高的数字,则while循环将无法运行。

您的意思是<=吗? <=是“小于或等于”的运算符。

答案 1 :(得分:0)

看看while循环:

while numCount < 100

你可能已经知道它意味着&#34;而numCount小于100&#34;。这就是麻烦。请参阅,如果numCount为25,Python第一次将其解释为:

while 25 < 100

现在,说numCount是100.Python解释这样的语句:

while 100 < 100

看到问题?你基本上说'#34;而100小于100&#34;。但100永远不会少于100!因此,循环永远不会运行。您可以使用&lt; =而不是&lt;。这意味着&#34;小于或等于&#34;。因此,如果numCount的内容小于或等于100,则循环将运行。这可能就是你想要的。

答案 2 :(得分:0)

这个问题非常陈旧,但我想在这里添加一个答案,基于我看到here的一些很酷的东西,上周查找了一个不相关的主题。

  

FizzBu​​zz:对于100以下的整数,如果整数可以被3和5整除,则打印FizzBu​​zz(15);如果它能被3整除(而不是5),则会发出嘶嘶声;如果它可以被5整除(而不是3),则会发出嗡嗡声;否则为整数。

<强>看哪!

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调用的字典键的值。

&#34;在get调用中获取第一个非False项,或者将整数作为字符串返回。&#34;

当检查True值时,我们可以查找一个值,Python将0评估为False。如果i mod 15 = 0,那就是False,我们将转到下一个。

因此,我们NOT每个&#39; mods&#39; (又名其余的),所以如果mod == 0,其中== False,我们得到一个True语句。我们将True乘以返回字典键的字典键(即3*True == 3

当整数不能被3,5或15整除时,我们将落入打印int '{}'.format(i)的默认子句,只需将i插入到该字符串中 - 作为字符串。

部分输出

费兹
79个
巴兹
费兹
82个
83个
费兹
巴兹
86个
费兹
88个
89个
FizzBu​​zz
91个
92个
费兹
94个
巴兹
费兹
97个
98个
费兹
Buzz