为什么else语句不执行?

时间:2019-11-01 22:32:20

标签: python if-statement

import random

words = ["Rock", "Paper", "Scissors"]

wins, loss = 0, 0

while True:

    word = random.choice(words)

    ur_word = input("Rock, Paper, Scissors..: ")

    print("\nComputer: {0}\nYou: {1}\n".format(word, ur_word))

    if word == ur_word:
        print("Tie!")
        continue
    elif ur_word == 'q':
        break
    elif word == 'Rock':
        if ur_word == 'Paper':
            print("You won!")
            wins += 1
        elif ur_word == 'Scissors':
            print("You lost!")
            loss += 1
    elif word == 'Paper':
        if ur_word == 'Rock':
            print("You lost")
            loss += 1
        elif ur_word == 'Scissors':
            print("You won!")
            wins += 1
    elif word == 'Scissors':
        if ur_word == 'Rock':
            print("You won!")
            wins += 1
        elif ur_word == 'Paper':
            print("You lost!")
            loss += 1
    else:                                        <<<<---------///----------HERE------------///----
        print("Please enter a valid input.")


    if wins == 3:
        print("\n\tYou won the entire game of three rounds!")
        break
    elif loss == 3:
        print("\n\tYou lost the entire game of three rounds!")
        break

**现在,我的问题是:当我输入“ 74n9wndwekf”之类的任意值时,为什么所选的else语句不执行?

一个人告诉我,您不能在if语句之后执行elifelse语句,也不能在break语句之后执行代码。我不明白他的意思,也不知道这些信息对您没有任何价值。**

2 个答案:

答案 0 :(得分:2)

global g_list永远不会发生,因为您的else之一永远是真实的。 elif始终成为wordRockPaper之一,因此您永远都不会打中Scissors

一个简单的解决方法是重组else的链以首先检查if...elif

另一种可行的方法是先进行输入验证,然后再执行其他操作,例如:

ur_word

答案 1 :(得分:0)

在if语句中,您正在检查以下内容:

  • 如果计算机的随机选择是“ Rock”,请执行此操作。
  • 否则为“纸张”,则执行此操作..,
  • 否则为“剪刀”,则执行此操作..,
  • 其他打印无效输入。

这里的问题是计算机的随机选择将始终是“ Rock”,“ Paper”或“ Scissors”,因此将满足前三个if / elif条件之一,因此您的else块将永远不会达到。

尝试设计if语句来首先检查用户输入,而不是计算机的选择。