2016-09-18 46 views
1

我使用了多個如果ELIF,也有重複嘗試,如果除了命令,以消除負數,非整數,非數字輸入,我可以有一個命令,完全消除這些?謝謝!其代碼如下:如何在python中重複輸入代碼除外,如何簡化嘗試?

print("Welcome to Supermarket") 
print("1. Potatoes($0.75 per potato)") 
print("2. Tomatoes ($1.25 per tomato)") 
print("3. Apples ($0.50 per apple)") 
print("4. Mangoes ($1.75 per mango)") 
print("5. checkout") 

total = 0 
i = 0 
while i <= 0: 
    try: 
     choice = int(input("please enter 1, 2, 3, 4 or 5: ")) 
     if choice not in (1, 2, 3, 4, 5): 
      raise ValueError() 
    except ValueError: 
     print("invalid input, you need to enter 1, 2, 3, 4 or5") 
     choice = -1 
    else: 
     if choice == 1: 
      try: 
       amount = int(input("how many potatoes do you want? ")) 
       if amount < 0: 
        raise ValueError() 
      except ValueError: 
       print("invalid input") 
      else: 
       total = 0.75 * amount + total 
       cop = 0.75 * amount 
       print("the cost of potatoes is $", format(cop, ".2f")) 
       print("the total now is $", format(total, ".2f")) 
     elif choice == 2: 
      try: 
       amount = int(input("how many tomatoes do you want? ")) 
       if amount < 0: 
        raise ValueError() 
      except ValueError: 
       print("invalid input") 
      else: 
       total = 1.25 * amount + total 
       cot = 1.25 * amount 
       print("the cost of tomatoes is $", format(cot, ".2f")) 
       print("the total now is $", format(total, ".2f")) 
     elif choice == 3: 
      try: 
       amount = int(input("how many apples do you want? ")) 
       if amount < 0: 
        raise ValueError() 
      except ValueError: 
       print("invalid input") 
      else: 
       total = 0.5 * amount + total 
       coa = 0.5 * amount 
       print("the cost of apples is $", format(coa, ".2f")) 
       print("the total now is $", format(total, ".2f")) 
     elif choice == 4: 
      try: 
       amount = int(input("how many mangoes do you want? ")) 
       if amount < 0: 
        raise ValueError() 
      except ValueError: 
       print("invalid input") 
      else: 
       total = 1.75 * amount + total 
       com = 1.75 * amount 
       print("the cost of mangoes is $", format(com, ".2f")) 
       print("the total now is $", format(total, ".2f")) 
     elif choice == 5: 
      print("your total is $", format(total, ".2f")) 
      choice = choice + 1 
     i = choice - 5 

k = 0 
while k < 1: 
    try: 
     insert = float(
      input("enter you payment to the nearest cent(ex. 17.50 means you have entered 17 dollars and 50 cents): ")) 
     if (insert - total) < 0: 
      raise ValueError() 
    except ValueError: 
     print(
      "you must enter a number in the form like '17.50' and you have to enter an amount more than the total cost!") 
     k = k - 1 
    else: 
     change = insert - total 
     five_do = int(change/5) 
     one_do = int(change % 5) 
     quart = int((change - five_do * 5 - one_do)/0.25) 
     dime = int((change - five_do * 5 - one_do - quart * 0.25)/0.1) 
     nickel = int((change - five_do * 5 - one_do - quart * 0.25 - dime * 0.1)/0.05) 
     penny = (change - five_do * 5 - one_do - quart * 0.25 - dime * 0.1 - nickel * 0.05) * 100 
     print("total change is: $ ", format(change, ".2f")) 
     print("give customer: ", five_do, "$5 note,", one_do, "$1 note,", 
       quart, "quartz,", dime, "dimes,", nickel, "nickels,", format(penny, ".0f"), "pennies") 
+0

提取公共代碼,並把它放在一個函數。 – shuttle87

+0

我該怎麼做? – Byron

回答

0

提取常見的驗證碼到它自己的功能:

def validate_input(input_message): 
    """Validate that input is a positive integer""" 
    amount = int(input(input_message)) 
    if amount < 0: 
     raise ValueError("positive number required") 
    return amount 

然後調用需要的功能:

if choice == 1: 
    try: 
     amount = validate_input("how many potatoes do you want? ") 
    except ValueError: 
     # do something with invalid input here 
    else: 
     # do something with valid input here 

當你有這種在你的代碼中重複它支付,看看是否有辦法將它重構成一個函數。

+0

你是個天才! – Byron

0

我會建議做一個函數,驗證輸入是一個整數大於零。 喜歡的東西:

def validateInt(value): 
    value = int(value) #try to cast the value as an integer 

    if value < 0: 
     raise ValueError 

在您的代碼如下現在你可以使用它:

choice = input("Choose an option : ") 
try: 
    validateInt(choice) 
except: 
    Print("Invalid Input.") 
+0

謝謝!----------- :) – Byron