鱼C论坛

 找回密码
 立即注册
查看: 2287|回复: 6

[已解决]如何增加只能输入可以或不可以的限制

[复制链接]
发表于 2023-4-11 07:51:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

最佳答案
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 语句中检查用户输入的答案。

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

这样,你就可以实现只能输入 "可以" 或 "不可以" 的限制。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

这里是一个修改后的示例:
while True:
    while True:
        answer = input("主人,我可以退出循环了吗? (请输入'可以'或'不可以')")
        if answer in {"可以", "不可以"}:
            break
        else:
            print("请输入'可以'或'不可以'")

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

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

这样,你就可以实现只能输入 "可以" 或 "不可以" 的限制。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢,刚才自几想到这问题后也尝试了一下,但连break都不好用了.再帮我看看呗.
answer = "可以" or "不可以"
while True:
    answer = input("主人,我可以退出循环了吗?")
    if answer == "可以!":
        break
    print("哎,好累~~~")
   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

还有内部我要是想嵌套for的死循环呢?又该如何写代码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 语句中检查用户输入的答案。

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

这样,你就可以实现只能输入 "可以" 或 "不可以" 的限制。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

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

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

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

请注意,使用 itertools.cycle() 创建死循环并不是唯一方法,也可以使用内部的 while 循环,如我之前给出的示例。然而,这里提供了一个使用 for 循环的备选方案。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-11 20:02:22 | 显示全部楼层
2个问题,1.根据代码当输入可以时确实会执行break跳出内部死循环,但实际并没有
            2.外层的break缩进好像有问题,它是else下的break,所以外层循环无法退出,但我也尝试了它于外层else缩进相同,结果报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-29 09:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表