I cannot tell you how grateful I am that you took the time to do all of this.  
I have been working on it all day and you are a better teacher in a few minutes 
than my teacher has been in 4 months.  THANK YOU!

And thank you again, Mitya.  I really appreciate your time and effort too!  
Someday I'll be advanced enough to understand it lol

I'm going to take a break and work on it more tomorrow.  I'll be back.

Thank you!


On Wednesday, December 26, 2012 6:57:39 PM UTC-5, Joshua Landau wrote:
> THIS IS A LONG POST, BUT IF YOU WANT TO LEARN YOU SHOULD READ IT. SERIOUSLY.
> 
> 
> UNLIKE Mitya Sirenef's THIS DOES NOT ASSUME MORE KNOWLEDGE THAN IS IN YOUR 
> POST ALREADY, ALTHOUGH HIS IS DEFINITELY BETTER OVERALL. AS SUCH, THERE ARE 
> NO FUNCTIONS.
> 
> 
> 
> OK. There are several small errors in here, but there's nothing too large or 
> worth much worry.
> 
> 
> 
> On 26 December 2012 21:40, <bobflipp...@gmail.com> wrote:
> 
> 
> I really hope you can help!
> 
> I need to create a program where the user can order any combination and 
> quantity of 3 products. I then offer a 10% discount if the customer correctly 
> answers a trivia question.  After that, there are 3 choices for shipping.
> 
> 
> 
> I have most of the program completed but I'm struggling with the most 
> important parts :/  I get the total of multiple orders of the same item, but 
> we can't figure out how to total the entire order - before discounts and 
> shipping - and then where to put any code referring back to the trivia 
> question. Can somebody please help me with this? I would really appreciate it!
> 
> 
> 
> 
> 
> You write that you "need" to do this, which may hint that this is some sort 
> of homework. If so, it's generally a nice thing to say as much. That said, as 
> long as you've given a good shot at it it's normally fine.
> 
> 
>  This is the code:
> 
> 
> 
> 
> 
> My *very first* thought about this code is that it's really badly spaced. 
> Don't put lines together so much! [https://gist.github.com/4383950] shows how 
> much nicer things look when they're partitioned more. You may not agree, but 
> it took about 10 seconds and I prefer it.
> 
> 
>  shop_again = 'y'
> 
> 
> 
> 
> 
> Hold on! Hold on!
> shop_again should have a True/False value. It is screaming to be a boolean. 
> "y" is a letter, not a boolean. Thus:
> 
> 
> shop_again = True
> 
> 
> 
> 
> This is important because you don't really want to get confused with all your 
> types. What if shop_again was later changed to be True when a button was 
> clicked. Why on earth would you set it to "y"? You'd set it to True. Thus, 
> the sensible option is to have your types right from the very start.
> 
> 
> 
> print("Welcome to the Star Wars Shop!")
> 
> 
> customer = eval(input("Is there a customer in line? (1 = yes, 2 = no)> "))
> 
> 
> 
> eval(input(TEXT)) is a *bad* idea.
> 
> 
> First of all, eval is really dangerous. Answer "yes" instead and it'll just 
> crash. Answer True and it'll run... BUT do *neither* the if or the elif! 
> That's *bad*.
> 
> 
> Secondly, you don't need it. Your:
> 
> 
> "if(customer == 1)" could be "if(customer == '1')", which would work without 
> the eval.
> 
> 
> And then you've got the standard of "Y/N". So a better question would be:
> 
> 
> 
> 
> customer = input("Is there a customer in line? [Y/N]> ")
> 
> 
> Finally, you want to accept "Y" *and* "y", so you'd really want:
> 
> 
> 
> 
> customer = input("Is there a customer in line? [Y/N]> ").lower()
> 
> 
> 
> ---------
> customer = input("Is there a customer in line? [Y/N]> ").lower()
> 
> 
> 
> Because customer really deserves to be boolean [True/False], you'd want to 
> change it immediately.
> 
> 
> customer = (customer == "y")
> 
> 
> This second line assumes that all non-"y"s are False, but that's a folly 
> you'll have to live with for now.
> 
> 
> 
> while shop_again == 'y':
> 
> 
> 
> 
> 
> If you've changed shop_again to be boolean:
> 
> 
> while shop_again:
>  
> Some people don't get how this line would make sense. But it does. The 
> "while" statement only cares if it's value it gets is "truthy". Here are lots 
> of truthy things:
> 
> 
> 
> 
> "y" == "y"
> True
> False == False
> not False
> "egg loaf"
> [1, 2, 1, False, False]
> 
> 
> and here are some falsy things:
> 
> 
> 
> 
> "n" == "y"
> False
> True == False
> not True
> ""
> []
> 
> 
> If this makes no sense, please just say.
> 
> 
> 
>     if (customer == 2):
> 
> 
> 
> 
> 
> Again, if you've done my changes from above:
> 
> 
> 
> if not customer:
>  
> 
>         print("Welcome to the Star Wars Memorabilia Shop!")
>         customer = eval(input("Is there a customer in line? (1 = yes, 2 = 
> no)> "))
> 
> 
> 
> Again:
> 
> 
> 
> 
> customer = input("Is there a customer in line? [Y/N]> ").lower()
> 
> customer = (customer == "y")
> 
>  
> BUT HOLD ON!
> 
> 
> Run your program and then answer "2" twice. What happens? It's not good.
> 
> 
> 
> 
> The problem is that answering "2" to this second one doesn't skip the loop!
> 
> 
> x = ASK
> LOOP:
>     if not x:
>         ASK
>     if x:
> 
> 
>         STUFF
>     MORE STUFF
> 
> 
> Where you want:
> 
> 
> 
> x = ASK
> LOOP:
>     if not x:
>         ASK
>     if x:
>         STUFF
> 
> 
>         MORE STUFF
> 
> 
> or (even better):
> 
> 
> while not x:
>     x = ASK
> LOOP:
>     STUFF
>     MORE STUFF
> 
> 
> The second is what I've just decided to call the "ask-until-yes" model. 
> Basically, you ask until you get a "yes", so you don't have to put the loop 
> anywhere else. By the time the first loop is over, you *know* that x is True!
> 
> 
> 
>     elif (customer == 1):
> 
> 
> 
> 
> 
> 
> Again, if you've done my changes from above:
> 
> 
> 
> elif customer:
>  
> 
>         print("Please select an item to update your order and any other 
> number to check out.")
>         print("Yoda Figure: $10 each.")
>         print("Star Wars Movie DVD: $20 each.")
> 
> 
>         print("Death Star Lego Set: $200 each.")
>         print(" 1 for Yoda Figure")
>         print(" 2 for Star Wars Movie DVD")
>         print(" 3 for Death Star Lego Set")
> 
> 
>     order = eval(input("Order: "))
> 
> 
> 
> Again:
> 
> 
> order = input("Order number: ")
>  
> 
>     if (order == 1):
> 
> 
> If you've followed my advice:
> 
> 
> if order == "1":
>  
> 
>         yoda = eval(input("How many Yoda Figures do you want? : "))
> 
>         total = 10 * yoda
> 
> 
> Ooookkay. Now you're thinking: "BUT *surely* I need eval here!!(?)".
> 
> 
> You don't.
> 
> 
> yoda = int(input("How many Yoda Figures do you want? : "))
> 
> 
> 
> 
> This is better because there are so many problems with eval, and int also 
> means that you can only order whole numbers of yodas.
> You probably also want to call this "number_of_yodas", because you're not 
> defining what "yoda" is.
> 
> 
>          print("Total:", total)
> 
>         print("Current order:", yoda, "at", total)
> 
>     if (order == 2):
> 
> 
> 
> 
> 
> If you've followed my advice:
> 
> 
> if order == "2":
>  
> 
>         movie = eval(input("How many Star Wars Movie DVDs do you want? : "))
> 
>         total = 20 * movie
> 
> 
> As above:
> 
> 
> number_of_movies = int(input("How many Star Wars Movie DVDs do you want? : "))
> 
> total = 20 * number_of_movies 
> 
> 
> 
>         print("Total:", total)
> 
>         print("Current order:", movie, "at", total)
> 
>     if (order == 3):
> 
> 
> 
> 
> 
> If you've followed my advice:
> 
> 
> if order == "3":
>  
> 
>         legos = eval(input("How many Death Star Lego Sets do you want? : "))
> 
>         total = 200 * legos
> 
> 
> 
> As above:
> 
> 
> number_of_legos = int(input("How many Death Star Lego Sets do you want? : "))
> 
> total = 20 * number_of_legos
> 
> 
>          print("Total:", total)
> 
>         print("Current order:", legos, "at", total)
> 
> 
> 
> 
>     shop_again = input("Would you like to keep shopping? 'Y' for yes, 'N' for 
> no: ")
> 
> 
> Again:
> 
> 
> shop_again = input("Would you like to keep shopping? [Y/N]> ").lower()
> 
> 
> 
> shop_again = (shop_again == "y")
>  
> 
>     print()print("Your order before shipping and discounts: ",total)
> 
> print()
> 
> print("Answer a trivia question for a discount!")
> 
> discount = eval(input("On what planet did Yoda live when Luke Skywalker first 
> met him? 1) Earth 2) Dagobah 3) Pluto :"))
> 
> 
> Again:
> 
> 
> discount = input("On what planet did Yoda live when Luke Skywalker first met 
> him? 1) Earth 2) Dagobah 3) Pluto :")
> 
> 
> 
> if (discount == 1):
> 
>     print("Sorry, that answer was wrong!")
> 
> if (discount == 2):    print("That's correct, you get a 10% discount!")
> 
> if (discount == 3):
> 
>     print("Sorry, that answer was wrong!") 
> 
> 
> If you've taken my advice:
> 
> 
>  if discount == "1":
>     print("Sorry, that answer was wrong!")
> 
> 
> if discount == "2":
>     print("That's correct, you get a 10% discount!")
> if discount == "3":
>     print("Sorry, that answer was wrong!") 
> 
> 
>  print()
> 
> if (discount == 2):
> 
> 
> If you've taken my advice:
> 
> 
> 
> if discount == "2":
> 
>  
> 
>     (total * .9)
> 
> 
> Hold on! What do you think this line does? What is it meant to do?
> 
> 
> You meant:
> 
> 
> total = total*.9
> 
> 
> Which for clarity should be written:
> 
> 
> 
> 
> total = total * 0.9
> 
>  
> 
>     print("Your total before shipping: ",total) 
> 
>  print("1) Regular Shipping: 3-4 business days, $5.00 per $50 ordered. 2) 
> Express Shipping: overnight, $10 per $50 ordered. 3) Super Saver Shipping: 
> 7-10 business days, free.")
> 
> shipping = eval(input("Please select the shipping method you want: "))
> 
> 
> 
> 
> Again:
> shipping = input("Please select the shipping method you want: ")
> 
> 
> 
> if (shipping == 1):
> 
> 
> 
> If you've taken my advice:
> 
> <br...
> Show original

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to