鱼C论坛

 找回密码
 立即注册
查看: 46|回复: 4

救救我急急急

[复制链接]
发表于 昨天 22:32 | 显示全部楼层 |阅读模式

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

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

x
while True:
    user_answer = input('国家标准编号为GBT14689:2008,在该号中GBT表示国家标准,14689表示——,2008表示——')
    correct_answer = '编号时间'
    if user_answer == correct_answer:
        print('yes')
        break
    while True:
        user_answer = input('制图国家标准规定,图纸有5种,最大的是——,最小的是——,A3是A4的多少倍,标题栏一般放在图纸的——')
        correct_answer = 'A0A42右下角'
        if user_answer == correct_answer:
            print('yes')
            break
        while True:
            user_answer = input('图样中,机件的可见轮廓线用——画出,不可见轮廉线用——画出,尺寸线和尺寸界限用——画出,对称中心线和轴线用——画出')
            correct_answer = '粗实线细虚线细实线细点画线'
            if user_answer == correct_answer:
                print('yes')
                break
            while True:
                user_answer = input('正投影法中的三个基本特性是真实性、_和_')
                correct_answer = '积聚性类似性'
                if user_answer == correct_answer:
                    print('yes yes')
                    break
                while True:
                    user_answer = input('正投影法中,三视图的“三等”规律是哪三个')
                    correct_answer = '长对正高平齐宽相等'
                    if user_answer == correct_answer:
                        print('yes yes')
                        break
                    while True:
                        user_answer = input('平面图形中的线段可分为———,——,——三种')
                        correct_answer = '已知线段连接线段中间线段'
                        if user_answer == correct_answer:
                            print('yes yes')
                            break
                        while True:
                            user_answer = input('园柱被平面截切后产生的截交线形状主要有圆、矩形和___三种。')
                            correct_answer = '椭圆'
                            if user_answer == correct_answer:
                                print('yes yes')
                                break
                            else:
                                print('错了,答案是椭圆')
                        else:
                            print('错了,答案为:已知线段连接线段中间线段')
                    else:
                        print('错了,答案是:长对正高平齐宽相等')
                else:
                    print("错了,答案是:积聚性类似性")
            else:
                print('错了,答案为:粗实线细虚线细实线细点画线')
            print('good')
        else:
            print('错了答案是A0A42右下角')
    else:
        print('错了正确答案为 编号时间')

print('good')

为什么前6个问题错误之后没法循环,他直接跳过进入下一个问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 昨天 22:46 | 显示全部楼层
您的代码中存在几个问题,主要是关于嵌套循环的退出机制和逻辑控制。在您的代码中,每个问题都是一个嵌套的 while True 循环,而每个内层循环只在用户给出正确答案时才会通过 break 语句退出。但是,如果用户在某个问题中给出了错误的答案,程序会直接跳到下一个问题的提示,而不是重新提示当前问题。
这是因为每个内层循环(除了最内层的那个)都没有处理错误答案的逻辑,它们只是简单地继续执行到下一个 while True 循环。此外,您的代码结构也使得一旦进入内层循环,除非给出正确答案,否则无法返回到外层循环重新提示。
为了修复这个问题,您需要在每个问题的循环中添加处理错误答案的逻辑,通常是重新提示用户输入,直到他们给出正确答案。这可以通过在 else 子句中添加一个 continue 语句(对于最内层的循环来说不适用,因为 continue 会跳过当前循环的剩余部分并立即开始下一次迭代,而最内层循环在错误答案后应该重新提示)或者使用 input 和条件检查在一个循环中反复进行,直到正确为止。
下面是一个简化和修改后的代码示例,它展示了如何在每个问题中处理错误答案,并允许用户重新尝试直到给出正确答案:
python
复制代码
def ask_question(question, correct_answer):
    while True:
        user_answer = input(question)
        if user_answer == correct_answer:
            print('yes')
            return True  # 成功回答正确,退出函数
        else:
            print('错了,正确答案是:', correct_answer)
    return False  # 实际上这个返回永远不会发生,因为上面的while是True

# 开始提问
if ask_question('国家标准编号为GBT14689:2008,在该号中GBT表示国家标准,14689表示——,2008表示——', '编号时间'):
    if ask_question('制图国家标准规定,图纸有5种,最大的是——,最小的是——,A3是A4的多少倍,标题栏一般放在图纸的——', 'A0 A4 2 右下角'):
        if ask_question('图样中,机件的可见轮廓线用——画出,不可见轮廉线用——画出,尺寸线和尺寸界限用——画出,对称中心线和轴线用——画出', '粗实线 细虚线 细实线 细点画线'):
            if ask_question('正投影法中的三个基本特性是真实性、_和_', '积聚性 类似性'):
                if ask_question('正投影法中,三视图的“三等”规律是哪三个', '长对正 高平齐 宽相等'):
                    if ask_question('平面图形中的线段可分为———,——,——三种', '已知线段 连接线段 中间线段'):
                        if ask_question('园柱被平面截切后产生的截交线形状主要有圆、矩形和___三种。', '椭圆'):
                            print('yes yes')
                            break  # 这里其实不需要break,因为最外层的循环已经结束
print('good')
注意,这个代码示例中,我使用了函数 ask_question 来封装提问和检查答案的逻辑,使得代码更加清晰和易于管理。同时,我移除了不必要的嵌套循环和 else 子句中的 while True,因为每个问题都已经在自己的循环中处理了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 23:13 | 显示全部楼层
你的代码中存在一些逻辑问题,特别是在嵌套的 while 循环中。问题主要是由于 while True 的嵌套结构和 else 的位置。

以下是你的代码中主要问题的解释和解决方法:

1. 嵌套 while True 的逻辑问题

当用户输入的答案错误时,你在 else 分支中打印提示,但并没有控制程序重新回到当前问题的循环,而是直接跳出了当前的 while 循环,进入了外层的下一个问题。

这是因为:

  • 在嵌套的 while True 中,内层的 break 只会退出当前最近的 while 循环,而不会回到外层的循环逻辑。
  • 你的 else 语句只执行一次,然后代码直接继续运行到下一个问题。


2. while True 的滥用

你不需要为每个问题都创建一个 while True 循环,逻辑会变得非常复杂和难以维护。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 23:13 | 显示全部楼层
修复思路

为了让每个问题在用户答错时能够重复询问,同时避免多个嵌套的 while True 导致的混乱,可以采取以下方法:

  • 把所有的问题和答案存储在一个列表或字典中。
  • 使用一个统一的循环来遍历所有问题。
  • 对用户答错的情况,继续当前问题的循环,直到答对。

改进代码如下:
questions = [
    {
        "question": "国家标准编号为GBT14689:2008,在该号中GBT表示国家标准,14689表示——,2008表示——",
        "answer": "编号时间"
    },
    {
        "question": "制图国家标准规定,图纸有5种,最大的是——,最小的是——,A3是A4的多少倍,标题栏一般放在图纸的——",
        "answer": "A0A42右下角"
    },
    {
        "question": "图样中,机件的可见轮廓线用——画出,不可见轮廓线用——画出,尺寸线和尺寸界限用——画出,对称中心线和轴线用——画出",
        "answer": "粗实线细虚线细实线细点画线"
    },
    {
        "question": "正投影法中的三个基本特性是真实性、_和_",
        "answer": "积聚性类似性"
    },
    {
        "question": "正投影法中,三视图的“三等”规律是哪三个",
        "answer": "长对正高平齐宽相等"
    },
    {
        "question": "平面图形中的线段可分为———,——,——三种",
        "answer": "已知线段连接线段中间线段"
    },
    {
        "question": "园柱被平面截切后产生的截交线形状主要有圆、矩形和___三种。",
        "answer": "椭圆"
    }
]

# 遍历每个问题
for item in questions:
    while True:
        user_answer = input(item["question"] + "\n")
        if user_answer == item["answer"]:
            print("yes")
            break  # 跳到下一个问题
        else:
            print(f"错了,正确答案是:{item['answer']}")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 10:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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