当前位置: 首页 > 知识库问答 >
问题:

即使在条件为false的情况下执行If语句

邢洋
2023-03-14

我对if/elif语句有这个烦人的问题。我是新手,抱歉愚蠢的问题。我试图找到一个修复,但没有人有它的Python。所以,如果两个条件都是True,我希望程序执行if子句中的代码。据我所知,只有当两个条件都为True时,子句中的代码才会执行,对吗?不过,这在我的代码中似乎没有发生。

result = userNumber + randomNumber
if not result % 2 == 0 and userChoice == 'e' or 'even':
    print ('That number is odd, so you lost :(')
if result % 2 == 0 and userChoice == 'e' or 'even':
    print ('That number is even, so you won :)')
if not result % 2 == 0 and userChoice == 'o' or 'odd':
    print ('That number is odd, so you won :)')
if result % 2 == 0 and userChoice == 'o' or 'odd':
    print ('That number is even, so you lost :(')

因此,userNumberrandomNumber变量之前就已经设置好了。在这个游戏中,发生的是:用户选择偶数或奇数,并输入一个从0到5的数字。然后,计算机使用random.randint()从0到5随机选择一个数字。之后,变量结果被设置为用户编号随机编号之和。如果该总和的结果为奇数,用户选择奇数,则用户获胜;如果用户选择偶数,则用户失败。如果和是偶数,则正好相反:如果前一个和的结果是偶数,用户选择偶数,则用户获胜;如果用户选择奇数,则用户失败。我希望你能理解!

因此,我的代码现在的问题是,出于某种原因,它执行所有四条IF语句,因此最终输出如下所示:

输入字母'o'如果你想要奇数和字母'e'如果你想要偶数。

您的选择:o

现在,输入一个从0到5的数字:2

您的号码: 2

计算机编号:5

把这两个数字加在一起,我们得到7

那个数字是奇数,所以你输了:(

这个数字是奇数,所以你赢了:)

这个数字是偶数,所以你输了:(

其代码为:

import random
import time

print ('Welcome to the Even or Odd game!')
print ('Type letter \'o\' if you want odd and the letter \'e\' if you want even.')

userChoice = input('Your choice: ').lower()
time.sleep(1)
userNumber = int(input('Now, type in a number from 0 to 5: '))

randomNumber = random.randint(0,5)
time.sleep(2)

print ('Your number: ' + str(int(userNumber)))
time.sleep(2)
print ('Computer\'s number: ' + str(int(randomNumber)))
time.sleep(2)

result = userNumber + randomNumber
print (str(result))
print ('Adding these two numbers together, we get ' + str(result))
if not result % 2 == 0 and userChoice == 'e' or 'even':
    print ('That number is odd, so you lost :(')
if result % 2 == 0 and userChoice == 'e' or 'even':
    print ('That number is even, so you won :)')
if not result % 2 == 0 and userChoice == 'o' or 'odd':
    print ('That number is odd, so you won :)')
if result % 2 == 0 and userChoice == 'o' or 'odd':
    print ('That number is even, so you lost :(')

有什么想法吗?抱歉发帖太长,如有重复,请见谅!我只是在网上没有找到任何答案:/非常感谢!

共有1个答案

上官凯泽
2023-03-14
>>> if False or 'even':
...     print('This shouldn\'t work')
... 
This shouldn't work

非空字符串的真值为True。虽然您的其他条件是False,但由于您编写条件的方式,您仍然在执行这些语句。

目前,这是如何评估您的病情:

if (not result % 2 == 0) and ((userChoice == 'e') or ('even')):
# __________1________________________2_________________3_____

(1)isTrue.(2)isFalse.但是(3)是True(因为字符串的真实性)。所以执行第一个if

而且,您只需要执行其中一个条件。不是所有的。您需要用elif替换第二个if及以后的代码。因此,如果一个条件为True,则跳过所有其他条件。

你需要做一个小小的改变:

if not result % 2 == 0 and userChoice in ['e', 'even']:
    ...
elif result % 2 == 0 and userChoice in ['e', 'even']:
    ...
elif not result % 2 == 0 and userChoice in ['o', 'odd']:
    ...
elif result % 2 == 0 and userChoice ['o', 'odd']:
    ...
 类似资料:
  • 我不知道发生了什么事情。即使条件是假的,if块中的代码仍然运行。我在netbeans IDE7.4中设计了我的界面,只需在Eclipse中复制粘贴设计。以下是我的代码 无论我在jinstrument jcombobox中选择什么,我都会得到“inside if”作为输出。我已经检查了print语句,但enterloop的值为0,它仍然进入if语句块。请帮助我解决这个问题

  • 目前在学校做信息技术评估,我的else声明遇到了问题。 代码: 不管怎样,为什么在if语句为真的情况下还要使用else语句呢?

  • 我有一个函数,它接收一个字符串参数,并在这个函数中检查这个参数是int还是float。尽管此条件的结果为false,但仍将执行以下行。 我使用PyCharm IDE和Python 3.8 这是代码。 输出:

  • 问题内容: 由于从未声明@A,因此sql server应该抛出错误,但是不会。这是为什么? 谢谢 问题答案: SQL Server没有块级变量作用域。 每批/存储的过程等 从MSDN(我的粗体) 变量的范围是可以引用该变量的Transact-SQL语句的范围。变量的范围从声明的点一直持续到声明它的 批处理 或 存储过程 的末尾。

  • 问题内容: 根据反if运动,最好的做法是在我们的代码中不要使用if。谁能告诉我是否有可能摆脱这段代码中的if?(切换也不是一种选择, 重点是删除条件逻辑,而不是用类似的语言构造替换ifs ) (语言:Java或C#) 问题答案: 利用策略模式。 用Java术语: 使用方法如下:

  • 我需要为密码字段设置一个错误,条件是“只允许2到22个字符和符号,\-” 但是我有点困在这里了。 这是我到目前为止得到的: 但问题是,如果我输入了_或-以外的符号,错误消息仍然不会显示。对于输入长度,错误消息显示为它应该显示的样子。