Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何停止循环?_Python - Fatal编程技术网

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
    等。仅当您计划查看一系列内容时才需要使用
  • 提问时,确保始终包括测试输入、预期输出和实际得到的结果
  • print
    ing字符串的当前最佳实践是使用,以使打印内容真正清晰

您认为您需要的是命令,但实际上您需要的是删除重复

你的程序不够清晰。例如:

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
    等。仅当您计划查看一系列内容时才需要使用
  • 提问时,确保始终包括测试输入、预期输出和实际得到的结果
  • print
    ing字符串的当前最佳实践是使用,以使打印内容真正清晰

为什么for循环的范围特别包括y,当y时,您希望它做什么?在哪里以及您希望在哪个循环中中断?也许可以更容易地解释您试图对整个函数执行的操作。对我来说,这似乎是一个问题,可能有更好的方法来解决它。代码运行良好,唯一的问题是当我打印结果(10,17)(14,15)(14,23)(15,14)(15,14)(15,23)(16,25)时,我需要停在这里,因为这是反向的(17,10)(23,14)(23,15)(25,16)为什么for循环的范围特别包括y,当y时,您希望
做什么?在哪里以及您希望在哪个循环中中断?也许更容易解释您试图对整个函数执行的操作。对我来说,这似乎是一个问题,可能有更好的方法来解决它。代码运行良好,唯一的问题是当我打印结果(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的唯一位置