Python 如何更改此代码以跳过已选择的数字?

Python 如何更改此代码以跳过已选择的数字?,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,这是一个游戏。猜猜一个代码的4位数字,游戏在正确的位置输出正确数字的数量,在错误的位置输出正确数字的数量 假设代码是4405,猜测是4444 它应该输出2,0,但不是输出2,2 从逻辑上讲,我希望程序不会将代码集中的数字与true/匹配正确的数字进行比较。如何更改此代码以实现此目的 假设arr是由4个FALSE组成的数组,guess1,2,3,4是猜测的4位数字 您的代码比需要的复杂得多。您可以使用for循环来实现所需的功能 guess = ['1', '2', '3', '4'] answer

这是一个游戏。猜猜一个代码的4位数字,游戏在正确的位置输出正确数字的数量,在错误的位置输出正确数字的数量

假设代码是4405,猜测是4444 它应该输出2,0,但不是输出2,2 从逻辑上讲,我希望程序不会将代码集中的数字与true/匹配正确的数字进行比较。如何更改此代码以实现此目的

假设arr是由4个FALSE组成的数组,guess1,2,3,4是猜测的4位数字


您的代码比需要的复杂得多。您可以使用
for
循环来实现所需的功能

guess = ['1', '2', '3', '4']
answer = 2245

answer = str(answer)
corr_place, wrong_place = 0, 0
for i, g in enumerate(guess):
    if g in answer:
        if g == answer[i]:
            corr_place += 1
        else:
            wrong_place += 1

print("Correct position:", corr_place)
print("Wrong position:", wrong_place)

但更具python风格的解决方案是使用列表理解:

guess = ['1', '2', '3', '4']
answer = 2245

answer = str(answer)
results = [g == d for g, d in zip(guess, answer) if g in answer]
corr = sum(results)

print("Correct position:", corr)
print("Wrong position:", len(results) - corr)

您的代码比需要的复杂得多。您可以使用
for
循环来实现所需的功能

guess = ['1', '2', '3', '4']
answer = 2245

answer = str(answer)
corr_place, wrong_place = 0, 0
for i, g in enumerate(guess):
    if g in answer:
        if g == answer[i]:
            corr_place += 1
        else:
            wrong_place += 1

print("Correct position:", corr_place)
print("Wrong position:", wrong_place)

但更具python风格的解决方案是使用列表理解:

guess = ['1', '2', '3', '4']
answer = 2245

answer = str(answer)
results = [g == d for g, d in zip(guess, answer) if g in answer]
corr = sum(results)

print("Correct position:", corr)
print("Wrong position:", len(results) - corr)
来自随机导入选择
从字符串导入数字
从textwrap导入dedent
def获取四位数字(msg):
尽管如此:
尝试:
num=int(输入(msg))
除值错误外:
通过
其他:
如果1000<代码>来自随机导入选择
从字符串导入数字
从textwrap导入dedent
def获取四位数字(msg):
尽管如此:
尝试:
num=int(输入(msg))
除值错误外:
通过
其他:


如果你尝试搜索“破译游戏”,你会发现关于实现这个的其他问题(这是一个常见的练习)。我敢打赌他们中的一些人也有同样的问题。哇。。。。。这是很多代码。你需要实现循环。安东,你能帮我这么做吗?@Aura,如果以前没有人这么做的话。Barmar我有,他们没有完成和我一样的任务。他们是一个简单的比较和输出的“XXXX”矿井是唯一的逻辑和位置的数字@安东一世对此已经有一段时间了,在操作代码时询问了几个平台。这些都不起作用。如果您知道我如何使用迭代以及它的形式,那将非常有帮助!感谢你搜索“破译游戏”,你会发现关于实现这个的其他问题(这是一个常见的练习)。我敢打赌他们中的一些人也有同样的问题。哇。。。。。这是很多代码。你需要实现循环。安东,你能帮我这么做吗?@Aura,如果以前没有人这么做的话。Barmar我有,他们没有完成和我一样的任务。他们是一个简单的比较和输出的“XXXX”矿井是唯一的逻辑和位置的数字@安东一世对此已经有一段时间了,在操作代码时询问了几个平台。这些都不起作用。如果您知道我如何使用迭代以及它的形式,那将非常有帮助!谢谢corr=正确位置的正确数字wronPlace=错误位置的正确数字不是猜测而是数字的位置。猜测在代码中是完全不同的。我已经更新了答案。另外,请检查您给出的示例。第一个例子不应该在错误的位置返回两位数字吗?这很奇怪。代码在错误的位置输出1个正确的数字,即使相同的数字已经比较过。您的代码在接近结尾时有一个打字错误。这就是它行为古怪的原因。更有理由对
循环使用
!corr=正确位置的正确数字wronPlace=错误位置的正确数字不是猜测而是数字的位置。猜测在代码中是完全不同的。我已经更新了答案。另外,请检查您给出的示例。第一个例子不应该在错误的位置返回两位数字吗?这很奇怪。代码在错误的位置输出1个正确的数字,即使相同的数字已经比较过。您的代码在接近结尾时有一个打字错误。这就是它行为古怪的原因。更有理由对
循环使用
!唯一的问题是它输出的数字与其他数字相比。在跳过doublesit时,它需要与ALL进行比较并输出位置。它应该输出“正确数字的数量是:…”“错误位置的正确数字的数量是:…”,这意味着猜测[0]与代码[0]、代码[1]等进行比较。如果我输入4888,代码是5805,我不希望3个8与代码[1]进行比较。这会造成错误的印象,因为它可能会在4次以上重复相同的数字在该示例中,比较是4->5,8->8,8->0,8->5。没有将三个8(猜测4888的索引1、2、3)与5(代码[0])进行比较。唯一的问题是,它只输出与另一个数字比较的数字。在跳过doublesit时,它需要与ALL进行比较并输出位置。它应该输出“正确数字的数量是:…”“错误位置的正确数字的数量是:…”,这意味着猜测[0]与代码[0]、代码[1]等进行比较。如果我输入4888,代码是5805,我不希望3个8与代码[1]进行比较。这会造成错误的印象,因为它可能会在4次以上重复相同的数字在该示例中,比较是4->5,8->8,8->0,8->5。三个8(猜测4888的索引1、2、3)没有与5(代码[0])进行比较。
Enter your 4-digit guess: 1111

       !!!! <-- Incorrect
Guess: 1111
            <-- Correct

Enter your 4-digit guess: 2222

       !!!! <-- Incorrect
Guess: 2222
            <-- Correct

Enter your 4-digit guess: 3333

        !!  <-- Incorrect
Guess: 3333
       ^  ^ <-- Correct

Enter your 4-digit guess: 3443

        !!  <-- Incorrect
Guess: 3443
       ^  ^ <-- Correct

Enter your 4-digit guess: 3553

        !!  <-- Incorrect
Guess: 3553
       ^  ^ <-- Correct

Enter your 4-digit guess: 3663

        !!  <-- Incorrect
Guess: 3663
       ^  ^ <-- Correct

Enter your 4-digit guess: 3773

        !!  <-- Incorrect
Guess: 3773
       ^  ^ <-- Correct

Enter your 4-digit guess: 3883

        !!  <-- Incorrect
Guess: 3883
       ^  ^ <-- Correct

Enter your 4-digit guess: 3993

         !  <-- Incorrect
Guess: 3993
       ^^ ^ <-- Correct

Enter your 4-digit guess: 3903

            <-- Incorrect
Guess: 3903
       ^^^^ <-- Correct

Nice guess! The secret code was 3903