python - 找出重复项的两个序列中共同项的数量
问题描述
我正在尝试制作密码猜谜游戏。生成一个随机的 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")
先感谢您。
解决方案
这里
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
推荐阅读
- python - 从 Python 访问 WRDS:无连接
- openmesh - OpenMesh 将所有标准和自定义属性从一个网格元素复制到另一个网格元素
- reactjs - 尝试使用来自 node.js 服务器的 React useEffect 和 useState 加载图像的动态路径
- elasticsearch - Elasticsearch - Split string into common words without white space or special characters
- jenkins - 在 Jenkins 声明式管道中使用 imagePullSecrets
- blockchain - 智能合约 gas 成本
- python - Python 类在解析时出现意外的 EOF
- wpf - XAML 样式触发器 - 仅为具有特定名称的对象更改样式
- flutter - 如何在 Flutter 中创建侧边栏菜单,以便选择菜单会更改主面板小部件?
- node.js - 我可以安全地使用哪个分隔符来分隔节点中的 zlib 压缩字符串