[英]Python - Multi Input Validation
我正在使用一系列嵌套循環編寫薪酬計算器程序。 一切正常,除了我必須確保指定日期的工作小時數輸入介於0和24之間(含0和24)。 這是該部分的代碼,我嘗試了多個不同的選項,但是它們要么使程序崩潰,要么根本無法識別。 任何幫助,將不勝感激!
這是相關代碼:
for x in range(0, weeks):
for y in days:
while True:
print ("Enter the number of hours for Week", x+1, y, ":")
try:
hours = int(input())
except ValueError:
print ("Invalid: Enter a positive integer")
continue
else:
break;
if y == 'Saturday':
newRate = satRate
elif y == 'Sunday':
newRate = sunRate
else:
newRate = baseRate
rate += (hours * newRate)
如果需要更廣泛的了解,這是完整的代碼:
baseRate = -1
while baseRate < 1:
baseRate = float(input("Enter the base pay rate: "))
if baseRate < 1:
print("Invalid: Enter a non-negative amount")
satRate = baseRate * 1.5
sunRate = baseRate * 2
pay = 0
rate = 0
hours = -2
weeks = -1
while weeks < 1:
while True:
try:
weeks = int(input("Enter the number of weeks: "))
except ValueError:
print("Invalid: Enter a positive integer")
continue
else:
break
if weeks < 1:
print("Invalid: Enter a positive integer")
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
for x in range(0, weeks):
for y in days:
while True:
print ("Enter the number of hours for Week", x+1, y, ":")
try:
hours = int(input())
except ValueError:
print ("Invalid: Enter a positive integer")
continue
else:
break;
if y == 'Saturday':
newRate = satRate
elif y == 'Sunday':
newRate = sunRate
else:
newRate = baseRate
rate += (hours * newRate)
pay = (round(rate, 2))
av = pay/weeks
average = round(av,2)
print("Total pay is: ", pay)
print("Average pay per week is: ", average)
您的代碼不會檢查輸入的有效時間(除非您由於崩潰而將其刪除了,等等)。 這里是一種方法:
try:
hours = int(input())
while not 0 <= hours <= 24:
print ("Invalid input, hours must be between 0 and 24 inclusive.")
print ("Try again")
hours = int(input())
except ValueError:
print ("Invalid: Enter a positive integer")
continue
通常最好使用更多功能來進行模塊化操作。 這段代碼可能會起作用,並且更具可讀性:
def get_baserate():
rate = input('Base rate:')
try:
rate = float(rate)
if not rate > 0:
print 'Rate must be positive'
return get_baserate()
return rate
except TypeError:
print 'Rate must be a positive number'
return get_baserate()
def get_weeks():
weeks = input('Number of weeks:')
try:
weeks = int(weeks)
if not weeks > 0:
print 'A positive number must be entered'
return get_weeks()
return weeks + 1
except TypeError:
print 'An integer must be entered'
return get_weeks()
def get_hours(week, day):
hours = input('Enter number of hours worked on %s of week %s:' % (day, week))
try:
hours = int(hours)
if not 0 <= hours <= 24:
print 'A number between 0-24 must be entered'
return get_hours(day)
return hours
except TypeError:
print 'An integer must be entered'
return get_hours(day)
def get_payday(rate, hours, day):
rate = 2*rate if day == 'Sunday' else 1.5*rate if day == 'Saturday' else rate
return hours*rate
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
rate = get_baserate()
weeks = get_weeks()
total_payday = 0
for week in range(1, weeks):
for day in days:
hours = get_hours(week, day)
total_payday += get_payday(rate, hours, day)
print 'Your total pay is: %s' % total_payday
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.