【问题标题】:Python: When I have a if statement and a print assigned to 3 integers, and I type one higher, it gives both that, and the correct printPython:当我有一个 if 语句和一个分配给 3 个整数的打印,并且我输入更高的一个时,它会同时给出正确的打印
【发布时间】:2013-04-19 03:52:27
【问题描述】:

对不起,如果我只是愚蠢,但我是 python 新手。当我执行此操作并输入一个大于 7 的数字时,它会给出 5、6 和 7 的答案,并打印 > 7。它告诉我,“我希望它越过边界变成真棒”,然后是“太棒了”。 PS我正在使用Python 3

print ('What is your name?')
LeName = input ()
print (' How are you, ' + LeName + '?')
print ('On a scale of one to ten, what would you rate your day so far?')
mood = int (input())
if mood <4:
    print ('That\'s horrible, I hope it gets better.')
if mood == '5' '6' or '7':
    print('Hope it crosses the border into awesome! :)')
if mood > 7:
    print('That\'s awesome!')
print ()

发帖后大约 1/2 小时,我考虑了一下,将 if mood == '5' '6' of '7' 更改为 if mood >= and mood

【问题讨论】:

  • @MattBall -- 令人惊讶的是,它是有效的,但是“这甚至不是有效的代码!”也是我的第一个直觉。
  • 附带说明,您可以使用不同类型的引号来避免所有那些丑陋的转义序列:例如print("That's awesome!")
  • 还可以考虑使用 elif 语句代替后续的 if。通常,它们是防止多次匹配的有用方法。

标签: python python-3.x


【解决方案1】:

此声明:

if mood == '5' '6' or '7':

被解析为:

if (mood == '56') or '7':

实际上只是if '7'if True,因为mood类型int,而'56' 的类型是str

发生的事情是 python 正在将自动字符串连接应用于'5' '6' 以将其转换为'56'。它不等于mood,因为moodintintstr 类型永远不会比较相等。所以,你有if False or '7'。但'7' 是一个类似真实的值,因此该块将始终执行。您可能想要的更像是:

if mood < 4:
   ...
elif 5 <= mood <= 7:
   ...
else:
   ...

我使用operator chaining 来做我认为你正在尝试的事情。

【讨论】:

  • 正确答案。但是添加如何正确执行此操作可能会有所帮助,例如if mood in ('5', '6', '7')...等。
  • @sberry -- 我明白了。最终这也失败了,因为情绪永远不会在那里(它是int)。无论如何,这件事最好通过运算符链接来完成......
  • 对,你大概是int。我想我应该读过 OP 的代码。我同意运算符链接,这就是我在之前的评论中包含et al 的原因。
【解决方案2】:

使用元组很容易:

if mood in (5, 6, 7):

【讨论】:

  • 在这种情况下,使用set 可能会更好:if mood in {5,6,7}: 但实际上,我认为操作符链接是最简洁的方法,正如我在回答中所展示的那样。
  • @mgilson,对于仅 3 个项目,元组可能比集合快 - 除非您正在预先构建集合。
  • @gnibbler -- 我之前已经为它们计时过一两次,我认为周转时间大约是 3 个元素。我再次计时,似乎是这样。 (如果元素是第一个元素,tuple 大部分时间获胜,否则set 获胜)。当然,在我的测试中,我没有使用 set literal。在这种情况下,python 可能会缓存元组文字而不是集合文字,这会在使用文字时为元组提供优势。
  • 但我想对于我们获得用户输入的问题,时间可能无论如何都无关紧要(我只是认为最好指出set 通常 更好的数据结构用于测试收容)
猜你喜欢
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
相关资源
最近更新 更多