需要帮助识别代码逻辑中的缺陷

问题描述 投票:-1回答:2

我刚刚开始学习Python并尝试编写一个简单的项目,但是由于某种原因,我无法使其正常工作。

我的代码在下面:

def bones_search(bone_guess, foot_bones = ["calcaneus", "talus", "cuboid", "navicular", "lateral cuneiform", "intermediate cuneiform", "medial cuneiform"]):

    for bones in foot_bones:
        if bones.lower() == bone_guess.lower():
            foot_bones.remove(bone_guess.lower())
            print("Correct!")
            bone_guess = input("Guess 2 - Enter a foot bone: ")
            for bone in foot_bones:
                if bones.lower() == bone_guess.lower():
                    print("Correct!\nNumber of bone guess correct = 2")
                else:
                    pass
            return print("Incorrect!")
        else:
            pass
        print("Incorrect!")
        bone_guess = input("Guess 2 - Enter a foot bone: ")
        for bone in foot_bones:
                if bones.lower() == bone_guess.lower():
                    print("Correct!\nNumber of bone guess correct = 1")
                else:
                    pass
        print("Incorrect!\nNumber of bone guess correct = 0")

bones_search(input("Guess 1 - Enter a foot bone: "))

无论如何,只要我输入了正确的值之一(例如距骨),它仍然会显示“ Incorrect!”。

有人可以帮忙找出逻辑上的缺陷吗?

python
2个回答
1
投票

打印错误,因为您在第一个if-else块之后打印了“错误”。

您正在一个接一个地循环所有脚部骨骼。因此,如果您的输入不是跟骨,则如果] >>则不会输入第一个

if bones.lower() == bone_guess.lower():

没有其他内容,因此它自动移至打印incorrect,第二个for循环开始工作。最终,您的代码可以正常工作,只是有一个逻辑错误。

Guess 1 - Enter a foot bone: talus
Incorrect!
Guess 2 - Enter a foot bone: talus
Incorrect!
Number of bone guess correct = 0
Correct!
Guess 2 - Enter a foot bone: 

也许不要再询问user_input(要求用户再次猜测),而是让第一个循环结束。


0
投票

实际上,您需要递归地调用该函数。因为,骨骼名称太多,否则您将需要一遍又一遍地编写for循环,并且该程序的调试非常混乱!这是一个递归解决方案(假设玩家需要猜测所有骨骼):

© www.soinside.com 2019 - 2024. All rights reserved.