2016-12-01 2 views
0

그래서 우리 친구와 저는 우리 대학의 Intro to Python 수업에서 며칠 동안이 문제를 해결해 왔습니다. 그러나 우리는 많은 시간을 소비하지 않았기 때문에 조금 붙어 있습니다. 이 주제에 대해서. 우리의 문제는 "모든 제품 ID는 6 자 여야하며 세 자리 대문자로 시작해야합니다. 예를 들어 ABE123 및 PPL334는 유효한 제품 ID이지만 ABE1.2 및 P1L3R4는 유효하지 않습니다. 최소 입찰가 5 달러 및 대주주 500 달러 입찰가 : 달러 및 센트의 입찰가 허용 가능 (예 : 6.78) 다음 코드는 프롬프트 (키보드 입력)에서 입찰가를 읽고 제품 ID 및 입찰가를로드합니다 유감스럽게도 코드에는 완성 작업을 수행 할 입력 검증이 포함되어 있지 않습니다. " 선생님이 우리에게 코드를주었습니다. 입력 내용의 유효성을 검사하기 만하면됩니다. 그러나 자신의 기능처럼 코드 외부에서 수행되어야합니다. 코드는 다음과 같습니다.Python의 입력 유효성 검사

`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` 

기본적으로 Google은 별도의 기능으로 제품 ID와 입찰가의 유효성을 검사합니다. 여기에 코드가 있지만 우리가 가지고있는 것은 완벽하게 작동하지 않으며 정확하지 않습니다.

다음
`def validprod(n): 
    caps="ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
    nums="" 
    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` 

가 입찰의 하나입니다 : 여기 productId에 대한 하나이며 우리는 그것을 할 수있는 더 간단한 방법은 아마이 알고

`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` 

, 우리는 단지 그것을 알고하지 않습니다.

+0

"완전히 작동하지 않고 정확하지 않습니다"- 구체적으로 무엇이 잘못 되었습니까? –

+0

'caps'과'nums' 변수가리스트가 아니기 때문에 작동하지 않습니다. – baranskistad

+0

productid와 입찰가를 확인하려면이 도구가 필요합니다. 요구 사항 (예 : ABC123 형식)이 아닌 경우 오류 메시지를 표시하고 나머지 기능을 계속 수행하지 않아야합니다. 위에 입력 한 내용은 잘못 입력 된 경우에도 유효하지 않은 제품 ID 및 입찰가를 반환합니다 (예 : aBC123 또는 ABc12F). 미안해, 그걸 거기 넣었어야 했어. –

답변

0
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)) 

: 제품은 products 목록에 추가되지 않았기 때문에 내가 당신의 getbids() 기능을 수정했습니다.

또 다른 참고 : 당신은 내가 완벽한 솔루션을 제공 할 잘못 생각하는 경우 을 알려 주시기 바랍니다. 나는 대중으로부터의 피드백에 완전히 열려있다.

+1

와우, 입력하는 동안 줄을 잊어 버렸습니다. 원래 코드에 'products' 부분이 있습니다. –

+0

그래서 우리가 제공 한 것을 살펴보고 무엇을했는지 이해하는 데 어려움을 겪고 있습니다. 우리는 불행히도 클래스에서'import re' 또는're.compile'에 대해서 논의조차하지 않았습니다. :/ –

+0

당신이'import re'을 이해하지 못한다면 이제 정규 표현식 (정규식)에 대해 배우고 배우는 시간입니다. 많은 온라인 자습서가 있으며, 그 중 일부는 Python과 관련이 있습니다. 그런 다음 다시 돌아와이 대답을 이해할 수 있는지 확인하십시오. –