首页 > 解决方案 > 除了员工考勤表上的错误外,如何修复尝试?

问题描述

我有一个功能正确的程序,但我必须添加错误检查,现在我遇到了一个问题。问题是,如果您为worker_name 输入一个数字,那么在接下来您输入一个名称时,一旦您浏览了所有输入字段,它就会两次打印出“生产工人信息”。我该如何解决?

整个程序:

class Employee(object):

    def __init__(self, name, id_number):
        self.id_number = id_number
        self.name = name

class Worker(Employee):

    def __init__(self, name, id_number, shift_number, pay_rate):
        #call superclass __init__ method
        Employee.__init__(self, name, id_number)
        #initialize shift_number and pay_rate attributes
        self.shift_number = shift_number
        self.pay_rate = pay_rate


def main():
    #variables
    worker_name= " "
    worker_id = " "
    worker_shift = 0
    worker_pay = 0.00

    #get data attributes

    while 1:
        try:
            worker_name = input("Enter the worker name: ")
            print()
            if not worker_name.isalpha():
                print("Only letters are allowed!")
                print()
                main()
                break
            worker_id = int(input("Enter the ID number: "))
            print()
            worker_shift = int(input("Enter the shift number: "))
            print()
            worker_pay = float(input("Enter the hourly pay rate: "))
            print()
            break
        except Exception as e:
            print("Invalid choice! try again! " + str(e))
            print()
            
    #create an instance of Worker
    Employee.worker = worker_name, worker_id, worker_shift, worker_pay
    if not worker_name.isalpha():
        pass
    #display information
    print ("Production worker information ")
    print("---------------------------------")
    print()
    print ("Name: ", worker_name)
    print()
    print ("ID number: ", worker_id)
    print()
    print ("Shift: ", worker_shift)
    print()
    print ("Hourly Pay Rate: $ " + format(worker_pay, ",.2f"))

main()

标签: python

解决方案


如果输入失败,请使用循环重试输入(而不是递归调用)。您还可以利用try/catch使代码更短一些 - 只是try为了创建您想要做的全部事情worker,然后您不需要一次单独声明和检查每个变量。

class Employee:
    def __init__(self, name: str, id_number: int):
        assert name.isalpha(), "Only letters are allowed in employee names!"
        self.id_number = id_number
        self.name = name


class Worker(Employee):
    def __init__(
        self,
        name: str,
        id_number: int,
        shift_number: int,
        pay_rate: float
    ):
        # call superclass __init__ method
        Employee.__init__(self, name, id_number)
        # initialize shift_number and pay_rate attributes
        self.shift_number = shift_number
        self.pay_rate = pay_rate


def main():
    # create an instance of Worker
    while True:
        try:
            name = input("\nEnter the worker name: ")
            assert name.isalpha(), "Only letters are allowed!"  # fail fast!
            worker = Worker(
                name,
                int(input("\nEnter the ID number: ")),
                int(input("\nEnter the shift number: ")),
                float(input("\nEnter the hourly pay rate: "))
            )
            break
        except Exception as e:
            print(f"Invalid choice! try again! {e}\n")

    # display information
    print(f"""
Production worker information
---------------------------------

Name: {worker.name}

ID number: {worker.id_number}

Shift: {worker.shift_number}

"Hourly Pay Rate: ${worker.pay_rate:.2f}
""")


main()

推荐阅读