Using if statement in while loop and I always got the same answer

def roll_again(player_hold: str):
    option = ["y", "Y", "n", "N"]
    while True:
        p_choice = str(input(f"Roll again, {player_hold}? (Y/N) "))

        if p_choice in option:
            if p_choice == option[0] or option[1]:
                print("answer:1")
                
            else:
                print("answer:2")
        else:
           print(f"""I don't understand: \"{p_choice}\". 'Please enter either "Y" or "N".\n""")
           continue

Could someone tell me why I always got “answer : 1” even my input is “N” or “n”?

if p_choice == option[0] or option[1]:
must be
if p_choice == option[0] or p_choice == option[1]:

You could make your option list to be just ["y", "n"] and force the input (which does not need the str(), because input() will return a string object by default) to lower case:

p_choice = input(f"Roll again, {player_hold}? (Y/N) ").lower()

The nested if/else then needs to be:

if p_choice in option:
    if p_choice == option[0]:
        print("answer:1")
    else:
        print("answer:2")
else:
    print() # whatever message you like

The problem is with the if statement

if p_choice == option[0] or option[1]:

The conditional expression in the above if statement gets evaluated as (p_choice == option[0]) or (option[1])

The first part of the expression gets evaluated to False when p_choice is either ‘n’ or ‘N’.
But the second part of the expression which appears after ‘or’ gets always evaluated to True as in Python any variable with value other the 0s, false, empty sequences, empty mappings will gets evaluated as True.

So over all the result of expression in the if statement is always ‘True’. Due to this you get the value printed as ‘answer 1’.

One obvious fix would be to rewrite the if statement as

if p_choice == option[0] or p_choice == option[1]:

Besides that you can also simplify the overall function by rewriting it as below:

def roll_again(player_hold: str):
    option = ["y", "n"]
    while True:
        p_choice = str(input(f"Roll again, {player_hold}? (Y/N) "))

        if p_choice.lower() in option:
            if p_choice.lower() == option[0]:
                print("answer:1")
            else:
                print("answer:2")
        else:
           print(f"""I don't understand: \"{p_choice}\". 'Please enter either "Y" or "N".\n""")
           continue