相关疑难解决方法(0)

为什么使用'=='或'is'比较字符串有时会产生不同的结果?

我有一个Python程序,其中两个变量设置为该值'public'.在条件表达式中,我的比较var1 is var2失败了,但是如果我将其更改为var1 == var2它则返回True.

现在,如果我打开我的Python解释器并进行相同的"是"比较,它就会成功.

>>> s1 = 'public'
>>> s2 = 'public'
>>> s2 is s1
True
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

python string comparison identity equality

1076
推荐指数
13
解决办法
148万
查看次数

Python模拟多个返回值

我正在使用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)版本的"输入".所以最终我试图模拟用户输入.我已经尝试使用列表作为返回值,但这并不能解决问题.

你可以看到,如果返回值是无效的,我将在这里得到一个无限循环.所以我需要一种方法来最终改变返回值,以便我的测试实际完成.

(回答这个问题的另一种可能的方法是解释我如何在单元测试中模仿用户输入)


不是这个问题的重复,主要是因为我没有能力改变输入.

答案中关于这个问题的评论之一是相同的,但没有提供答案/评论.

python unit-testing mocking python-mock

132
推荐指数
2
解决办法
8万
查看次数

Python可以测试列表中多个值的成员资格吗?

我想测试两个或多个值是否在列表中具有成员资格,但我得到了意外的结果:

>>> 'a','b' in ['b', 'a', 'foo', 'bar']
('a', True)
Run Code Online (Sandbox Code Playgroud)

那么,Python可以在列表中一次测试多个值的成员资格吗?这个结果意味着什么?

python

97
推荐指数
4
解决办法
8万
查看次数

为什么`a == b或c或d`总是评估为True?

我正在编写一个拒绝访问未授权用户的安全系统.

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,但结果是一样的.

python boolean boolean-expression

96
推荐指数
3
解决办法
2万
查看次数

if语句中"in"的用法和含义?

在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是一个很短的字符串来缩小搜索引擎的答案,我不知道它的操作的正确名称.

python

47
推荐指数
3
解决办法
17万
查看次数

和/或在Python中?

我知道andor表达式存在于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

python logic

38
推荐指数
4
解决办法
39万
查看次数

为什么用`OR`检查多个值的变量只检查第一个值?

我想检查变量是否具有多个值之一.我很困惑为什么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

31
推荐指数
4
解决办法
14万
查看次数

将多个变量与Python中"if"中的相同值进行比较?

我正在使用Python,我希望有一个包含许多变量的if语句.

如:

  if A, B, C, and D >= 2:
         print (A, B, C, and D)
Run Code Online (Sandbox Code Playgroud)

我意识到这不是正确的语法,这正是我要问的问题 - 这种类型的if语句的正确Python语法是什么?谢谢!

python if-statement

24
推荐指数
3
解决办法
4万
查看次数

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)

谢谢。

python multiple-conditions conditional-statements

18
推荐指数
2
解决办法
7万
查看次数

不明白为什么(5 | -2)&gt; 0为False(5或-2)&gt; 0为True

这是一个非常琐碎的问题,我无法找到答案。

这是问题所在。我有以下数组:

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 conditional

18
推荐指数
3
解决办法
2258
查看次数