Python中的输入验证

f4t66c6m  于 2023-03-28  发布在  Python
关注(0)|答案(2)|浏览(102)

所以我和我的朋友已经在我们大学的Python入门课上研究这个问题几天了,但是我们有点卡住了,因为我们在课堂上没有花太多时间在这个主题上。我们的问题是这样的:* “每个产品ID必须为六个字符长,并以三个大写字母开头,后跟三位数字。例如,ABE123和PPL334是有效的产品ID,但ABE1.2和P1L3R4不是。拍卖网站的最低出价为5美元,最高出价为500美元。可以接受美元和美分的出价。例如,6.78是有效的出价。下面的代码从提示符读入bids(键盘输入)并将产品ID和投标价格加载到两个列表产品和投标中。不幸的是,代码不包含输入验证,这是您的工作要完成的。"* 我们的老师给了我们代码,我们只需要验证输入。但它必须在她的代码之外完成,就像在它自己的函数中一样。下面是代码:

`def getbids():
     products = []
     bids = []
     answer = "yes"
     while answer == "yes":
         productid = input("Enter the productID ")
         bid = float(input("Enter the bid for one item "))
         products.append(productid)
         bids.append(bid)
         answer = input("Are there more bids? ")
     return products, bids`

基本上,我们的工作是在单独的函数中验证productId和bid。我在这里有我们的代码,但我们的代码并不完全正确。下面是productId的代码:

`def validprod(n):
    caps="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    nums="0123456789"
    m="Error"
    if len(n)!=6:
        print("Error, productID must be 6 digits,3 capital letters followed by 3 numbers")
        return m
    else:
        while len(n)==6:
            for i in range(3):
                if n[i] not in caps or n[i+3] not in nums:
                    print("Error, productID must be 6 digits,3 capital letters followed by 3 numbers")
                    return m
                else:
                    return n`

下面是一个出价:

`def validbid(x,y):
    bid="Error"
    while x=="Error":
        return bid
    while x!="Error":
        if y>500 or y<5:
            print("Error, bid must be between 5 and 500(do not include a dollar sign with your bid).")
            return bid
        else:
            return y`

我们知道可能有一个更简单的方法来做到这一点,我们只是不知道它。

pvabu6sv

pvabu6sv1#

import re

pid_regex = re.compile(r'^[A-Za-z]{3}\d{3}$')

def is_valid_pid(pid):
    if pid_regex.match(pid):
        return True
    return False

def is_valid_bid(bid):
    return bid >= 5 and bid <= 500

def getbids():
     products = []
     bids = []
     answer = "yes"
     while answer == "yes":
         productid = input("Enter the productID ")
         products.append(productid)
         bid = float(input("Enter the bid for one item "))
         bids.append(bid)
         answer = input("Are there more bids? ")
     return products, bids

products = dict(zip(*getbids()))

for pid in products:
    bid = products[pid]
    if not is_valid_pid(pid):
        print('PID {} is invalid.'.format(pid))
        break
    elif not is_valid_bid(bid):
        print('PID {} has an invalid bid {}'.format(pid, bid))
        break
    else:
        print('PID {} to bid {} seems OK.'.format(pid, bid))

注意:我需要修复您的getbids()函数,因为没有将产品附加到products列表中。
另注:如果你认为我提供一个完整的解决方案是错误的,* 请让我知道 *。我完全开放的反馈,从公众。

x6492ojm

x6492ojm2#

def validprod(n):
    caps = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    nums = "0123456789"
    if len(n) == 6:
        if n[0:3] not in caps or n[3:] not in nums:
            print("'Error!!' Product ID must be 6 digits, 3 
    capital letters followed by 3 numbers.")
    else:
        print("'Error!!' Product ID must be 6 digits.")

相关问题