我有一个Python程序,其中两个变量设置为该值'public'.在条件表达式中,我的比较var1 is var2失败了,但是如果我将其更改为var1 == var2它则返回True.
现在,如果我打开我的Python解释器并进行相同的"是"比较,它就会成功.
>>> s1 = 'public'
>>> s2 = 'public'
>>> s2 is s1
True
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
我正在使用pythons mock.patch,并希望更改每个调用的返回值.以下是警告:正在修补的函数没有输入,因此我无法根据输入更改返回值.
这是我的代码供参考.
def get_boolean_response():
response = io.prompt('y/n').lower()
while response not in ('y', 'n', 'yes', 'no'):
io.echo('Not a valid input. Try again'])
response = io.prompt('y/n').lower()
return response in ('y', 'yes')
Run Code Online (Sandbox Code Playgroud)
我的测试代码:
@mock.patch('io')
def test_get_boolean_response(self, mock_io):
#setup
mock_io.prompt.return_value = ['x','y']
result = operations.get_boolean_response()
#test
self.assertTrue(result)
self.assertEqual(mock_io.prompt.call_count, 2)
Run Code Online (Sandbox Code Playgroud)
io.prompt只是一个独立于平台(python 2和3)版本的"输入".所以最终我试图模拟用户输入.我已经尝试使用列表作为返回值,但这并不能解决问题.
你可以看到,如果返回值是无效的,我将在这里得到一个无限循环.所以我需要一种方法来最终改变返回值,以便我的测试实际完成.
(回答这个问题的另一种可能的方法是解释我如何在单元测试中模仿用户输入)
不是这个问题的重复,主要是因为我没有能力改变输入.
答案中关于这个问题的评论之一是相同的,但没有提供答案/评论.
我想测试两个或多个值是否在列表中具有成员资格,但我得到了意外的结果:
>>> 'a','b' in ['b', 'a', 'foo', 'bar']
('a', True)
Run Code Online (Sandbox Code Playgroud)
那么,Python可以在列表中一次测试多个值的成员资格吗?这个结果意味着什么?
我正在编写一个拒绝访问未授权用户的安全系统.
import sys
print("Hello. Please enter your name:")
name = sys.stdin.readline().strip()
if name == "Kevin" or "Jon" or "Inbar":
print("Access granted.")
else:
print("Access denied.")
Run Code Online (Sandbox Code Playgroud)
它按预期授予对授权用户的访问权限,但它也允许未经授权的用户访问!
Hello. Please enter your name:
Bob
Access granted.
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我明确表示,只有在与nameKevin,Jon或Inbar相同时才授予访问权限.我也尝试过相反的逻辑if "Kevin" or "Jon" or "Inbar" == name,但结果是一样的.
在Zed Shaw的Learn Python the Hard Way中的一个例子中,其中一个练习显示以下代码:
next = raw_input("> ")
if "0" in next or "1" in next:
how_much = int(next)
Run Code Online (Sandbox Code Playgroud)
我很难理解in本声明中的含义.我习惯使用if语句,例如在javascript中,语法类似于:
var = 5;
if (var > 3) {
//code to be executed
}
Run Code Online (Sandbox Code Playgroud)
这个if/ in语句(在python中)是否与if()javascript 相同?
找到答案是很棘手的,因为这in是一个很短的字符串来缩小搜索引擎的答案,我不知道它的操作的正确名称.
我知道and和or表达式存在于python中,但有任何and/or表达式吗?或者某种方式将它们组合起来以产生与and/or表达式相同的效果?
我的代码看起来像这样:
if input=="a":
if "a" or "á" or "à" or "ã" or "â" in someList:
someList.remove("a") or someList.remove("á") or someList.remove("à") or someList.remove("ã") or someList.remove("â")
Run Code Online (Sandbox Code Playgroud)
有了这个,我的意思是如果用户输入"a"并且先前定义的列表中包含任何类型的"a",我可以从给定列表中删除所有类型的"a"吗?
python告诉我有一个问题:
someList.remove("a") or someList.remove("á") or someList.remove("à") or someList.remove("ã") or someList.remove("â")
Run Code Online (Sandbox Code Playgroud)
他告诉我: ValueError: list.remove(x): x not in list
我想检查变量是否具有多个值之一.我很困惑为什么or在这种情况下不起作用.我正在按照给出该示例的教程if (a or b):,但是当我尝试这样做时,它只检查变量与第一个值.我的支票有什么问题?
name = raw_input('Please type in your name:')
if len(name) < 5:
print "Your name has fewer than 5 characters"
elif len(name) == 5:
print "Your name has exactly 5 characters"
if name == ("Jesse" or "jesse"):
print "Hey Jesse!"
else:
print "Your name has greater than 5 characters"
Run Code Online (Sandbox Code Playgroud) 我正在使用Python,我希望有一个包含许多变量的if语句.
如:
if A, B, C, and D >= 2:
print (A, B, C, and D)
Run Code Online (Sandbox Code Playgroud)
我意识到这不是正确的语法,这正是我要问的问题 - 这种类型的if语句的正确Python语法是什么?谢谢!
我有一个小代码问题,它适用于IDLE而不适用于Eclipse,我可以这样写吗:
if fields[9] != ('A' or 'D' or 'E' or 'N' or 'R'):
Run Code Online (Sandbox Code Playgroud)
代替这个:
if fields[9] != 'A' and fields[9] != 'D' and fields[9] != 'E' and fields[9] != 'N' and fields[9] != 'R':
Run Code Online (Sandbox Code Playgroud)
谢谢。
这是一个非常琐碎的问题,我无法找到答案。
这是问题所在。我有以下数组:
vals = [-5, 2]
Run Code Online (Sandbox Code Playgroud)
我想检查是否val[0]或val[1]大于0。如果任何一个是真的,那么我应该输出为True。
我立即想到使用。(vals[1] or vals[0]) > 0)但我发现那(5 | -2) > 0是False,哪里(5 or -2) > 0是True
任何澄清将不胜感激。
python ×10
boolean ×1
comparison ×1
conditional ×1
equality ×1
identity ×1
if-statement ×1
logic ×1
mocking ×1
python-mock ×1
string ×1
unit-testing ×1