宇少1100 发表于 2023-4-11 07:51:53

如何增加只能输入可以或不可以的限制

while True:
    answer = input("主人,我可以退出循环了吗?")
    if answer == "可以!":
      break
    print("哎,好累~~~")

isdkz 发表于 2023-4-11 07:59:13

在你的代码中,只需添加一些条件来限制用户输入 "可以" 或 "不可以"。你可以使用 while 循环来实现这一点。

这里是一个修改后的示例:

while True:
    while True:
      answer = input("主人,我可以退出循环了吗? (请输入'可以'或'不可以')")
      if answer in {"可以", "不可以"}:
            break
      else:
            print("请输入'可以'或'不可以'")

    if answer == "可以":
      break
    print("哎,好累~~~")

在这个修改后的示例中,我们添加了一个内部 while 循环,它会不断询问用户输入,直到输入的答案为 "可以" 或 "不可以"。

这样,你就可以实现只能输入 "可以" 或 "不可以" 的限制。

宇少1100 发表于 2023-4-11 08:12:22

isdkz 发表于 2023-4-11 07:59
在你的代码中,只需添加一些条件来限制用户输入 "可以" 或 "不可以"。你可以使用 while 循环来实现这一点。 ...

感谢,刚才自几想到这问题后也尝试了一下,但连break都不好用了.再帮我看看呗.
answer = "可以" or "不可以"
while True:
    answer = input("主人,我可以退出循环了吗?")
    if answer == "可以!":
      break
    print("哎,好累~~~")
   

宇少1100 发表于 2023-4-11 08:16:19

isdkz 发表于 2023-4-11 07:59
在你的代码中,只需添加一些条件来限制用户输入 "可以" 或 "不可以"。你可以使用 while 循环来实现这一点。 ...

还有内部我要是想嵌套for的死循环呢?又该如何写代码?

isdkz 发表于 2023-4-11 08:18:43

宇少1100 发表于 2023-4-11 08:12
感谢,刚才自几想到这问题后也尝试了一下,但连break都不好用了.再帮我看看呗.

在你的代码中,问题出在这一行:

answer = "可以" or "不可以"

这里的问题是,你使用了 or 运算符来尝试为 answer 变量赋值。然而,这种用法是错误的。

在 Python 中,or 运算符用于将两个布尔表达式连接起来。它会计算第一个表达式的布尔值,如果为 True,则返回第一个表达式的结果;如果为 False,则返回第二个表达式的结果。

在这个例子中,"可以" 和 "不可以" 都是非空字符串,它们在布尔上下文中都被视为 True。

因此,"可以" or "不可以" 这个表达式会计算为 "可以",因为第一个表达式的布尔值为 True。

所以,实际上你的代码等同于:

answer = "可以"

对你的代码修改如下:
while True:
    answer = input("主人,我可以退出循环了吗? (请输入'可以'或'不可以')")
   
    if answer == "可以":
      break
    elif answer == "不可以":
      print("哎,好累~~~")
    else:
      print("请输入'可以'或'不可以'")


在这个修改后的示例中,移除了 answer = "可以" or "不可以" 这一行,而是在 if 语句中检查用户输入的答案。

如果答案是 "可以",则跳出循环;如果答案是 "不可以",则输出 "哎,好累~~~";否则,提示用户输入 "可以" 或 "不可以"。

这样,你就可以实现只能输入 "可以" 或 "不可以" 的限制。

isdkz 发表于 2023-4-11 08:22:04

宇少1100 发表于 2023-4-11 08:16
还有内部我要是想嵌套for的死循环呢?又该如何写代码?

如果你想在内部嵌套一个 for 循环的死循环,可以使用 itertools 模块中的 itertools.cycle() 函数,它可以创建一个无限迭代器。

你可以将其与 for 循环结合使用,以实现内部死循环。以下是一个示例:

import itertools

while True:
    for _ in itertools.cycle():# 使用 itertools.cycle() 创建一个死循环
      answer = input("主人,我可以退出循环了吗? (请输入'可以'或'不可以')")
      
      if answer == "可以":
            break
      elif answer == "不可以":
            print("哎,好累~~~")
      else:
            print("请输入'可以'或'不可以'")
    else:
      # 当 for 循环内部的 break 语句被执行时,else 语句将不会被执行
      # 这意味着我们可以使用另一个 break 语句来跳出外部的 while 循环
      break

在这个示例中,我们使用 itertools.cycle() 创建一个无限迭代器。

这会导致 for 循环无限次地迭代,从而创建一个死循环。当用户输入 "可以" 时,内部循环的 break 语句会被执行,跳出 for 循环。

然后,外部 while 循环的 else 语句将不会被执行,因此另一个 break 语句会被执行,从而跳出外部 while 循环。

请注意,使用 itertools.cycle() 创建死循环并不是唯一方法,也可以使用内部的 while 循环,如我之前给出的示例。然而,这里提供了一个使用 for 循环的备选方案。

宇少1100 发表于 2023-4-11 20:02:22

2个问题,1.根据代码当输入可以时确实会执行break跳出内部死循环,但实际并没有
            2.外层的break缩进好像有问题,它是else下的break,所以外层循环无法退出,但我也尝试了它于外层else缩进相同,结果报错
页: [1]
查看完整版本: 如何增加只能输入可以或不可以的限制