##### Why is the item not in list when it is
 Why is the item not in list when it is DanielCook Unladen Swallow Posts: 4 Threads: 4 Joined: Aug 2019 Reputation: 0 Jul-08-2020, 10:06 AM (This post was last modified: Jul-08-2020, 11:57 AM by Yoriz.) ```#blackjack import random deck = ["2+diamonds","3+diamonds","4+diamonds","5+diamonds","6+diamonds","7+diamonds","8+diamonds","9+diamonds","10+diamonds","j+diamonds","q+diamonds","k+diamonds","a+diamonds","2+clubs","3+clubs","4+clubs","5+clubs","6+clubs","7+clubs","8+clubs","9+clubs","10+clubs","j+clubs","q+clubs","k+clubs","a+clubs","2+hearts","3+hearts","4+hearts","5+hearts","6+hearts","7+hearts","8+hearts","9+hearts","10+hearts","j+hearts","q+hearts","k+hearts","a+hearts","2+spades","3+spades","4+spades","5+spades","6+spades","7+spades","8+spades","9+spades","10+spades","j+spades","q+spades","k+spades","a+spades"] playershand = [] dealerhand = [] for i in range (2): a = (random.choice(deck)) print(a) deck.remove(a) playershand.append(a) firstcard = playershand[0] secondcard = playershand[1] x = firstcard.split("+") y = secondcard.split("+") num1 = x[0] num2 = y[0] if num1 == ("2") or num1 == ("3") or num1 == ("4") or num1 == ("5") or num1 == ("6") or num1 == ("7") or num1 == ("8") or num1 == ("9") or num1 == ("10"): num1 = int(num1) if num1 == ("j") or num1 == ("q") or num1 == ("k"): num1 = (10) num1 = int(num1) if num1 == ("a"): num1 = (11) num1 = int(num1) if num2 == ("2") or num2 == ("3") or num2 == ("4") or num2 == ("5") or num2 == ("6") or num2 == ("7") or num2 == ("8") or num2 == ("9") or num2 == ("10"): num2 = int(num2) if num2 == ("j") or num2 == ("q") or num2 == ("k"): num2 = (10) num2 = int(num2) if num2 == ("a"): num2 = (11) num2 = int(num2) total = (num1 + num2) print("The total is",total) b = (random.choice(deck)) deck.remove(b) c = (random.choice(deck)) deck.remove(c) #to edit print("The dealer has", b,c) b = b.split("+") c = c.split("+") dnum1 = b[0] dnum2 = c[0] if dnum1 == ("2") or dnum1 == ("3") or dnum1 == ("4") or dnum1 == ("5") or dnum1 == ("6") or dnum1 == ("7") or dnum1 == ("8") or dnum1 == ("9") or dnum1 == ("10"): dnum1 = int(dnum1) if dnum1 == ("j") or dnum1 == ("q") or dnum1 == ("k"): dnum1 = (10) dnum1 = int(dnum1) if dnum1 == ("a"): dnum1 = (11) dnum1 = int(dnum1) if dnum2 == ("2") or dnum2 == ("3") or dnum2 == ("4") or dnum2 == ("5") or dnum2 == ("6") or dnum2 == ("7") or dnum2 == ("8") or dnum2 == ("9") or dnum2 == ("10"): num2 = int(num2) if dnum2 == ("j") or dnum2 == ("q") or dnum2 == ("k"): dnum2 = (10) dnum2 = int(dnum2) if dnum2 == ("a"): dnum2 = (11) dnum2 = int(dnum2) dnum1 = int(dnum1) dnum2 = int(dnum2) dtotal = dnum1 + dnum2 ans = input("Would you like another card? (y/n)") if ans == "y": xcard = (random.choice(deck)) print(xcard) print(deck) deck.remove(xcard) playershand.append(xcard) deck.remove(xcard) print (playershand) x = xcard.split("+") num = x[0] if num == ("2") or num == ("3") or num == ("4") or num == ("5") or num == ("6") or num == ("7") or num == ("8") or num == ("9") or num == ("10"): num = int(num) if num == ("j") or num == ("q") or num == ("k"): num = (10) num = int(num) if num == ("a"): num = (11) num = int(num) total = num1 + num2 + num print (total) if total > 21: print("BUST, you lose!")```Why is this return after asking for a another card, xcard not in list Reply TomToad Silly Frenchman Posts: 34 Threads: 0 Joined: Apr 2020 Reputation: 7 Jul-08-2020, 10:50 AM You need to put your code between python tags when posting. Also, when you pick the new card, you try to remove it from the deck twice. Reply deanhystad Da Bishop Posts: 1,495 Threads: 6 Joined: Feb 2020 Reputation: 141 Jul-08-2020, 07:38 PM I'm sure you found by now that you were removing xcard twice. Why are you surrounding this code with ()? `b = (random.choice(deck))`This would make a tuple if there were more than one card drawn. ```b = (random.choice(deck), random.choice(deck)) print(b)`````Output:('8+spades', 'j+spades')``You would have quickly discovered this if Python didn't have a strange requirement that an initializer for a tuple with a single value has to have a trailing comma ```this_is_a_string = ('some text') this_is_a_tuple = ('some text',)```I bet you are getting really tired of typing this: ```firstcard = playershand[0] secondcard = playershand[1] x = firstcard.split("+") y = secondcard.split("+") num1 = x[0] num2 = y[0] if num1 == ("2") or num1 == ("3") or num1 == ("4") or num1 == ("5") or num1 == ("6") or num1 == ("7") or num1 == ("8") or num1 == ("9") or num1 == ("10"): num1 = int(num1) if num1 == ("j") or num1 == ("q") or num1 == ("k"): num1 = (10) num1 = int(num1) if num1 == ("a"): num1 = (11) num1 = int(num1) if num2 == ("2") or num2 == ("3") or num2 == ("4") or num2 == ("5") or num2 == ("6") or num2 == ("7") or num2 == ("8") or num2 == ("9") or num2 == ("10"): num2 = int(num2) if num2 == ("j") or num2 == ("q") or num2 == ("k"): num2 = (10) num2 = int(num2) if num2 == ("a"): num2 = (11) num2 = int(num2)```Python has a lot of neat features that make writing this kind of code mush shorter. Here's a shorter way to make a shuffled deck of cards and dealing two hands. ```import random rank = {'2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, \ '10':10, 'J':10, 'Q':10, 'K':10, 'A':11} suit = {'C':'Clubs', 'D':'Diamonds', 'H':'Hearts', 'S':'Spades'} deck = [r + s for s in suit for r in rank] random.shuffle(deck) playerhand = [deck.pop(), deck.pop()] dealerhand= [deck.pop(), deck.pop()]```rank and suit are dictionaries, something you need to learn about to write Python programs. deck is a list comprehension, a shorthand way for making lists that is usually more efficient than using loops. pop() removes the first card in the deck. It combines "card = deck[0] and deck.remove(card)". Use functions for tasks you perform more than once or twice. To get the value of a card: ```def cardvalue(card): """Return numerical value of card""" return rank[card[:-1]]```If card is '10S', this gets the substring '10' and returns the associated value 10 from the rank dictionary. If it was 'AC' it would look up 'A' and return 11. If you don't like names like '2C' or 'KS' write a function to make pretty names: ```ranknames = {'2':'Duece', '3':'Three', '4':'Four', '5':'Five', '6':'Six', \ '7':'Seven', '8':'Eight', '9':'Nine', '10':'Ten', 'J':'Jack', \ 'Q':'Queen', 'K':'King', 'A':'Ace'} def cardname(card): return f'{ranknames[card[:-1]]} of {suit[card[-1]]}'```What you do not want to do, and I cannot stress this enough, is write the same single use code over and over. Reply

 Possibly Related Threads… Thread Author Replies Views Last Post How to run a pytest test for each item in a list arielma 0 119 Jan-06-2021, 10:40 PM Last Post: arielma How do I add a number to every item in a list? john316 2 154 Oct-28-2020, 05:29 PM Last Post: deanhystad Ignoring a list item hank4eva 2 424 Aug-17-2020, 08:40 AM Last Post: perfringo Select correct item from list for subprocess command pythonnewbie138 6 553 Jul-24-2020, 09:09 PM Last Post: pythonnewbie138 best way to add item to list only once Phaze90 1 458 May-01-2020, 05:02 AM Last Post: bowlofred item from a line to list however when i print the line instead of words i get letters Sutsro 5 531 Apr-22-2020, 02:39 PM Last Post: deanhystad Help removing asterisk item in a nested list. bmcguire 3 529 Apr-06-2020, 02:35 PM Last Post: snippsat If item in list = true, Output = xx kroh 0 428 Feb-19-2020, 09:17 AM Last Post: kroh Add list item into executable command zhome888 2 637 Dec-19-2019, 12:23 AM Last Post: zhome888 item = index position - list of list RavCOder 9 1,044 Dec-02-2019, 05:24 PM Last Post: ThomasL

Forum Jump:

### User Panel Messages

##### Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020