While循环不会停止循环

时间:2020-01-14 19:42:03

标签: python loops

我一般是python或编码的新手,而我的while循环遇到了问题。我想指出的是,while循环仅在变量“ loop” = True时有效

loop = True #Makes the asking sequence work


def loop_again(): #Makes the program ask if you want to continue
    loop_again = str(input("Do you want to do this again? Yes or No: "))
    if loop_again == "Yes":
        loop = True
    elif loop_again == "No":
        loop = False
    else:
        print("Please answer yes or no: ")
        loop_again

当程序询问我是否要再次执行此操作时,当我写“ No”时,即使我键入“ No”时变量“ loop”被假定为false,它仍会循环执行序列停止循环。

完整代码(在代码底部的while循环中):

#Solving for the area in a shape automatically

import math

loop = True #Makes the asking sequence work


def loop_again(): #Makes the program ask if you want to continue
    loop_again = str(input("Do you want to do this again? Yes or No: "))
    if loop_again == "Yes":
        loop = True
    elif loop_again == "No":
        loop = False
    else:
        print("Please answer yes or no: ")
        loop_again



def sqr_area(): #Asking sequence for the area of the square
    if choose == "Square":
        a = float(input("Input the length of the side here: "))
        print(a ** 2)
        loop_again()

def rec_area(): #Asking sequence for the area of the rectangle
    if choose == "Rectangle":
        a = float(input("Input the length of the long sides here: "))
        b = float(input("Input the length of the short sides here: "))
        print(a * b)
        loop_again()

def tri_area(): #Asking sequence for the area of the triangle
    a = float(input("Input the length of the side: "))
    b = float(input("Input the length of the height: "))
    print((a * b) / 2)
    loop_again()

def cir_area(): #Asking sequence for the area of the circle
    r = float(input("Length of the radius: "))
    print((r ** 2) * math.pi)
    loop_again()

while loop == True: #While loop, asking sequence
    choose = str(input("Input what shape that you want to figure out the area of here: "))
    if choose == "Square":
        sqr_area()
    elif choose == "Rectangle":
        rec_area()
    elif choose == "Triangle":
        tri_area()
    elif choose == "Circle":
        cir_area()
    else:
        print("Invalid shape, Input one of these shapes: Square, Rectangle, Triangle, Circle")
        choose

谢谢!

3 个答案:

答案 0 :(得分:2)

在应该使用循环时不要使用递归,并且SELECT t1.col1, t1.col2, t1.col3, t2.score FROM yourTable t1 INNER JOIN ( SELECT MIN(col1, col2) AS col1, MAX(col1, col2) AS col2, AVG(score) AS score FROM yourTable GROUP BY MIN(col1, col2) AS col1, MAX(col1, col2) ) t2 ON MIN(t1.col1, t1.col2) = t2.col1 AND MAX(t1.col1, t1.col2) = t2.col2; 应该返回一个值,而不是全局设置loop_again

loop
在相关的import math # Returns true once the input is Yes or false once the input is No def loop_again(): while True: response = str(input("Do you want to do this again? Yes or No: ")) if response == "Yes": return True elif response == "No": return False else: print("Please answer yes or no: ") 函数返回之后,而不是在每个函数内部,应该在 之后调用

loop_again。功能不需要了解或关心 关于*_area的值;仅在打算调用它们时才调用它们。

choose

最终循环可以无限期地运行,直到# Print the area of a square def sqr_area(): a = float(input("Input the length of the side here: ")) print(a ** 2) # Print the area of a rectangle def rec_area(): a = float(input("Input the length of the long sides here: ")) b = float(input("Input the length of the short sides here: ")) print(a * b) # Print the area of a triangle def tri_area(): a = float(input("Input the length of the side: ")) b = float(input("Input the length of the height: ")) print((a * b) / 2) # Print the area of a circle def cir_area(): r = float(input("Length of the radius: ")) print((r ** 2) * math.pi) 返回loop_again

True

答案 1 :(得分:1)

您必须在loop_again()函数的开头添加以下内容:

global loop

否则,该变量被视为 local ,并且不会对位于外部范围内的 other loop变量产生任何影响。

答案 2 :(得分:0)

这是一个上下文变量问题。 loop中的loop_again()变量和while循环中的变量是不同的。 在python中,函数内部的每个变量都是局部变量,除非它是一个自变量,或者如果您在函数的主函数和内部使用global variable

因此将其设为全局或传递并在函数内部返回

#Solving for the area in a shape automatically

import math
global loop 
loop = True #Makes the asking sequence work


def loop_again(): #Makes the program ask if you want to continue
    global loop 
    loop_again = str(input("Do you want to do this again? Yes or No: "))
    if loop_again == "Yes":
        loop = True
    elif loop_again == "No":
        loop = False
    else:
        print("Please answer yes or no: ")
        loop_again



def sqr_area(): #Asking sequence for the area of the square
    if choose == "Square":
        a = float(input("Input the length of the side here: "))
        print(a ** 2)
        loop_again()

def rec_area(): #Asking sequence for the area of the rectangle
    if choose == "Rectangle":
        a = float(input("Input the length of the long sides here: "))
        b = float(input("Input the length of the short sides here: "))
        print(a * b)
        loop_again()

def tri_area(): #Asking sequence for the area of the triangle
    a = float(input("Input the length of the side: "))
    b = float(input("Input the length of the height: "))
    print((a * b) / 2)
    loop_again()

def cir_area(): #Asking sequence for the area of the circle
    r = float(input("Length of the radius: "))
    print((r ** 2) * math.pi)
    loop_again()

while loop == True: #While loop, asking sequence
    global loop 
    choose = str(input("Input what shape that you want to figure out the area of here: "))
    if choose == "Square":
        sqr_area()
    elif choose == "Rectangle":
        rec_area()
    elif choose == "Triangle":
        tri_area()
    elif choose == "Circle":
        cir_area()
    else:
        print("Invalid shape, Input one of these shapes: Square, Rectangle, Triangle, Circle")
        choose

您需要在每个函数中都说循环是全局函数,否则python会将其解释为局部变量。

另一种方式是:

import math
loop = True #Makes the asking sequence work


def loop_again(loop ): #Makes the program ask if you want to continue
    loop_again = str(input("Do you want to do this again? Yes or No: "))
    if loop_again == "Yes":
        loop = True
    elif loop_again == "No":
        loop = False
    else:
        print("Please answer yes or no: ")
        loop_again
    return loop



def sqr_area(loop): #Asking sequence for the area of the square
    if choose == "Square":
        a = float(input("Input the length of the side here: "))
        print(a ** 2)
        loop = loop_again()
    return loop

def rec_area(loop): #Asking sequence for the area of the rectangle
    if choose == "Rectangle":
        a = float(input("Input the length of the long sides here: "))
        b = float(input("Input the length of the short sides here: "))
        print(a * b)
        loop = loop_again(loop)
    return loop


def tri_area(loop): #Asking sequence for the area of the triangle
    a = float(input("Input the length of the side: "))
    b = float(input("Input the length of the height: "))
    print((a * b) / 2)
    loop = loop_again()

def cir_area(loop): #Asking sequence for the area of the circle
    r = float(input("Length of the radius: "))
    print((r ** 2) * math.pi)
    loop = loop_again()

while loop == True: #While loop, asking sequence
    choose = str(input("Input what shape that you want to figure out the area of here: "))
    if choose == "Square":
        loop = sqr_area(loop )
    elif choose == "Rectangle":
        loop = rec_area(loop )
    elif choose == "Triangle":
        loop = tri_area(loop )
    elif choose == "Circle":
        loop = cir_area(loop )
    else:
        print("Invalid shape, Input one of these shapes: Square, Rectangle, Triangle, Circle")
        choose```