【问题标题】:Why is my while condition only updating once?为什么我的 while 条件只更新一次?
【发布时间】:2022-08-04 08:12:42
【问题描述】:

我的程序按照我希望的方式工作,除非它到达终点并输出分数。我希望它输出正确答案的分数(假设它满分 10,因为它应该提示 10 个问题)。但是,它从不考虑在推断分数时提出的第一个问题。例如,如果我答对了所有十道题,我只会得到 9 分。当我答错第一道题时,也会有问题。如果我的第一个问题不正确而所有其他问题都正确,我的分数为零。也许这与我的 while num_of_questions <= 8 循环运行我的程序十次这一事实有关,而我认为如果我有一个十代替八次,它会运行十次?

import random

def main():
    ten_questions()

def get_level():
    while True:
        try:
            level_input = int(input(\"Level: \"))
            if level_input in [1,2,3]:
                return level_input
        except:
            pass


def integer_generator(level):
    if level == 1:
        x = random.randint(0,9)
        y = random.randint(0,9)
    elif level == 2:
        x = random.randint(10, 99)
        y = random.randint(10, 99)
    else:
        x = random.randint(100, 999)
        y = random.randint(100, 999)
    return x, y



def question_generator(x, y):
    real_answer = x + y
    wrong_counter = 0
    while True:
        try:
            answer_given =  input(str(x) + \" + \" + str(y) + \" = \")
            if int(answer_given) == real_answer and  wrong_counter == 0:
                    return True
            elif int(answer_given) == real_answer and wrong_counter != 0:
                break
            else:
                while wrong_counter < 2:
                    print(\"EEE\")
                    wrong_counter +=1
                    break
                else:
                    print(str(x) + \" + \" + str(y) + \" = \" + str(real_answer))
                    print(\"False, that was last attempt\")
                    break

        except:
            print(\"EEE\")
            pass


def ten_questions():
    num_of_questions = 0
    total_correct_answers = 0
    my_level = get_level()
    correct_answers = question_generator(*integer_generator(my_level))
    while num_of_questions <= 8:
        question_generator(*integer_generator(my_level))
        num_of_questions +=1
        if correct_answers == True:
            total_correct_answers +=1
    print(\"Score: \" + str(total_correct_answers))




if __name__ == \"__main__\":
    main()
  • 循环之前correct_answers = question_generator(...)。在循环中question_generator(...) 您忽略了该函数的返回。

标签: python while-loop return break


【解决方案1】:

我还没有阅读整个代码,但在你的函数中十个问题()你先来num_of_questions 为 0 并在 num_of_questions 为 9 时退出 while 循环.

所以您的 while 循环始终运行 9 次而不是 10 次.

【讨论】:

    猜你喜欢
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2014-01-17
    • 2015-05-20
    相关资源
    最近更新 更多