首页 > 解决方案 > 找出重复项的两个序列中共同项的数量

问题描述

我正在尝试制作密码猜谜游戏。生成一个随机的 4 位密码,您需要猜测密码,如果您猜错了,它应该告诉您您猜到的密码中出现了多少位数。

例如,如果密码是 8823,而我猜是 1788,它应该告诉我我得到了两位正确的数字,因为 8 在这两个数字中都出现了两次。但是,它只告诉我一个数字是正确的,因为数字是相同的数字。如果数字不同,则没有问题,例如,如果引脚是 1234 而我猜是 3456,那么它会说我得到了两个正确的因为 3 和 4 都出现了一次并且是不同的数字。

这是所有代码(我已将我认为包含问题的区域设为粗体):

import random
pin=random.randint(1000,9999)
pin2=str(pin)
pin3=list(pin2)
tries=0
x=1
guess="1"
while x==1:
    pin3=list(pin2)
    guess2=int(guess)
    while guess2<1000 or guess2>9999:
        guess2=int(input("Please guess a 4 digit number: "))
        guess=str(guess2)
    tries+=1

    # BEGIN OF INDICTED CODE ============================
    correct=0
    for i, a in enumerate(pin3):
        guess3=list(guess)
        if a in guess:
            del(pin3[i])
            correct+=1
    print("You got", correct, "correct")
    # END OF INDICTED CODE ==============================

    if guess==pin2:
        x=0
    guess="1"
print("You guessed correctly")
print("You had", tries, "attempts")

先感谢您。

标签: pythonpython-3.x

解决方案


这里

def get_num_of_common_digits(pin_number, guessed_pin_number):
    pin_number_str = str(pin_number)
    guessed_pin_number_str = str(guessed_pin_number)
    result = 0
    for x in pin_number_str:
        idx = guessed_pin_number_str.find(x)
        if idx != -1:
            guessed_pin_number_str = guessed_pin_number_str[:idx] + guessed_pin_number_str[idx+1:]
            result += 1
    return result


print(get_num_of_common_digits(8823, 1788))
print(get_num_of_common_digits(1234, 3456))
print(get_num_of_common_digits(8823, 5678))

输出

2
2
1

推荐阅读