Python 3.x 如果不满足第一个条件,如何打印?

Python 3.x 如果不满足第一个条件,如何打印?,python-3.x,Python 3.x,我在练习条件句和逻辑运算符 在玩家1输入后,如果玩家1输入了一个无效的对象,我如何制作下面的石头、布、剪刀游戏打印“这不是一个有效的对象选择”?现在,直到两个玩家都输入了一个对象,字符串才会被打印出来 另外,对于让下面的代码更优雅,有什么建议吗 player1 = input('Player 1? ') player2 = input('Player 2? ') if (player1.lower() == 'rock' and player2.lower() == 'rock'):

我在练习条件句和逻辑运算符

在玩家1输入后,如果玩家1输入了一个无效的对象,我如何制作下面的石头、布、剪刀游戏打印“这不是一个有效的对象选择”?现在,直到两个玩家都输入了一个对象,字符串才会被打印出来

另外,对于让下面的代码更优雅,有什么建议吗

player1 = input('Player 1? ')
player2 = input('Player 2? ')

if (player1.lower() == 'rock' and
    player2.lower() == 'rock'):
    print('Tie.')
elif (player1.lower() == 'rock' and
    player2.lower() == 'paper'):
    print('Player 2 wins.')
elif (player1.lower() == 'rock' and
    player2.lower() == 'scissors'):
    print('Player 1 wins.')
elif (player1.lower() == 'paper' and
    player2.lower() == 'paper'):
    print('Tie.')
elif (player1.lower() == 'paper' and
    player2.lower() == 'scissors'):
    print('Player 2 wins.')
elif (player1.lower() == 'paper' and
    player2.lower() == 'rock'):
    print('Player 1 wins.')
elif (player1.lower() == 'scissors' and
    player2.lower() == 'scissors'):
    print('Tie.')
elif (player1.lower() == 'scissors' and
    player2.lower() == 'rock'):
    print('Player 2 wins.')
elif (player1.lower() == 'scissors' and
    player2.lower() == 'paper'):
    print('Player 1 wins.')
else:
    print('This is not a valid object selection.')

用一个函数询问每个玩家的选择如何?只有当播放机输入一个有效的选项时,才允许播放机通过代码进入逻辑语句

def get_choice(Player_number):
    print('Player', Player_number, 'please enter your choice: ', end='')
    while True:
        choice = input().lower()        #lower converts input to all lowercase
        if choice in ('rock', 'paper', 'scissors'):   # check if valid choice 
            return choice   # if valid return choice
        else:
            print('Incorrect choice, try again: ', end='')  # else print this and start loop agan

player1 = get_choice('1')
player2 = get_choice('2')
对于逻辑部分,请注意,如果player1 choice==player2 choice,这将替换代码中的3个elif块,即

if player1 == player2:
    print('tie')
现在替换pl==岩石和p2==岩石、p1==剪刀和p2==剪刀等

编辑:

1) 如果将2中的print语句移动到4中的输入内部,问题是不能再指定end=''参数,因为它不适用于输入。正如您所说,它将生成SyntaxError。当在终端中以这种方式运行时,代码看起来更干净,因为所有代码都排成一行,但请自己测试它

2) end=''在print语句的末尾打印一个空字符串。您将其与end='\n'混淆,后者在打印后打印新行。由于我的方法是在打印后将光标保持在同一行上,因此它与输入对齐以使其看起来更美观,请参见上面的问题。注意python中的print语句在默认情况下通过,end='\n'。这就是为什么

print('hello')    #same as print('hello', end='\n')
print('world)
hello
world

print('hello', end='')
print('world', end='')
helloworld
3) while True循环将始终计算为True。因此while循环的主体将不断循环-但是,它可以使用“return choice”函数返回整个函数。如果要完成到达return语句所需的逻辑步骤,则离开此函数的唯一方法。在这种情况下,除非选择在该元组中('rock'、'paper'、'scisors'),否则它只会打印无效条目,然后重试,完成该块。然而,由于while仍然为true,循环将再次开始并要求用户再次输入。这将重复进行,直到选择了有效的选项

4) 您可以将其连接到播放器编号上,例如

print('Player', Player_number + ',' , 'please enter your choice: ', end='')

谢谢我还没有开始使用函数,但我想我理解了大部分语法。但有几个问题:1)第2行print()中的代码是否可以插入第4行的input()中?我尝试了,但收到了一个语法错误。2) 我认为默认情况下使用end=''会在print语句后创建一个新行?但这似乎适得其反。你能解释一下原因吗?3) 为什么在第3行中使用while循环?它不是只需要运行一次代码吗?4)如果我想在第2行的Player_编号后面加一个逗号,那是如何实现的?我不知道如何避免空白。请检查我的编辑,我已尝试回答问题。请接受我的回答,谢谢!