Mastermind Python编码

时间:2017-08-21 08:28:01

标签: python

好的,我觉得这是一个简单的简单问题,但我现在已经盯着这段代码大约10个小时了。 我遇到的问题是,一旦我认识到我在正确的位置有正确的颜色,我可以让它用X显示正确的点和O的错误点。我需要能够转换它,而不是X和OI需要它告诉用户他/她有2个黑色和一个白色 例如:密码是RGYB用户输入RGOY然后Python继电器“你有2个黑色(R和G点)和一个1白色(Y因为它是正确的颜色只是在错误的索引中)截至目前我得到它在正确的位置显示X为正确的颜色和其他任何它是O. 我将发布我现在一直在使用的内容,但今天我已经结束了 https://pastebin.com/HKK0T7bQ

    if correctColor != "XXXX":
    for i in range(4):
        if guess[i] == tempCode[i]:
           correctColor += "X"
        if  guess[i] != tempCode[i] in tempCode:
           correctColor += "O"
    print (correctColor + "\n")    

if correctColor == "XXXX":
    if attempts == 1:
        print ("You think you are sweet because you got it right on the first try? Play me again!")
    else:
        print ("Well done... You needed " + str(attempts) + " attempts to guess.")
    game = False

2 个答案:

答案 0 :(得分:3)

一些评论

X和O

使用X和0来表示成功,使用列表或元组或布尔值会更容易,更快,这样您就可以使用sum()来计算有多少颜色和位置是正确的。那么你是否用X和O或红色和白色引脚表示是后来的问题

条块

您的游戏逻辑(猜测输入,输入验证,您想继续等)与比较逻辑混合在一起,因此最好将程序的不同功能分成不同的方法。

这是引入面向对象编程的一个很好的例子,但它很简单,它不需要OO,但它可以提供帮助。你需要的是一种采用一系列颜色并将其与另一系列颜色进行比较的方法

标准库

Python有一个非常扩展的标准库,所以很多你想要做的东西可能已经存在了

正确的颜色

要计算2个字符串中出现的字母数,可以使用collections.Counter

guess = "RGOY "
solution = "RGYB"
a = collections.Counter(guess)
b = collections.Counter(solution)

a & b
Counter({'G': 1, 'R': 1, 'Y': 1})
correct_colours = sum((a & b).values())
3

因此用户正确猜出了3种颜色

正确的位置

可以通过简单的列表理解来解决

[g == s for g, s in zip(guess, solution)]
[True, True, False, False]
sum(g == s for g, s in zip(guess, solution))
2

所以使用了2种颜色在正确的位置

答案 1 :(得分:0)

这是我用Python制造的MasterMind。希望您喜欢它,它对您有所帮助! :)

import random                                         
import time  
from tkinter import *


def select_level():
    global level
    level = level_selector.get()
    root.destroy()

root = Tk()
level_selector = Scale(root, from_=1, to=3, tickinterval=1)
level_selector.set(0)
level_selector.pack()
Button(root, text="Select a difficulty level", command=select_level).pack()

mainloop()

cpc_1_digit = 0
cpc_2_digit = 0
cpc_3_digit = 0
cpc_4_digit = 0
p_1_digit = 0
p_2_digit = 0
p_3_digit = 0
p_4_digit = 0
correct_correct = 0
correct_wrong = 0
chances = 0

if level == 1:
    chances = 15
elif level == 2:
    chances = 10
else:
    chances = 7

cpc_1_digit = random.randint(0, 9)

while cpc_2_digit == cpc_1_digit or cpc_2_digit == cpc_3_digit or cpc_2_digit == 
cpc_4_digit:
    cpc_2_digit = random.randint(0, 9)

while cpc_3_digit == cpc_1_digit or cpc_3_digit == cpc_2_digit or cpc_3_digit == 
cpc_4_digit:
    cpc_3_digit = random.randint(0, 9)

while cpc_4_digit == cpc_1_digit or cpc_4_digit == cpc_2_digit or cpc_4_digit == 
cpc_3_digit:
    cpc_4_digit = random.randint(0, 9)

while chances > 0:
    correct_correct = 0
    correct_wrong = 0

    answer = input("Enter a four-digit number with different digits (e.g 1476): ")
    p_1_digit = int(answer[0])
    p_2_digit = int(answer[1])
    p_3_digit = int(answer[2])
    p_4_digit = int(answer[3])

    if p_1_digit == cpc_1_digit:
        correct_correct = int(correct_correct) + 1
    elif p_1_digit == cpc_2_digit or p_1_digit == cpc_3_digit or p_1_digit == 
cpc_4_digit:
        correct_wrong = int(correct_wrong) + 1
    else:
        pass

    if p_2_digit == cpc_2_digit:
        correct_correct = correct_correct + 1
    elif p_2_digit == cpc_1_digit or p_2_digit == cpc_3_digit or p_2_digit == 
cpc_4_digit:
        correct_wrong = int(correct_wrong) + 1
    else:
        pass

    if p_3_digit == cpc_3_digit:
        correct_correct = int(correct_correct) + 1
    elif p_3_digit == cpc_1_digit or p_3_digit == cpc_2_digit or p_3_digit == 
cpc_4_digit:
        correct_wrong = int(correct_wrong) + 1
    else:
        pass

    if p_4_digit == cpc_4_digit:
        correct_correct = int(correct_correct) + 1
    elif p_4_digit == cpc_1_digit or p_4_digit == cpc_3_digit or p_4_digit == 
cpc_2_digit:
        correct_wrong = int(correct_wrong) + 1
    else:
        pass

    print("")
    if int(correct_correct) == 4:
        print("Congratsulations! You found the computer's number!")
        break
    elif int(correct_wrong) > 0 or int(correct_correct) >= 1 and int(correct_correct) 
< 4:
        print("You got " + str(correct_correct) + " correct digit(s) in the correct 
place, and " + str(correct_wrong) + " correct digit(s) but in wrong place.")
    elif int(correct_correct) == 0 and int(correct_wrong) == 0:
        print("You didn't guess any number, try again!")
    else:
        raise Exception("CheckError: line 69, something went wrong with the 
comparings.")
        exit()
    print("")

    chances = chances - 1


if chances == 0:
    print("You lost... The secret number was " + str(cpc_1_digit) + str(cpc_2_digit) 
+ str(cpc_3_digit) + str(cpc_4_digit) + ". Try again by rerunning the program.")

time.sleep(4)