मैं एक रोबोट बनाने की कोशिश कर रहा हूं जो "बिग 2" कार्ड गेम खेलता है।

मेरा लक्ष्य इसे केवल 1 कार्ड प्ले खेलने के साथ शुरू करना था। मैं इसका परीक्षण करने की कोशिश कर रहा हूं, अगर नंबर 1 नंबर 2 से बड़ा है और False है तो True लौटा रहा है।

RANK_ORDER = '34567890JQKA2'
SUIT_ORDER = 'DCHS'

def is_higher(card1, card2):
  a = list(card1)
  b = list(card2)
  if a[0] == b[0]:
    if a[1] > b[1] in SUIT_ORDER:
      return True
    elif a[1] < b[1] in SUIT_ORDER:
      return False
  elif a[1] > b[1] in SUIT_ORDER:
    return True
  elif a[1] < b[1] in SUIT_ORDER:
    return False
  elif a[1] == b[1]: #problem may be from here downwards
    if a[0] > b[0] in RANK_ORDER:
      return True
    elif a[0] < b[0] in RANK_ORDER:
      return False

if __name__ == '__main__':
  print(is_higher('8D', '9S'))
  print(is_higher('2S', '2D'))
  print(is_higher('3H', '2H')) #this has a problem
  print(is_higher('QS', 'JS'))
  print(is_higher('AD', '2S'))

मैं अपने लक्ष्य में कुछ हद तक सफल रहा हूं, हालांकि, यह तीसरे उदाहरण के लिए True क्यों लौटाता है, भले ही 3 RANK_ORDER में 2 से अधिक है?

0
GuyOverThere 27 फरवरी 2020, 15:03
जैसा कि आपके पास पहले से ही एक अच्छा उत्तर है, मैं बताऊंगा कि a=list(card1) अनावश्यक है। आप एक्सेस करने के लिए इंडेक्स वैल्यू का उपयोग कर सकते हैं, उदा। card1[0] पहले सूची में परिवर्तित किए बिना।
 – 
David Buck
27 फरवरी 2020, 15:12
आईडी आपको तुलना करने से पहले सभी संभावित कार्ड बनाने के लिए itertools.product देखने की भी सलाह देती है
 – 
tomgalpin
27 फरवरी 2020, 15:17

1 उत्तर

क्योंकि आप जो सोचते हैं कि आप कर रहे हैं उसकी तुलना नहीं कर रहे हैं, आप बूलियन उत्तर के आधार पर a के सूट के ascii मान की तुलना या तो 1 या 0 से कर रहे हैं यदि b[1] में है सूट क्रम, आपको उनके सूचकांकों की तुलना करनी चाहिए।

SUIT_ORDER.index(a[1]) > SUIT_ORDER.index(b[1])

और इसी तरह रैंक ऑर्डर तुलना के लिए

3
Sayse 27 फरवरी 2020, 15:06
3
मैं वास्तव में कोड से चकित था और सोचा "वाह, मुझे नहीं पता था कि अजगर ऐसा कर सकता है!"। पता चला है। यह नहीं कर सकता। कम से कम उस तरह तो नहीं। मुझे वास्तविकता में वापस लाने के लिए धन्यवाद @Sayse: D
 – 
vaeng
27 फरवरी 2020, 15:11
अब मुझे "झूठा, सच, कोई नहीं, कोई नहीं, झूठा" मिलता है
 – 
GuyOverThere
27 फरवरी 2020, 15:20
- ऐसा इसलिए है क्योंकि आपकी कई तुलनाओं का कोई मतलब नहीं है, उनमें से बहुत से रैंक ऑर्डर पर सूट ऑर्डर को प्राथमिकता देते हैं, और कुछ ऐसे रास्ते हैं जहां आपने परिभाषित नहीं किया है कि क्या होना चाहिए जब कोई भी if/elif स्टेटमेंट दर्ज नहीं किया जाता है तो कोई भी नहीं . मैं उस कार्ड गेम से परिचित नहीं हूं इसलिए वास्तव में और मदद नहीं कर सकता
 – 
Sayse
27 फरवरी 2020, 15:26