2 Player Rock Paper Scissors (Python)
Remove Redundant Parenthesis
In this line:
while (again == 'y'):

The parenthesis are unneeded and can (should) be removed.
Use a dict to drive the stacked if/else
Whenever I see a stacked if/else I look to restructure the code using a dict (mapping) instead.
The net results of the if/else structure in your code can be put into a dict like so:
results = {
    &quot;rock&quot;: {
        &quot;rock&quot;: &quot;The game is a draw&quot;,
        &quot;paper&quot;: &quot;Player 2 wins!&quot;,
        &quot;scissors&quot;: &quot;Player 1 wins!&quot;,
    },
    &quot;paper&quot;: {
        &quot;rock&quot;: &quot;Player 1 wins!&quot;,
        &quot;paper&quot;: &quot;The game is a draw&quot;,
        &quot;scissors&quot;: &quot;Player 2 wins!&quot;,
    },
    &quot;scissors&quot;: {
        &quot;rock&quot;: &quot;Player 2 wins!&quot;,
        &quot;paper&quot;: &quot;Player 1 wins!&quot;,
        &quot;scissors&quot;: &quot;The game is a draw&quot;,
    },
}

If the results are mapped this way, then the interactions with the user becomes more clear and
your loop can simply become:
while again == 'y':

    p1 = input(&quot;Player 1 --&gt; Rock, Paper, or Scissors? &quot;).lower()
    print()

    p2 = input(&quot;Player 2 --&gt; Rock, Paper, or Scissors? &quot;).lower()
    print()

    result = results.get(p1, {}).get(p2, &quot;Invalid input, try again&quot;)
    print(result)

    again = input(&quot;Type y to play again, anything else to stop: &quot;)
    print() 

This is an example of separating the UI (User Interface) from the Business Logic.