Python:带有大写/非大写字母的键盘提示

时间:2016-12-08 11:03:24

标签: python raw-input

在此代码中:

    if raw_input("\n Enter 'y' or 'Y': ")==("y" or "Y"):
       print("\n Success!")

没有正确地采用“或”,相反,如果输入非资本“y”,则满足条件。如果我输入首都'Y',我就不会获得成功!

这里有什么问题?

4 个答案:

答案 0 :(得分:1)

试试这个 if raw_input("\n Enter 'y' or 'Y': ").lower() == "y":

答案 1 :(得分:1)

尝试制作值列表并使用in关键字。像这样的东西会起作用,

if raw_input("\n Enter 'y' or 'Y': ") in ('y', 'Y'):
   print("\n Success!")

in关键字根据字符串元组测试字符串,并在正确匹配时返回True

由于此处只有一个字符,因此您可以构建字符串"yY"。像这样的东西会起作用,

if raw_input("\n Enter 'y' or 'Y': ") in "yY":
   print("\n Success!")

这里字符串的每个字符都像上面元组的一个元素。

代码中的错误: 您使用了("y" or "Y")。这在Python中不起作用。这只会返回"y",因为"y""Y"都被视为True值。但是,如果您键入(0 or "Y"),则会"Y",因为0被视为False值。

答案 2 :(得分:0)

你的if语句的右边是错误的,我认为你需要更好地理解or运算符在字符串之间的行为。

请记住,or的返回值是最后评估的值,并且Python将空字符串计算为布尔值False而将非空字符串计算为布尔值True

在你的情况下,解释器读取("y" or "Y"),然后它会评估" y"的布尔值。这是True,因为它是非空字符串。因此,or语句True的布尔值和语句的返回值变为" y",最后一个评估值。

这就是我写这段代码的方法。我会在raw_input中保留_input的返回值,这将使我和其他人更容易阅读和理解if语句:

_input = raw_input("\n Enter 'y' or 'Y': ")

if input in ["y", "Y"]:
    print("\n Success!")

答案 3 :(得分:0)

  

这里有什么问题?

在许多编程语言中,OR是一个布尔运算符。您将它应用于TRUE或FALSE值。如果至少有一个操作数为TRUE,则操作的计算结果为TRUE:

TRUE OR TRUE == TRUE
TRUE OR FALSE == TRUE
FALSE OR TRUE == TRUE
FALSE OR FALSE == FALSE

In Python, you can apply or on non-boolean operands

x or y
如果x投放到x的{​​{1}}为boolean,则

返回True;否则返回y。对于布尔操作数,这会导致与上面相同的结果,但对于非布尔操作数,这会产生有趣的效果:

  • [] or {}{}(因为在投放到时,空列表为False boolean
  • [1] or {}[1](因为非空列表在投放到True时为boolean
  • [1] or 1/0也是[1](当左边的操作数为True时,右边的操作数甚至不会被评估,因此我们不会点击ZeroDivisionError。被称为(left-to-right) short-circuit evaluation。)

因此,除了自然语言之外, Python or不能被解释为分隔替代值。(只有替代条件/布尔表达式。)

如何使代码按预期运行,有几种可能性:

天真的方法:

answer = raw_input("\n Enter 'y' or 'Y': ")
if answer == "y" or answer == "Y":
   print("\n Success!")

规范化输入:

if raw_input("\n Enter 'y' or 'Y': ").lower() == 'y':
   print("\n Success!")

与成员资格运算符in的替代值集合进行比较:

if raw_input("\n Enter 'y' or 'Y': ") in {'y', 'Y'}:
   print("\n Success!")