python - 除了员工考勤表上的错误外,如何修复尝试?
问题描述
我有一个功能正确的程序,但我必须添加错误检查,现在我遇到了一个问题。问题是,如果您为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()
解决方案
如果输入失败,请使用循环重试输入(而不是递归调用)。您还可以利用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()
推荐阅读
- systemd - Systemd - 无法设置以太网接口的速度/双工
- sql - 创建一个 SQL 函数以在检查数据时返回一个位
- swift - SwiftUI:内容有填充
- python - CityEngine PyDev 控制台“控制台已经以值退出:0 等待回答。”
- c# - 面临阿联酋货币代码价格在c#中翻倍的问题
- c# - 来自 C# 应用程序的 UWF 统一写入过滤器访问
- python - 在 Python cx_Oracle 中从 Oracle DB 获取序列号
- javascript - 如何获取 cookie 并为每个循环执行
- wso2 - WSO2 EI 缓存调解器,如何验证控制标头
- python - 在进行熊猫比较时,如何从 np.nan>np.nan 返回 np.nan?