मैंने रॉक, पेपर कैंची का एक गेम बनाया है, जहां उपयोगकर्ता बनाम कंप्यूटर खेलता है। अभी यह एक अनंत लूप में फंस गया है और क्योंकि मैं अजगर के लिए नया हूं, मुझे नहीं पता कि लूप को कैसे समाप्त किया जाए। मैंने नीचे एक उदाहरण जोड़ा है कि मैं इसे कैसे जाना चाहता हूं। किसी भी सहायता की सराहना की जाएगी! :)

import random

print("Welcome to the game of rock, paper, scissors!")  

newLi = ["Rock", "Paper", "Scissors"]  
numRandom = newLi[random.randint(0, 3)]
user = False 

while not user:
    user = input("Rock, Paper, Scissors? \nAnswer: ") 
    if user == numRandom: 
        print("It's a tie! Please try again.")  
    elif user == "Rock" or user == "rock":
        if numRandom == "Paper":  
            print("Aw! You lost. Try again!", numRandom, "covers", user)
        else :
            print("Good job! You're the winner!", user, "smashes", numRandom)
    elif user == "Paper" or user == "paper":
        if numRandom == "Scissors":
            print("Aw! You lost. Try again!", numRandom, "cuts", user)
        else :
            print("Good job! You're the winner!", user, "covers", numRandom)
    elif user == "Scissors" or user == "scissors":
        if numRandom == "Rock":
            print("Aw! You lost. Try again!", numRandom, "smashes", user)
        else :
            print("Good job! You're the winner!", user, "cuts", numRandom)
    else:
        print("Invalid answer! Try again.")  

endGame = input("Would you like to keep playing? Y or N\nAnswer: ")

if endGame == "Y"
    KEEP PLAYING
else:
    STOP PLAYING
0
pythonNewbie2 16 जिंदा 2022, 09:18
क्यों न सिर्फ स्कोर को स्टोर करने के लिए एक वैरिएबल बनाया जाए और यह तय किया जाए कि जब स्कोर उस नंबर पर पहुंच जाए (या तो प्लेयर या कंप्यूटर के लिए), तो गेम खत्म हो जाए?
 – 
tomerpacific
16 जिंदा 2022, 09:21
 – 
Urmzd
16 जिंदा 2022, 09:23
आप लूप को रोकने के लिए ब्रेक स्टेटमेंट का उपयोग कर सकते हैं। बस थोड़ा सा गूगल करें, आपको इसके बारे में ढेर सारी जानकारी मिल जाएगी
 – 
reisgoldmanX
16 जिंदा 2022, 09:25

6 जवाब

आप एक लूप में फंस गए हैं क्योंकि पायथन इंडेंटेशन के आधार पर कोड ब्लॉक को मानता है। आप में कोड

import random

print("Welcome to the game of rock, paper, scissors!")  

newLi = ["Rock", "Paper", "Scissors"]  
numRandom = newLi[random.randint(0, 3)]
user = False 

while not user:
    user = input("Rock, Paper, Scissors? \nAnswer: ") 
    if user == numRandom: 
        print("It's a tie! Please try again.")  
    ...  

endGame = input("Would you like to keep playing? Y or N\nAnswer: ")

if endGame == "Y"
    KEEP PLAYING
else:
    STOP PLAYING

यदि आप ध्यान दें, endGame = ..., if endGame, और आपके else स्टेटमेंट सभी इंडेंटेशन के समान स्तर पर हैं जैसे कि आपका प्रारंभिक while लूप। इसका मतलब है कि वे वास्तव में आपके लूप का हिस्सा नहीं हैं, बल्कि लूप बंद होने के बाद ही निष्पादित होंगे।

चरण 1, उस सभी को कोड ब्लॉक के अंदर शामिल करने के लिए इंडेंट करना है।

चरण 2 KEEP PLAYING को continue से और STOP PLAYING को break से स्विच करना है।

अगर आप ऐसा कर रहे हैं, तो आप अपने while लूप को while True में बदल सकते हैं

लूप के प्रवाह नियंत्रण के लिए यहां एक अच्छी कड़ी है।


प्रश्न से संबंधित नहीं है, लेकिन चूंकि हम यहां सहायता के लिए हैं, इसलिए यदि आप किसी उपयोगकर्ता को बड़े अक्षरों में या छोटे अक्षरों में उत्तर लिखने की अनुमति देते हैं, तो आपको कुछ तुलना समस्याओं का सामना करना पड़ेगा।

.lower() में देखें और इस परिदृश्य में सब कुछ के लिए लोअरकेस का उपयोग करने पर विचार करें।


अंत कोड इस तरह दिखना चाहिए:

import random

print("Welcome to the game of rock, paper, scissors!")  

newLi = ["Rock", "Paper", "Scissors"]  
numRandom = newLi[random.randint(0, 3)]
user = False 

while True:
    user = input("Rock, Paper, Scissors? \nAnswer: ") 
    if user == numRandom: 
        print("It's a tie! Please try again.")  
    elif user == "Rock" or user == "rock":
        if numRandom == "Paper":  
            print("Aw! You lost. Try again!", numRandom, "covers", user)
        else :
            print("Good job! You're the winner!", user, "smashes", numRandom)
    elif user == "Paper" or user == "paper":
        if numRandom == "Scissors":
            print("Aw! You lost. Try again!", numRandom, "cuts", user)
        else :
            print("Good job! You're the winner!", user, "covers", numRandom)
    elif user == "Scissors" or user == "scissors":
        if numRandom == "Rock":
            print("Aw! You lost. Try again!", numRandom, "smashes", user)
        else :
            print("Good job! You're the winner!", user, "cuts", numRandom)
    else:
        print("Invalid answer! Try again.")  

    endGame = input("Would you like to keep playing? Y or N\nAnswer: ")

    if endGame == "Y"
        continue
    else:
        break
0
CVerica 16 जिंदा 2022, 09:38

आपके प्रश्न के आधार पर, मैंने निष्कर्ष निकाला कि आप अजगर में एक रॉक-पेपर-कैंची "गेम" बनाना चाहते हैं जो endGame = 'Y' तक चलता रहेगा, इसलिए user = False को आपके कोड के ऊपर परिभाषित करना इसकी आवश्यकता नही है।

इसके बजाय आपको पहले endGame को 'Y' के रूप में परिभाषित करना होगा। कोई अतिरिक्त ध्वज भी जोड़ने की आवश्यकता नहीं है।

स्पष्टता के लिए, मैं वेरिएबल endGame को continueGame में बदलता हूं।

इसलिए, यह चरणों में खेल का एल्गोरिथम/तंत्र होना चाहिए:

  1. चट्टान, कागज और कैंची को परिभाषित करें

  2. उपयोगकर्ता की पसंद प्राप्त करें

  3. चट्टान, कागज और कैंची में से किसी एक को बेतरतीब ढंग से चुनें।

  4. प्रतिक्रिया प्रिंट करें

  5. उपयोगकर्ता से पूछें कि क्या वे खेल जारी रखना चाहते हैं:

    • यदि Y, चरण 2 पर वापस जाएं।
    • यदि N, रनटाइम समाप्त करें।

इस प्रकार, आपको लूप के अंदर यादृच्छिक गिनने की आवश्यकता है। अन्यथा, जब भी उपयोगकर्ता बार-बार गेम खेलना चाहे तो परिणाम हमेशा वही रहेगा।

आप जांच के लिए आसान बनाने के लिए मामले को साफ कर सकते हैं, यानी उपयोगकर्ता इनपुट को कम करने के लिए .lower() का उपयोग कर सकते हैं।

import random

print("Welcome to the game of rock, paper, scissors!")

newLi = ["rock", "paper", "scissors"]
continueGame = 'Y'

while continueGame = 'Y':
    user = input("Rock, Paper, Scissors? \nAnswer: ")
    numRandom = newLi[random.randint(0,3)]
    if user.lower() == numRandom:
        print("It's a tie! Please try again.")
    elif user.lower() == "rock":
        if numRandom == "Paper":
            print("Aw! You lost. Try again!", numRandom, "covers", user)
        else :
            print("Good job! You're the winner!", user, "smashes", numRandom)
    elif user.lower() == "paper":
        if numRandom == "Scissors":
            print("Aw! You lost. Try again!", numRandom, "cuts", user)
        else :
            print("Good job! You're the winner!", user, "covers", numRandom)
    elif user.lower() == "scissors":
        if numRandom == "Rock":
            print("Aw! You lost. Try again!", numRandom, "smashes", user)
        else :
            print("Good job! You're the winner!", user, "cuts", numRandom)
    else:
        print("Invalid answer! Try again.")

    continueGame = input("Would you like to keep playing? Y or N\nAnswer: ")
0
Dhana D. 16 जिंदा 2022, 09:55

आप user को False में इनिशियलाइज़ करते हैं, लेकिन user को बाद में कभी भी True पर सेट नहीं किया जाता है। इस प्रकार, जबकि कथन की स्थिति, जो not user है, का मूल्यांकन हमेशा True होता है। यह एक अनंत लूप का कारण बनता है, क्योंकि एक while लूप कोड को तब तक निष्पादित करता है जब तक एक परीक्षण स्थिति True है।

गेम की संरचना कैसे की जाती है (सर्वश्रेष्ठ-तीन प्रारूप, एक-खेल प्रारूप, आदि) के आधार पर, आपको अपनी समाप्ति की स्थिति बदलनी चाहिए। उदाहरण के लिए, आप एक काउंटर (num_games) बढ़ा सकते हैं और लूप को समाप्त कर सकते हैं जब काउंटर कुछ निश्चित मान तक पहुंच जाए।

वैकल्पिक रूप से, आप break या return कथनों का उपयोग कर सकते हैं। break स्टेटमेंट आपके while लूप को खत्म कर देगा। return विधि को समाप्त कर देगा (और परिणामस्वरूप आपके while लूप को भी समाप्त कर देगा)।

0
Maya Nayak 16 जिंदा 2022, 09:58

एक अतिरिक्त ध्वज 'लूप' जोड़ा गया जो जारी रखने के लिए उपयोगकर्ता द्वारा 'एन' कहने पर लूप को समाप्त कर देगा। यदि उपयोगकर्ता जारी रखने के लिए 'Y' कहता है तो यह उपयोगकर्ता को अन्य लूप में जाने के लिए गलत पर सेट कर देगा।

import random

print("Welcome to the game of rock, paper, scissors!")  

newLi = ["Rock", "Paper", "Scissors"]  
numRandom = newLi[random.randint(0, 3)]
user = False 
loop = True

while(loop):
    while not user:
        user = input("Rock, Paper, Scissors? \nAnswer: ") 
        if user == numRandom: 
            print("It's a tie! Please try again.")  
        elif user == "Rock" or user == "rock":
            if numRandom == "Paper":  
                print("Aw! You lost. Try again!", numRandom, "covers", user)
            else :
                print("Good job! You're the winner!", user, "smashes", numRandom)
        elif user == "Paper" or user == "paper":
            if numRandom == "Scissors":
                print("Aw! You lost. Try again!", numRandom, "cuts", user)
            else :
                print("Good job! You're the winner!", user, "covers", numRandom)
        elif user == "Scissors" or user == "scissors":
            if numRandom == "Rock":
                print("Aw! You lost. Try again!", numRandom, "smashes", user)
            else :
                print("Good job! You're the winner!", user, "cuts", numRandom)
        else:
            print("Invalid answer! Try again.")  

    endGame = input("Would you like to keep playing? Y or N\nAnswer: ")

    if endGame == "N":
        loop=False
    else:
        user=False
-1
Vishal 16 जिंदा 2022, 09:44
इस उत्तर के लिए विस्तार की आवश्यकता है। यह एक उत्तर क्यों है? यह अलग तरीके से क्या करता है? वह अंतर या अंतर वांछित परिणाम कैसे देता है?
 – 
Chris
16 जिंदा 2022, 09:27
यदि उपयोगकर्ता जारी रखने के लिए नहीं कहता है तो लूप को तोड़ने के लिए एक अतिरिक्त ध्वज जोड़ा गया
 – 
Vishal
16 जिंदा 2022, 09:29
1
आपने इंडेंटेशन भी बदल दिया, जो कि पायथन में एक बड़ी बात है। कृपया विस्तार जोड़ने के लिए पोस्ट को संपादित करें।
 – 
Chris
16 जिंदा 2022, 09:32

मैंने एक उपयोगकर्ता इनपुट चर rounds_to_play जोड़ा है जो उपयोगकर्ता से पूछता है कि वे कितने राउंड खेलना चाहते हैं, यह चर खेल के पूरा होने तक प्रति राउंड घट जाएगा। आप एक बूल is_playing भी जोड़ सकते हैं और कह सकते हैं is_playing के दौरान और फिर खेल खत्म होने पर बूल को गलत पर सेट करें।

import random

print("Welcome to the game of rock, paper, scissors!")

new_lst = ["Rock", "Paper", "Scissors"]
num_random = new_lst[random.randint(0, 3)]
rounds_to_play = int(input("How many rounds would you like to play: "))

while rounds_to_play > 0:
    user_input = input("Rock, Paper, Scissors? \nAnswer: ")
    if user_input == num_random:
        print("It's a tie! Please try again.")
    elif user_input == "Rock" or user_input == "rock":
        if num_random == "Paper":
            print("Aw! You lost. Try again!", num_random, "covers", user_input)
        else:
            print("Good job! You're the winner!",
                  user_input, "smashes", num_random)
    elif user_input == "Paper" or user_input == "paper":
        if num_random == "Scissors":
            print("Aw! You lost. Try again!", num_random, "cuts", user_input)
        else:
            print("Good job! You're the winner!",
                  user_input, "covers", num_random)
    elif user_input == "Scissors" or user_input == "scissors":
        if num_random == "Rock":
            print("Aw! You lost. Try again!",
                  num_random, "smashes", user_input)
        else:
            print("Good job! You're the winner!",
                  user_input, "cuts", num_random)
    else:
        print("Invalid answer! Try again.")
        rounds_to_play += 1

    rounds_to_play -= 1
0
Anton Christiansen 16 जिंदा 2022, 09:37

पहले आपको एंडगेम प्राप्त करना होगा और यदि लूप के अंदर लूप। तब आप अपने लूप को शुरू करने और रोकने के लिए ध्वज चर का उपयोग कर सकते हैं

import random

print("Welcome to the game of rock, paper, scissors!")

newLi = ["Rock", "Paper", "Scissors"]
numRandom = newLi[random.randint(0, 3)]
flag = True
while flag:
    user = input("Rock, Paper, Scissors? \nAnswer: ")
    if user == numRandom:
        print("It's a tie! Please try again.")
    elif user == "Rock" or user == "rock":
        if numRandom == "Paper":
            print("Aw! You lost. Try again!", numRandom, "covers", user)
        else :
            print("Good job! You're the winner!", user, "smashes", numRandom)
    elif user == "Paper" or user == "paper":
        if numRandom == "Scissors":
            print("Aw! You lost. Try again!", numRandom, "cuts", user)
        else :
            print("Good job! You're the winner!", user, "covers", numRandom)
    elif user == "Scissors" or user == "scissors":
        if numRandom == "Rock":
            print("Aw! You lost. Try again!", numRandom, "smashes", user)
        else :
            print("Good job! You're the winner!", user, "cuts", numRandom)
    else:
        print("Invalid answer! Try again.")

    endGame = input("Would you like to keep playing? Y or N\nAnswer: ")

    if endGame == "Y":
        flag =True
    else:
        flag = False
0
Piyush Pranjal 16 जिंदा 2022, 09:46