为每个值而不是提供的特定值执行循环语句

时间:2017-10-15 16:57:56

标签: python-3.x

我试图根据条件执行一个o / p不同值的程序。但它进入每个循环而不是它指定的循环。并打印所有的多个语句。这是代码:

def caught_speeding(speed, is_birthday = bool):
for speed in range(86, 91):
    if is_birthday: True ,print("Big ticket")
for speed in range(66, 86):
    if is_birthday: True, print("Small ticket")
if speed < 66:
    if is_birthday: True, print("No ticket")
if speed > 81 and is_birthday == False:
    print("Big Ticket")
for speed in range(61, 81):
    if is_birthday: False , print("Small ticket")
if speed < 61:
    if is_birthday == False:
        print("No Ticket")

caught_speeding(61,True)。 在这里,我给出的是61,is_birthday为'True'。但我的O / P正在打印“Big Ticket” - 5次和“Small Ticket” - 20次。我哪里出错了。

3 个答案:

答案 0 :(得分:0)

这两个条件都是真的,is_birthday所以你得到了#34; Big Ticket&#34; &安培;&安培;速度&lt; 66,所以你得到&#34; Small Ticket&#34;,你实际上正在做所有的for循环但是由于里面的条件而不是所有的都在打印,也许是if / elsif控制你想要使用哪个循环使用所有循环?

哦,看看第6行的缩进

&#34;如果速度&lt; 66:&#34;

答案 1 :(得分:0)

为何使用?你应该使用例如。

if speed in range(61,81)

没有循环。您还可以避免多次嵌套 并使用像

这样的东西
if speed in range(61,81) and is_birthday: print('...')

答案 2 :(得分:0)

假设你想检查61&lt; = speed&lt; 81等,我发现你的代码有问题。 range(x, y)会返回一个列表,如下所示:[61, 62, 63, 64, ... , 80]。因此,通过在列表范围(x,y)中为您指定名称速度的每个项目编写for speed in range(x, y): 迭代。< / strong>这意味着for循环将被调用20次,因此将打印&#34;小票&#34; 20次(列表范围(61,81)有20个项目。)

如果您想检查给定速度 range(61, 81)给出的值范围,您将要执行以下操作之一:

if speed in range(61, 81):
    print("Small ticket")

这只是检查列表range(61, 81)是否有一个值为speed的项目。你也可以这样做:

for i in range(61, 81):
    if i == speed:
        print("Small ticket")

这为您提供了更多控制,但效率较低,并产生相同的输出。

最简单的解决方案是执行以下操作:

if 61 <= speed < 81:
    print("Small ticket")

无需列表。

这里是完整的代码:

def caught_speeding(speed, is_birthday):

    if is_birthday == True:

        if 86 <= speed < 91:
            print("Big ticket")

        if 66 <= speed < 86:
            print("Small ticket")

        if speed < 66:
            print("No ticket")

    if is_birthday == False:

        if speed >= 81:
            print("Big Ticket")

        if 61 <= speed < 81:
            print("Small ticket")

        if speed < 61:
            print("No Ticket")