首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为所提供的每个值而不是特定值执行的循环语句。

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

Stack Overflow用户
提问于 2017-10-15 16:57:56
回答 3查看 38关注 0票数 0

我试图执行一个基于条件的o/p值不同的程序。但是它进入了每个循环,而不是它指定的循环。并打印多条语句。下面是代码:

代码语言:javascript
运行
复制
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,真)。这里我给价值61和is_birthday作为‘真’。但我的O/P是打印“大票”-5倍和“小票”- 20倍。我走错了路。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-15 17:32:50

假设您想检查61 <=的速度是否< 81等等,我发现您的代码中有问题。range(x, y)返回一个列表,如下所示:[61, 62, 63, 64, ... , 80]。因此,通过编写一个for speed in range(x, y): you 迭代,遍历列表范围(x,y)中指定名称的每一项。,这意味着for-循环将被调用20次,因此将打印20次“小票”(列表范围(61,81)有20项)。

如果您想检查给定的速度是否是(在中是range(61, 81)给出的值范围),那么您需要执行以下操作之一:

代码语言:javascript
运行
复制
if speed in range(61, 81):
    print("Small ticket")

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

代码语言:javascript
运行
复制
for i in range(61, 81):
    if i == speed:
        print("Small ticket")

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

不过,最简单的解决办法是执行以下操作:

代码语言:javascript
运行
复制
if 61 <= speed < 81:
    print("Small ticket")

不需要名单。

以下是完整的代码:

代码语言:javascript
运行
复制
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")
票数 0
EN

Stack Overflow用户

发布于 2017-10-15 17:07:54

这两个条件都是正确的,is_birthday,所以你得到了“大票”&&速度< 66,所以你得到了“小票”,你实际上是在做所有的for循环,但并不是所有的循环都是因为内部条件而打印的,也许是一个if/elsif控制您想使用哪个循环而不是使用所有的循环?

哦,看看第6行的缩进。

“如果速度< 66:”

票数 0
EN

Stack Overflow用户

发布于 2017-10-15 17:12:16

为什么要用?你应该用。

代码语言:javascript
运行
复制
if speed in range(61,81)

没有循环。您还可以避免多个嵌套,并使用以下内容

代码语言:javascript
运行
复制
if speed in range(61,81) and is_birthday: print('...')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46757591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档