簡體   English   中英

Python-多輸入驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM