使用 if/else 制作初学者系列的语义错误

发布于 2024-10-18 02:55:03 字数 276 浏览 2 评论 0原文

我的程序应该输出: Jack、Kack、Lack、Mack、Nack、Ouack、Pack 和 Quack。

suffix="ack"
prefix="JKLMNOPQ"

for i in prefix:
    if prefix=="Q" or "O":
        suffix="uack"
    else:
        suffix="ack"
    print i + suffix

但它却输出 尤克、库克、卢克、穆克·努克 瓦克 普阿克 嘎嘎

My program is supposed to output:
Jack, Kack, Lack, Mack, Nack, Ouack, Pack, and Quack.

suffix="ack"
prefix="JKLMNOPQ"

for i in prefix:
    if prefix=="Q" or "O":
        suffix="uack"
    else:
        suffix="ack"
    print i + suffix

But instead it outputs
Juack, Kuack, Luack, Muack Nuack
Ouack
Puack
Quack

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

神仙妹妹 2024-10-25 02:55:03
  1. 您正在将前缀(包含多个字母的字符串)(而不是当前字符i)与单个字母进行比较。他们永远不平等。我建议使用更好的名称(这会使错误变得明显):prefixes = "JK..."for prefix in prefixes:
  2. 您可以通过在逻辑或中使用 "O" 将其强制转换为布尔值,而不使用任何比较运算符。如果 prefix=="Q" 为 false,则会将 "O" 转换为布尔值 - 并且非空字符串被视为 true。使用 prefix == "Q" 或 prefix == "O"prefix in ("Q", "O") (这样可以更好地扩展更多选择)。你不会相信这个错误有多常见......是的,它恰好使用了一些从英语借用的关键字,但它不是英语;
  1. You are comparing prefix (a string containing several letters) - instead of the current character, i - to single letters. They are never equal. I'd suggest better names (which would make the error obvious): prefixes = "JK..." and for prefix in prefixes:.
  2. You are coercing "O" to a boolean by using it, without any comparision operator, in a logical or. If prefix=="Q" is false, it converts "O" to a boolean - and non-empty strings are considered true. Either use prefix == "Q" or prefix == "O" or prefix in ("Q", "O") (which scales better for more alternatives). You wouldn't believe how common this error is... yeah, it happens to use a few keywords borrowed from english, but it's not english </rant>
未央 2024-10-25 02:55:03

prefix == "Q" 或 "O" 是完全错误的。

  1. 前缀将始终为 "JKLMNOPQ",因此永远不会等于 "Q"。我认为您的意思是检查 i 而不是 prefix
  2. == 绑定比 or 更近,因此它将评估到(前缀==“Q”)或“O”“O” 始终为真,因此后缀始终为“uack”`

如果您修复了这些问题,它应该可以工作。

我认为应该是if i=="Q" or i=="O"

prefix == "Q" or "O" is completely wrong.

  1. prefix will always be "JKLMNOPQ" and so will never be equal to "Q". I think you meant to check for i rather than prefix
  2. The == binds closer than or so it will evaluate to (prefix == "Q") or "O". "O" is always true so suffix will alwasy be "uack"`

If you fix these, it should work.

I think it should be if i=="Q" or i=="O".

离不开的别离 2024-10-25 02:55:03

您应该在循环中与 i 而不是 prefix 进行比较。即使您自 'O 以来与 i 进行比较,if prefix == 'Q' or 'O' 也始终为 True ' 不是 False。这应该是如果 i == 'Q' 或 i == 'O'

You should be comparing against i instead of prefix in the loop. The if prefix == 'Q' or 'O' would always be True even if you were comparing against i since 'O' is not False. This should be if i == 'Q' or i == 'O'.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文