तो यह मेरा कोड है। उन्नत। जबकि लूप्स के साथ मेरे कुछ मुद्दे थे लेकिन मैं इसे खत्म करने में कामयाब रहा। अब मेरी समस्या यह है। जब उपयोगकर्ता लूप के अंत में पहुंच जाता है और उसे फिर से खेलने के लिए कहा जा रहा है तो प्रोग्राम अपनी यादृच्छिक संख्या नहीं बदलेगा। किसी भी तरह की सहायता की सच में प्रशंसा की जाएगी। और जैसा कि शीर्षक कहता है, अजगर पूंजी Y और N को नहीं पहचान पाएगा और यह केवल y और n लेगा।

from random import *
def play():
    return guess()

def retry():
    while True:
        replay = input("Try again ?(Y/N)")
        if replay not in {"y", "n"}:
            print("Please enter Yes or No")
        elif replay.lower() == "n":
            print("Thanks for playing! Bye now!.")
            break
        elif replay.lower() == "y":
            print("As you wish!")
            return guess()

def guess():
    while True:
        user = int(input("Guess the number: \n"))
        print(user,a)
        if user < a:
            print("Higher")
        elif user > a:
            print("Lower")
        if user == a:
            return retry()
a = randint(0,20)



play()
0
Hellboy 31 जिंदा 2020, 06:48

1 उत्तर

सबसे बढ़िया उत्तर

यह a को रीसेट नहीं करता क्योंकि इसे ऐसा करने का निर्देश कभी नहीं दिया गया था। जब आप गेम को पुनरारंभ करते हैं, तो आपको एक नया नंबर जेनरेट करना चाहिए:

...
        elif replay.lower() == "y":
            print("As you wish!")

            # Tell the interpreter that we want to modify a variable from the global scope
            global a

            # Generate a new random number
            a = randint(0,20)

            return guess()

...

और जैसा कि शीर्षक कहता है, अजगर पूंजी Y और N को नहीं पहचान पाएगा और यह केवल y और n . लेगा

आपको निम्न पंक्ति बदलनी चाहिए:

        replay = input("Try again ?(Y/N)")

प्रति:

        replay = input("Try again ?(Y/N)").lower()

अन्यथा आपकी निम्न स्थिति विफल हो जाएगी, क्योंकि Y और N {"y", "n"} में नहीं हैं। हालाँकि, कोष्ठक वास्तव में यहाँ कोई मतलब नहीं रखते हैं, और बस करना बेहतर होगा:

if replay not in "yn":

संपादित करें: उत्तर को दो बार सत्यापित करने के बजाय, केवल मान्य उत्तरों की तलाश करें और यदि प्रदान नहीं किया गया है तो एक मान्य उत्तर मांगें:

replay = input("Try again ?(Y/N)").lower()
if replay == 'y':
    # replay...
elif replay = 'n'
    print("Thanks for playing! Bye now!.")
    break
else:
    print("Please enter Yes or No")

संपादित करें: यह सुनिश्चित करने के लिए कि दिया गया इनपुट एक मान्य संख्या है, आप त्रुटि को पकड़ने के लिए try/except ब्लॉक का उपयोग कर सकते हैं:

try:
    user = int(input("Guess the number: \n"))
except ValueError:
    print('Not a valid number.')

या आप सुनिश्चित कर सकते हैं कि दी गई स्ट्रिंग str.isdigit का उपयोग करके एक संख्या है:

user = input("Guess the number: \n")
if user.isdigit():
    user = int(user)
else:
    print('Not a valid number.')

मैं व्यक्तिगत रूप से try/except के साथ जाऊंगा क्योंकि दूसरा मूल रूप से दो बार स्ट्रिंग को मान्य कर रहा है (एक बार isdigit के माध्यम से, फिर दूसरा जब int कास्ट किया जाता है)।

1
Jordan Brière 31 जिंदा 2020, 07:59