我试图执行一个基于条件的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,真)。这里我给价值61和is_birthday作为‘真’。但我的O/P是打印“大票”-5倍和“小票”- 20倍。我走错了路。
发布于 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)
给出的值范围),那么您需要执行以下操作之一:
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")
发布于 2017-10-15 17:07:54
这两个条件都是正确的,is_birthday,所以你得到了“大票”&&速度< 66,所以你得到了“小票”,你实际上是在做所有的for循环,但并不是所有的循环都是因为内部条件而打印的,也许是一个if/elsif控制您想使用哪个循环而不是使用所有的循环?
哦,看看第6行的缩进。
“如果速度< 66:”
发布于 2017-10-15 17:12:16
为什么要用?你应该用。
if speed in range(61,81)
没有循环。您还可以避免多个嵌套,并使用以下内容
if speed in range(61,81) and is_birthday: print('...')
https://stackoverflow.com/questions/46757591
复制相似问题