Game of Rock paper and scissors against a random bot












0












$begingroup$


I have to do a project on a game of rock, paper, and scissors, and the code I have so far is a complete code for the game, but my professor does not like it since it is too redundant. Is there anyway to shorten it or make it more simple?



import random

while True:
bot = random.choice(["Rock", "Paper", "Scissors"]).lower()

user_choice = input("Choose between Rock, Paper, and Scissors or -1 to exit: n ").lower()
if user_choice == bot:
print("We tied! I chose", bot," and you chose", user_choice)
elif user_choice == "rock":
if bot == "paper":
print("You lose! I chose", bot," and you chose", user_choice , ", Paper beats rock!")
elif bot == "scissors":
print("You win! I chose", bot," and you chose", user_choice , ", Rock beat scissors!")
elif user_choice == "paper":
if bot == "rock":
print("You win! I chose",bot," and you chose", user_choice , ", Paper beats rock!")
elif bot == "scissors:":
print("You lose! I chose", bot," and you chose", user_choice , ", Scissors beats paper")
elif user_choice == "scissors":
if bot == "paper":
print("You win! I chose", bot," and you chose",user_choice, ", Scissors beats paper")
elif bot == "rock":
print("You Lose! I chose", bot," and you chose", user_choice , ", Rock beats scissors")
else:
print("Invalid Entry, you typed:", user_choice, ", Please try again: ")

if user_choice == '-1':
print("You selected -1 to exit, Goodbye!")
exit()









share|improve this question









New contributor




Minh Tran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$












  • $begingroup$
    Welcome to Code Review! How much do you know about creating functions and passing arguments, has this been mentioned yet in the course?
    $endgroup$
    – Mast
    3 hours ago
















0












$begingroup$


I have to do a project on a game of rock, paper, and scissors, and the code I have so far is a complete code for the game, but my professor does not like it since it is too redundant. Is there anyway to shorten it or make it more simple?



import random

while True:
bot = random.choice(["Rock", "Paper", "Scissors"]).lower()

user_choice = input("Choose between Rock, Paper, and Scissors or -1 to exit: n ").lower()
if user_choice == bot:
print("We tied! I chose", bot," and you chose", user_choice)
elif user_choice == "rock":
if bot == "paper":
print("You lose! I chose", bot," and you chose", user_choice , ", Paper beats rock!")
elif bot == "scissors":
print("You win! I chose", bot," and you chose", user_choice , ", Rock beat scissors!")
elif user_choice == "paper":
if bot == "rock":
print("You win! I chose",bot," and you chose", user_choice , ", Paper beats rock!")
elif bot == "scissors:":
print("You lose! I chose", bot," and you chose", user_choice , ", Scissors beats paper")
elif user_choice == "scissors":
if bot == "paper":
print("You win! I chose", bot," and you chose",user_choice, ", Scissors beats paper")
elif bot == "rock":
print("You Lose! I chose", bot," and you chose", user_choice , ", Rock beats scissors")
else:
print("Invalid Entry, you typed:", user_choice, ", Please try again: ")

if user_choice == '-1':
print("You selected -1 to exit, Goodbye!")
exit()









share|improve this question









New contributor




Minh Tran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$












  • $begingroup$
    Welcome to Code Review! How much do you know about creating functions and passing arguments, has this been mentioned yet in the course?
    $endgroup$
    – Mast
    3 hours ago














0












0








0





$begingroup$


I have to do a project on a game of rock, paper, and scissors, and the code I have so far is a complete code for the game, but my professor does not like it since it is too redundant. Is there anyway to shorten it or make it more simple?



import random

while True:
bot = random.choice(["Rock", "Paper", "Scissors"]).lower()

user_choice = input("Choose between Rock, Paper, and Scissors or -1 to exit: n ").lower()
if user_choice == bot:
print("We tied! I chose", bot," and you chose", user_choice)
elif user_choice == "rock":
if bot == "paper":
print("You lose! I chose", bot," and you chose", user_choice , ", Paper beats rock!")
elif bot == "scissors":
print("You win! I chose", bot," and you chose", user_choice , ", Rock beat scissors!")
elif user_choice == "paper":
if bot == "rock":
print("You win! I chose",bot," and you chose", user_choice , ", Paper beats rock!")
elif bot == "scissors:":
print("You lose! I chose", bot," and you chose", user_choice , ", Scissors beats paper")
elif user_choice == "scissors":
if bot == "paper":
print("You win! I chose", bot," and you chose",user_choice, ", Scissors beats paper")
elif bot == "rock":
print("You Lose! I chose", bot," and you chose", user_choice , ", Rock beats scissors")
else:
print("Invalid Entry, you typed:", user_choice, ", Please try again: ")

if user_choice == '-1':
print("You selected -1 to exit, Goodbye!")
exit()









share|improve this question









New contributor




Minh Tran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







$endgroup$




I have to do a project on a game of rock, paper, and scissors, and the code I have so far is a complete code for the game, but my professor does not like it since it is too redundant. Is there anyway to shorten it or make it more simple?



import random

while True:
bot = random.choice(["Rock", "Paper", "Scissors"]).lower()

user_choice = input("Choose between Rock, Paper, and Scissors or -1 to exit: n ").lower()
if user_choice == bot:
print("We tied! I chose", bot," and you chose", user_choice)
elif user_choice == "rock":
if bot == "paper":
print("You lose! I chose", bot," and you chose", user_choice , ", Paper beats rock!")
elif bot == "scissors":
print("You win! I chose", bot," and you chose", user_choice , ", Rock beat scissors!")
elif user_choice == "paper":
if bot == "rock":
print("You win! I chose",bot," and you chose", user_choice , ", Paper beats rock!")
elif bot == "scissors:":
print("You lose! I chose", bot," and you chose", user_choice , ", Scissors beats paper")
elif user_choice == "scissors":
if bot == "paper":
print("You win! I chose", bot," and you chose",user_choice, ", Scissors beats paper")
elif bot == "rock":
print("You Lose! I chose", bot," and you chose", user_choice , ", Rock beats scissors")
else:
print("Invalid Entry, you typed:", user_choice, ", Please try again: ")

if user_choice == '-1':
print("You selected -1 to exit, Goodbye!")
exit()






python homework rock-paper-scissors






share|improve this question









New contributor




Minh Tran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




Minh Tran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 7 mins ago









200_success

130k16153417




130k16153417






New contributor




Minh Tran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 3 hours ago









Minh TranMinh Tran

1




1




New contributor




Minh Tran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Minh Tran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Minh Tran is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • $begingroup$
    Welcome to Code Review! How much do you know about creating functions and passing arguments, has this been mentioned yet in the course?
    $endgroup$
    – Mast
    3 hours ago


















  • $begingroup$
    Welcome to Code Review! How much do you know about creating functions and passing arguments, has this been mentioned yet in the course?
    $endgroup$
    – Mast
    3 hours ago
















$begingroup$
Welcome to Code Review! How much do you know about creating functions and passing arguments, has this been mentioned yet in the course?
$endgroup$
– Mast
3 hours ago




$begingroup$
Welcome to Code Review! How much do you know about creating functions and passing arguments, has this been mentioned yet in the course?
$endgroup$
– Mast
3 hours ago










1 Answer
1






active

oldest

votes


















0












$begingroup$

Please run this a few times and let me know what you think. There is almost certainly a way to make this even simpler than I made it (for example, ties are being treated as a special case, but that is not necessary). However, as it is, it at least avoids some of the repetition in the original code.



# note: I'm using 4 spaces for indentations in Python, which is common.
import random


def main():
while True:
user_choice = input("Choose between Rock, Paper, and Scissors or -1 to exit: n ").lower()
# if the user enters -1 this immediately ends everything (note that in your original code that was not the case)
if user_choice == '-1':
print("You selected -1 to exit, Goodbye!")
break
play_game(user_choice)


def play_game(user_choice):

# In this situation there is no need for .lower(), just don't capitalize your words in the first place
# I changed bot to bot_choice so a reader (or your future self) will more immediately know what's in the variable
bot_choice = random.choice(["rock", "paper", "scissors"])

if user_choice == bot_choice:
print("We tied! I chose {} and you chose {}".format(bot_choice, user_choice))
return

win_or_lose, winning_object, loosing_object = check_for_win(bot_choice, user_choice)
if win_or_lose is not None:
print("You {}! I chose {}, and you chose {}, {} beats {}!".format(win_or_lose, bot_choice, user_choice, winning_object, loosing_object))
return

print("Invalid Entry, you typed: {}, Please try again: ".format(user_choice))


def check_for_win(bot_choice, user_choice):
# dictionary keys are tuples that have possible game-outcomes, dictionary values show winning object give the key
rules_dictionary = {('paper', 'rock'): 'paper', ('rock', 'scissors'): 'rock', ('paper', 'scissors'): 'scissors'}
# iterate through the keys of the dictionary
for two_choices_in_won_game in rules_dictionary:
if sorted((bot_choice, user_choice)) == sorted(two_choices_in_won_game):
if bot_choice == rules_dictionary[two_choices_in_won_game]:
return 'lose', bot_choice, user_choice
return 'win', user_choice, bot_choice
return None, None, None


# The below if statement will evaluate to True of your program is run from the command line
if __name__ == '__main__':
main()





share|improve this answer









$endgroup$













    Your Answer





    StackExchange.ifUsing("editor", function () {
    return StackExchange.using("mathjaxEditing", function () {
    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
    });
    });
    }, "mathjax-editing");

    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "196"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });






    Minh Tran is a new contributor. Be nice, and check out our Code of Conduct.










    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f214436%2fgame-of-rock-paper-and-scissors-against-a-random-bot%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0












    $begingroup$

    Please run this a few times and let me know what you think. There is almost certainly a way to make this even simpler than I made it (for example, ties are being treated as a special case, but that is not necessary). However, as it is, it at least avoids some of the repetition in the original code.



    # note: I'm using 4 spaces for indentations in Python, which is common.
    import random


    def main():
    while True:
    user_choice = input("Choose between Rock, Paper, and Scissors or -1 to exit: n ").lower()
    # if the user enters -1 this immediately ends everything (note that in your original code that was not the case)
    if user_choice == '-1':
    print("You selected -1 to exit, Goodbye!")
    break
    play_game(user_choice)


    def play_game(user_choice):

    # In this situation there is no need for .lower(), just don't capitalize your words in the first place
    # I changed bot to bot_choice so a reader (or your future self) will more immediately know what's in the variable
    bot_choice = random.choice(["rock", "paper", "scissors"])

    if user_choice == bot_choice:
    print("We tied! I chose {} and you chose {}".format(bot_choice, user_choice))
    return

    win_or_lose, winning_object, loosing_object = check_for_win(bot_choice, user_choice)
    if win_or_lose is not None:
    print("You {}! I chose {}, and you chose {}, {} beats {}!".format(win_or_lose, bot_choice, user_choice, winning_object, loosing_object))
    return

    print("Invalid Entry, you typed: {}, Please try again: ".format(user_choice))


    def check_for_win(bot_choice, user_choice):
    # dictionary keys are tuples that have possible game-outcomes, dictionary values show winning object give the key
    rules_dictionary = {('paper', 'rock'): 'paper', ('rock', 'scissors'): 'rock', ('paper', 'scissors'): 'scissors'}
    # iterate through the keys of the dictionary
    for two_choices_in_won_game in rules_dictionary:
    if sorted((bot_choice, user_choice)) == sorted(two_choices_in_won_game):
    if bot_choice == rules_dictionary[two_choices_in_won_game]:
    return 'lose', bot_choice, user_choice
    return 'win', user_choice, bot_choice
    return None, None, None


    # The below if statement will evaluate to True of your program is run from the command line
    if __name__ == '__main__':
    main()





    share|improve this answer









    $endgroup$


















      0












      $begingroup$

      Please run this a few times and let me know what you think. There is almost certainly a way to make this even simpler than I made it (for example, ties are being treated as a special case, but that is not necessary). However, as it is, it at least avoids some of the repetition in the original code.



      # note: I'm using 4 spaces for indentations in Python, which is common.
      import random


      def main():
      while True:
      user_choice = input("Choose between Rock, Paper, and Scissors or -1 to exit: n ").lower()
      # if the user enters -1 this immediately ends everything (note that in your original code that was not the case)
      if user_choice == '-1':
      print("You selected -1 to exit, Goodbye!")
      break
      play_game(user_choice)


      def play_game(user_choice):

      # In this situation there is no need for .lower(), just don't capitalize your words in the first place
      # I changed bot to bot_choice so a reader (or your future self) will more immediately know what's in the variable
      bot_choice = random.choice(["rock", "paper", "scissors"])

      if user_choice == bot_choice:
      print("We tied! I chose {} and you chose {}".format(bot_choice, user_choice))
      return

      win_or_lose, winning_object, loosing_object = check_for_win(bot_choice, user_choice)
      if win_or_lose is not None:
      print("You {}! I chose {}, and you chose {}, {} beats {}!".format(win_or_lose, bot_choice, user_choice, winning_object, loosing_object))
      return

      print("Invalid Entry, you typed: {}, Please try again: ".format(user_choice))


      def check_for_win(bot_choice, user_choice):
      # dictionary keys are tuples that have possible game-outcomes, dictionary values show winning object give the key
      rules_dictionary = {('paper', 'rock'): 'paper', ('rock', 'scissors'): 'rock', ('paper', 'scissors'): 'scissors'}
      # iterate through the keys of the dictionary
      for two_choices_in_won_game in rules_dictionary:
      if sorted((bot_choice, user_choice)) == sorted(two_choices_in_won_game):
      if bot_choice == rules_dictionary[two_choices_in_won_game]:
      return 'lose', bot_choice, user_choice
      return 'win', user_choice, bot_choice
      return None, None, None


      # The below if statement will evaluate to True of your program is run from the command line
      if __name__ == '__main__':
      main()





      share|improve this answer









      $endgroup$
















        0












        0








        0





        $begingroup$

        Please run this a few times and let me know what you think. There is almost certainly a way to make this even simpler than I made it (for example, ties are being treated as a special case, but that is not necessary). However, as it is, it at least avoids some of the repetition in the original code.



        # note: I'm using 4 spaces for indentations in Python, which is common.
        import random


        def main():
        while True:
        user_choice = input("Choose between Rock, Paper, and Scissors or -1 to exit: n ").lower()
        # if the user enters -1 this immediately ends everything (note that in your original code that was not the case)
        if user_choice == '-1':
        print("You selected -1 to exit, Goodbye!")
        break
        play_game(user_choice)


        def play_game(user_choice):

        # In this situation there is no need for .lower(), just don't capitalize your words in the first place
        # I changed bot to bot_choice so a reader (or your future self) will more immediately know what's in the variable
        bot_choice = random.choice(["rock", "paper", "scissors"])

        if user_choice == bot_choice:
        print("We tied! I chose {} and you chose {}".format(bot_choice, user_choice))
        return

        win_or_lose, winning_object, loosing_object = check_for_win(bot_choice, user_choice)
        if win_or_lose is not None:
        print("You {}! I chose {}, and you chose {}, {} beats {}!".format(win_or_lose, bot_choice, user_choice, winning_object, loosing_object))
        return

        print("Invalid Entry, you typed: {}, Please try again: ".format(user_choice))


        def check_for_win(bot_choice, user_choice):
        # dictionary keys are tuples that have possible game-outcomes, dictionary values show winning object give the key
        rules_dictionary = {('paper', 'rock'): 'paper', ('rock', 'scissors'): 'rock', ('paper', 'scissors'): 'scissors'}
        # iterate through the keys of the dictionary
        for two_choices_in_won_game in rules_dictionary:
        if sorted((bot_choice, user_choice)) == sorted(two_choices_in_won_game):
        if bot_choice == rules_dictionary[two_choices_in_won_game]:
        return 'lose', bot_choice, user_choice
        return 'win', user_choice, bot_choice
        return None, None, None


        # The below if statement will evaluate to True of your program is run from the command line
        if __name__ == '__main__':
        main()





        share|improve this answer









        $endgroup$



        Please run this a few times and let me know what you think. There is almost certainly a way to make this even simpler than I made it (for example, ties are being treated as a special case, but that is not necessary). However, as it is, it at least avoids some of the repetition in the original code.



        # note: I'm using 4 spaces for indentations in Python, which is common.
        import random


        def main():
        while True:
        user_choice = input("Choose between Rock, Paper, and Scissors or -1 to exit: n ").lower()
        # if the user enters -1 this immediately ends everything (note that in your original code that was not the case)
        if user_choice == '-1':
        print("You selected -1 to exit, Goodbye!")
        break
        play_game(user_choice)


        def play_game(user_choice):

        # In this situation there is no need for .lower(), just don't capitalize your words in the first place
        # I changed bot to bot_choice so a reader (or your future self) will more immediately know what's in the variable
        bot_choice = random.choice(["rock", "paper", "scissors"])

        if user_choice == bot_choice:
        print("We tied! I chose {} and you chose {}".format(bot_choice, user_choice))
        return

        win_or_lose, winning_object, loosing_object = check_for_win(bot_choice, user_choice)
        if win_or_lose is not None:
        print("You {}! I chose {}, and you chose {}, {} beats {}!".format(win_or_lose, bot_choice, user_choice, winning_object, loosing_object))
        return

        print("Invalid Entry, you typed: {}, Please try again: ".format(user_choice))


        def check_for_win(bot_choice, user_choice):
        # dictionary keys are tuples that have possible game-outcomes, dictionary values show winning object give the key
        rules_dictionary = {('paper', 'rock'): 'paper', ('rock', 'scissors'): 'rock', ('paper', 'scissors'): 'scissors'}
        # iterate through the keys of the dictionary
        for two_choices_in_won_game in rules_dictionary:
        if sorted((bot_choice, user_choice)) == sorted(two_choices_in_won_game):
        if bot_choice == rules_dictionary[two_choices_in_won_game]:
        return 'lose', bot_choice, user_choice
        return 'win', user_choice, bot_choice
        return None, None, None


        # The below if statement will evaluate to True of your program is run from the command line
        if __name__ == '__main__':
        main()






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 1 hour ago









        okcappokcapp

        626




        626






















            Minh Tran is a new contributor. Be nice, and check out our Code of Conduct.










            draft saved

            draft discarded


















            Minh Tran is a new contributor. Be nice, and check out our Code of Conduct.













            Minh Tran is a new contributor. Be nice, and check out our Code of Conduct.












            Minh Tran is a new contributor. Be nice, and check out our Code of Conduct.
















            Thanks for contributing an answer to Code Review Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            Use MathJax to format equations. MathJax reference.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f214436%2fgame-of-rock-paper-and-scissors-against-a-random-bot%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            404 Error Contact Form 7 ajax form submitting

            How to know if a Active Directory user can login interactively

            Refactoring coordinates for Minecraft Pi buildings written in Python