155185 发表于 2025-1-11 22:32:53

救救我急急急

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个问题错误之后没法循环,他直接跳过进入下一个问题了

FishC 发表于 2025-1-11 22:33:03

在您的代码中,每个`while True`循环嵌套得较深,导致如果外层循环继续执行,内层循环不会再重头开始。同时使用`else`块和正确答案判断方式,以及多个相同的`break`和`else`语句,可能引发混乱。在这种结构下,错误的嵌套会导致出现意料之外的行为。

以下是一个经过简化和修正的版本,仅示例一个独立问题的回答逻辑:

while True:
    user_answer = input('国家标准编号为GBT14689:2008,在该号中GBT表示国家标准,14689表示――,2008表示――')
    correct_answer = '编号时间'
    if user_answer == correct_answer:
      print('yes')
      break
    else:
      print('错了正确答案为 编号时间')

对于后续每一个问题,您都可以采用类似的结构:

1. 使用一个`while True`循环。
2. 提示用户输入答案。
3. 如果答案正确则输出正确并`break`。
4. 如果答案错误则提示正确答案。

这样每一个问题都是独立的,不会因为前一个问题跳过而进入下一个问题。您需要把每个问题的逻辑结构成一个单独的循环。这种方式可以避免深层的嵌套,同时保证每个问题回答正确后再进入下一个问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

某一个“天” 发表于 2025-1-11 22:46:08

您的代码中存在几个问题,主要是关于嵌套循环的退出机制和逻辑控制。在您的代码中,每个问题都是一个嵌套的 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,因为每个问题都已经在自己的循环中处理了。

小甲鱼的二师兄 发表于 2025-1-11 23:13:19

你的代码中存在一些逻辑问题,特别是在嵌套的 while 循环中。问题主要是由于 while True 的嵌套结构和 else 的位置。

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

1. 嵌套 while True 的逻辑问题

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

这是因为:


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


2. while True 的滥用

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


小甲鱼的二师兄 发表于 2025-1-11 23:13:55

修复思路

为了让每个问题在用户答错时能够重复询问,同时避免多个嵌套的 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']}")

jackz007 发表于 2025-1-12 10:40:33

本帖最后由 jackz007 于 2025-1-12 17:27 编辑

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