【问题标题】:FizzBuzz Program: Function not returning correctly even when its conditionals are metFizzBu​​zz 程序:即使满足条件,函数也无法正确返回
【发布时间】:2019-11-01 00:58:59
【问题描述】:

我正在尝试编写一个程序来打印 100 个数字的“fizz-buzz”列表。

Fizz-Buzz 是一款您尝试按顺序列出数字的游戏,但如果一个数字是 3 的倍数,您就说 fizz,如果一个数字是 5 的倍数,您就说 Buzz,如果两者都是,您就说“嘶嘶声”。

对于 10 个数字,它类似于 1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz。

x = 1

while(x < 10):

    if x % 3 == 0:
        fizzint = True
    elif x % 3 != 0:
        fizzint = False

    if x % 5 == 0:
        buzzint = True
    elif x % 5 != 0:
        buzzint = False


    if fizzint == True and buzzint == True:
        print("FizzBuzz \n")

    if fizzint == False and buzzint == False:
        print(x)
        print("\n")

    if fizzint == True and buzzint == True:
        print("Fizz \n")

    if fizzint == True and buzzint == True:
        print("Buzz \n")

    x = x+1

问题在于程序会忽略所有 3 或 5 的倍数。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    你的问题是你的三个条件是一样的:

    if fizzint == True and buzzint == True:
    if fizzint == True and buzzint == True:
    if fizzint == True and buzzint == True:
    

    第一个是正确的,但第三个应该是:

    if fizzint == True:
    

    第四个应该是:

    if buzzint == True:
    

    打印正确的输出。

    请注意,由于fizzint 和buzzint 是布尔值,因此您实际上不必与True 和False 进行比较——您可以简单地说if fizzint 或if not fizzint。

    此外,您的 fizzint-setting 语句也可以简化:

    fizzint = x % 3 == 0
    buzzint = x % 5 == 0
    

    因为x % 3 == 0 已经返回True 或False。

    【讨论】:

    • 我还想补充一点,bool(x%3) 也可以工作,因为零在 Python 中是 False。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 2021-10-27
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    相关资源
    最近更新 更多