Python 如何停止循环?
如果Python 如何停止循环?,python,Python,如果z==y,如何停止循环 循环打印从x到y范围内的一对数字,但当它达到y值时,循环打印一对相反的数字,我不需要它。命令将中断循环。这样一句话: def sum_div(x, y): for k in range(x,y+1): for z in range(x,y+1): sx = 0 sy = 0 for i in range(1, k+1): if k % i =
z==y
,如何停止循环
循环打印从
x
到y
范围内的一对数字,但当它达到y
值时,循环打印一对相反的数字,我不需要它。命令将中断循环。这样一句话:
def sum_div(x, y):
for k in range(x,y+1):
for z in range(x,y+1):
sx = 0
sy = 0
for i in range(1, k+1):
if k % i == 0:
sx += i
for j in range(1, z+1):
if z % j == 0:
sy += j
if sx == sy and k!= z:
print "(", k ,",", z, ")"
x = input("Dati x : ")
y = input("Dati y : ")
sum_div(x, y)
应该做你想做的。命令将中断循环。这样一句话:
def sum_div(x, y):
for k in range(x,y+1):
for z in range(x,y+1):
sx = 0
sy = 0
for i in range(1, k+1):
if k % i == 0:
sx += i
for j in range(1, z+1):
if z % j == 0:
sy += j
if sx == sy and k!= z:
print "(", k ,",", z, ")"
x = input("Dati x : ")
y = input("Dati y : ")
sum_div(x, y)
应该做你想做的事。你认为你要求的是命令,但你真正想要的是删除重复 你的程序不够清晰。例如:
if (z == y):
break
这两件事本质上是一样的,用a(在REPL中)可以写得更清楚:
您的线路:
>>> def get_divisors(r: int) -> list:
... return [i if r % i == 0 else 0 for i in range(1, r+1)]
...
...
>>> get_divisors(4)
>>> [1, 2, 0, 4]
>>> sum(get_divisors(4))
>>> 7
。。。如果找到匹配项,将无限循环。你应该把它取下来<代码>while y表示“while y为true”,其中的任何值都将计算为true
这将您的程序缩减为以下内容:
while y:
在REPL中测试这一点,根据代码逻辑,它似乎是正确的:
def get_divisors(r: int) -> list:
return [i if r % i == 0 else 0 for i in range(1, r+1)]
def sum_div(x, y):
for k in range(x,y+1):
sum_of_x_divisors = sum(get_divisors(k)) # Note this is moved here to avoid repeating work.
for z in range(x,y+1):
sum_of_y_divisors = sum(get_divisors(z))
if sum_of_x_divisors == sum_of_y_divisors and k!= z:
print("({},{})".format(k, z))
但是对于sum\u div(9,15)
您可能只需要(14,15)
和(15,14)
中的一个。但是,这与中断循环无关,而是当k
和z
不相等时,您尝试执行的操作有两个有效值。第二个测试用例证明了这一点,其中(33,35)
是一个重复值,但是如果您在(21,31)
上中断for循环,您将无法获得第二组值
我们可以解释这一点的一种方法是在工作完成时重新排序:
>>> sum_div(9,15)
(14,15)
(15,14)
>>> sum_div(21, 35)
(21,31)
(31,21)
(33,35)
(35,33)
我们看到了一个正确的结果:
def sum_div(x, y):
result_set = set() # Sets cannot have duplicate values
for k in range(x,y+1):
sum_of_x_divisors = sum(get_divisors(k))
for z in range(x,y+1):
sum_of_y_divisors = sum(get_divisors(z))
if sum_of_x_divisors == sum_of_y_divisors and k!= z:
result_set.add(tuple(sorted((k,z)))) # compile the result set by sorting it and casting to a tuple, so duplicates are implicitly removed.
for k, z in result_set: # Print result set after it's been compiled
print("({},{})".format(k, z))
或者,您在注释中提供的测试用例。请注意,缺少副本:
>>> sum_div(9,15)
(14,15)
>>> sum_div(21,35)
(21,31)
(33,35)
一些外卖:
- 分解做相同事情的函数,以便您可以更轻松地对此进行推理
- 以人类可读的格式命名变量,以便我们,代码的读者(包括您)理解正在发生的事情
- 不要使用循环,除非你真的在某个东西上循环
,for
等。仅当您计划查看一系列内容时才需要使用while
- 提问时,确保始终包括测试输入、预期输出和实际得到的结果
ing字符串的当前最佳实践是使用,以使打印内容真正清晰print
if (z == y):
break
这两件事本质上是一样的,用a(在REPL中)可以写得更清楚:
您的线路:
>>> def get_divisors(r: int) -> list:
... return [i if r % i == 0 else 0 for i in range(1, r+1)]
...
...
>>> get_divisors(4)
>>> [1, 2, 0, 4]
>>> sum(get_divisors(4))
>>> 7
。。。如果找到匹配项,将无限循环。你应该把它取下来<代码>while y表示“while y为true”,其中的任何值都将计算为true
这将您的程序缩减为以下内容:
while y:
在REPL中测试这一点,根据代码逻辑,它似乎是正确的:
def get_divisors(r: int) -> list:
return [i if r % i == 0 else 0 for i in range(1, r+1)]
def sum_div(x, y):
for k in range(x,y+1):
sum_of_x_divisors = sum(get_divisors(k)) # Note this is moved here to avoid repeating work.
for z in range(x,y+1):
sum_of_y_divisors = sum(get_divisors(z))
if sum_of_x_divisors == sum_of_y_divisors and k!= z:
print("({},{})".format(k, z))
但是对于sum\u div(9,15)
您可能只需要(14,15)
和(15,14)
中的一个。但是,这与中断循环无关,而是当k
和z
不相等时,您尝试执行的操作有两个有效值。第二个测试用例证明了这一点,其中(33,35)
是一个重复值,但是如果您在(21,31)
上中断for循环,您将无法获得第二组值
我们可以解释这一点的一种方法是在工作完成时重新排序:
>>> sum_div(9,15)
(14,15)
(15,14)
>>> sum_div(21, 35)
(21,31)
(31,21)
(33,35)
(35,33)
我们看到了一个正确的结果:
def sum_div(x, y):
result_set = set() # Sets cannot have duplicate values
for k in range(x,y+1):
sum_of_x_divisors = sum(get_divisors(k))
for z in range(x,y+1):
sum_of_y_divisors = sum(get_divisors(z))
if sum_of_x_divisors == sum_of_y_divisors and k!= z:
result_set.add(tuple(sorted((k,z)))) # compile the result set by sorting it and casting to a tuple, so duplicates are implicitly removed.
for k, z in result_set: # Print result set after it's been compiled
print("({},{})".format(k, z))
或者,您在注释中提供的测试用例。请注意,缺少副本:
>>> sum_div(9,15)
(14,15)
>>> sum_div(21,35)
(21,31)
(33,35)
一些外卖:
- 分解做相同事情的函数,以便您可以更轻松地对此进行推理
- 以人类可读的格式命名变量,以便我们,代码的读者(包括您)理解正在发生的事情
- 不要使用循环,除非你真的在某个东西上循环
,for
等。仅当您计划查看一系列内容时才需要使用while
- 提问时,确保始终包括测试输入、预期输出和实际得到的结果
ing字符串的当前最佳实践是使用,以使打印内容真正清晰print
做什么?在哪里以及您希望在哪个循环中中断?也许更容易解释您试图对整个函数执行的操作。对我来说,这似乎是一个问题,可能有更好的方法来解决它。代码运行良好,唯一的问题是当我打印结果(10,17)(14,15)(14,23)(15,14)(15,14)(15,23)(16,25)时,我需要停在这里,因为这是反向的(17,10)(23,14)(23,15)(25,16)它将取决于你把它放在哪里,因为它只会从最里面的环路中断开。环路制动的唯一位置是在打印“(“,k,”,“,z,”)之前。它将取决于你把它放在哪里,因为它只会从最里面的环路中断开。环路b的唯一位置