我对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 :(')
因此,userNumber
和randomNumber
变量之前就已经设置好了。在这个游戏中,发生的是:用户选择偶数或奇数,并输入一个从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 :(')
有什么想法吗?抱歉发帖太长,如有重复,请见谅!我只是在网上没有找到任何答案:/非常感谢!
>>> 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个字符和符号,\-” 但是我有点困在这里了。 这是我到目前为止得到的: 但问题是,如果我输入了_或-以外的符号,错误消息仍然不会显示。对于输入长度,错误消息显示为它应该显示的样子。