首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >While循环不会停止循环

While循环不会停止循环
EN

Stack Overflow用户
提问于 2020-01-15 03:42:04
回答 3查看 315关注 0票数 1

一般来说,我对python或编码比较陌生,在我的while循环中遇到了一个问题。我想指出的是,while循环只有在变量"loop“= True时才有效

代码语言:javascript
运行
复制
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循环):

代码语言:javascript
运行
复制
#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

提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2020-01-15 03:53:15

不要在应该使用循环的时候使用递归,loop_again应该返回一个值,而不是全局设置loop

代码语言:javascript
运行
复制
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的值;只有在需要调用时才会调用它们。

代码语言:javascript
运行
复制
# 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

代码语言:javascript
运行
复制
# Loop until the user chooses to not run again
while True:
    choose = 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")
        continue

    if loop_again():
        break
票数 2
EN

Stack Overflow用户

发布于 2020-01-15 03:44:10

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

代码语言:javascript
运行
复制
global loop

否则,该变量被视为局部变量,并且不会对外部作用域中的另一个loop变量产生任何影响。

票数 1
EN

Stack Overflow用户

发布于 2020-01-15 03:49:32

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

因此,将其设置为全局的,或者在函数中传递并返回它

代码语言:javascript
运行
复制
#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会将其解释为局部变量。

另一种方式是:

代码语言:javascript
运行
复制
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```
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59740698

复制
相关文章

相似问题

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