【问题标题】:Custom class preventing loop exit when condition is met满足条件时防止循环退出的自定义类
【发布时间】:2021-01-29 00:18:54
【问题描述】:

当用户输入 no(任何大小写;我使用上层函数)时,我试图跳出外部 while 循环。目前,当用户输入“no”时,while 循环会再次运行,如果您再次输入“no”,则 while 循环会退出。

该问题与“主程序”上方定义的课程类有关。为了解决这个问题,我创建了一个单独的“主程序”来初始化 Course 类。

我很困惑为什么会发生这种情况,想知道是否可以提供一些澄清。

在 Python 3.8.6 上运行

class Course(object):
    # init method or constructor that creates a Course object
    def __init__(self, name, number, section, term_year, students):
        self.name = name
        self.number = number
        self.section = section
        self.term_year = term_year
        self.students = students
    
    #methods to edit specific course object attributes:    
    #edit the course name   
    def edit_name(self, name):
        self.name = name
    #edit the course number
    def edit_number(self, number):
        self.number = number
    #edit the course section
    def edit_section(self, section):
        self.section = section
    #edit the course term and year
    def edit_term_year(self, term_year):
        self.term_year = term_year
    #edit the course number of students
    def edit_students(self, students):
        self.students = students
   
    #methods to display the course object attributes
    #display all attributes
    def display_course(self):
        return( self.name+" "+ self.number + " " + self.section + " " +self.term_year+ " " + str(self.students))
    #display the course name
    def display_course_name(self):
        return( self.name)
    #display the course number
    def display_course_number(self):
        return( self.number)
    #display the course section
    def display_course_section(self):
        return( self.section)
    #display the course term and year
    def display_course_term_year(self):
        return( self.term_year)
    #display the number of students
    def display_course_students(self):
        return( self.students)
    #function to delete the course object
    def delete_course(self):
        del self

from Course import Course

Courses = []
loop = True
while loop:
    print(loop)
    #store the number of courses the user would like to add
    number = int(input("How many courses would you like to add? "))
    #iterate through the number of courses the user would like to enter
    if number > 0:
        for x in range(number):
            print(x)
            #store user input for each course
            name = input("Enter course name: ")
            number = input("Enter course number: ")
            section = input("Enter course section: ")
            term_year = input("Enter course term and year: ")
            students = input("Enter number of student for course: ")
            print("\n")
            
            #store each course into an array
            Courses.append([name,number,section,term_year,students])
    
    answer = input("Would you like to add anymore courses?").upper()
    print(answer)
    while True:
        if answer in ('YES','NO'):
            break
        else:
            answer = input('Incorrect option. Type "YES" to add more courses or "NO" to continue": ').upper()
    
    if answer == 'NO':
        loop = False
        break
    print(loop)
print(Courses)

当前输出如下所示:

True
How many courses would you like to add? 0
Would you like to add anymore courses?no
NO
[]
True
How many courses would you like to add? 0
Would you like to add anymore courses?no
NO
[]

【问题讨论】:

  • 什么情况下要打印[]?它看起来像一个空列表。
  • This code doesn't reproduce your problem. 此代码可能是从您的帖子中未包含的其他代码调用的。请edit您的问题,以确保您发布的minimal reproducible example确实重现了该问题。此链接应有助于缩小错误来源How to debug small programs.
  • 我创建并清空循环,然后在 while 循环之后打印它。我只是将它添加到代码中
  • @EmilyEhrlich 您与我们共享的代码运行良好。您分享的输出来自不同的代码(我认为)
  • @balderman 我发现了这个问题。我在上面定义了一个类,它产生了这个问题,虽然我不确定它为什么会这样?

标签: python while-loop break python-3.8


【解决方案1】:

复制粘贴您的代码并使用类似的 python 版本后,我无法重现您的问题。

与@balderman 提到的类似,您在哪里打印了一个空列表?我认为您的答案中缺少某些代码行。

$ python test.py
True
How many courses would you like to add? 0
Would you like to add anymore courses?NO
NO

【讨论】:

    猜你喜欢
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2022-01-13
    • 2021-08-22
    • 2016-04-12
    • 1970-01-01
    相关资源
    最近更新 更多