Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
策划Python编码_Python - Fatal编程技术网

策划Python编码

策划Python编码,python,Python,好的,我有一种感觉,这是一个简单的问题,但我已经盯着这个代码大约10个小时了。 我现在面临的问题是,一旦我让它意识到我在正确的点上有正确的颜色,我就可以让它用X显示正确的点,用O显示错误的点。我需要能够将其转换为X和O,而不是X和O,我需要它告诉用户他/她有两个黑色和一个白色 例如:密码是RGYB,用户输入RGOY,然后Python中继“你有2个黑色(R和G点)和1个白色(Y,因为它是正确的颜色,只是在错误的索引中)。现在,我让它在正确的点显示正确颜色的X,其他任何颜色都是O 我会把我一直在用的

好的,我有一种感觉,这是一个简单的问题,但我已经盯着这个代码大约10个小时了。 我现在面临的问题是,一旦我让它意识到我在正确的点上有正确的颜色,我就可以让它用X显示正确的点,用O显示错误的点。我需要能够将其转换为X和O,而不是X和O,我需要它告诉用户他/她有两个黑色和一个白色 例如:密码是RGYB,用户输入RGOY,然后Python中继“你有2个黑色(R和G点)和1个白色(Y,因为它是正确的颜色,只是在错误的索引中)。现在,我让它在正确的点显示正确颜色的X,其他任何颜色都是O 我会把我一直在用的东西贴出来,但今天我已经束手无策了

几点意见

X和O 使用X和0表示成功,使用列表、元组或布尔将更容易、更快,这样您就可以使用
sum()
来计算有多少颜色和位置是正确的。然后,是否使用X和O或红白管脚来表示这一点,将留待以后讨论

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

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

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

正确的颜色 要计算两个字符串中出现的字母数,可以使用

因此,用户正确地猜测了3种颜色

正确位置 可以通过简单的列表理解来解决

[g == s for g, s in zip(guess, solution)]

因此,使用的工具在正确的位置放置了两种颜色

这是我用Python制作的一个策划人。希望你喜欢它,它帮助了你!:)

随机导入
导入时间
从tkinter进口*
def select_level():
全球一级
level=level_选择器.get()
root.destroy()
root=Tk()
级别选择器=刻度(根,从=1到=3,滴答声间隔=1)
级别选择器设置(0)
level_selector.pack()
按钮(root,text=“选择难度级别”,command=Select\u level).pack()
mainloop()
cpc_1_位=0
cpc_2_位=0
cpc_3_位=0
cpc_4_位=0
p_1_位=0
p_2_位=0
p_3_位=0
p_4_位=0
正确的
纠正错误=0
机会=0
如果级别==1:
机会=15
elif级别==2:
机会=10
其他:
机会=7
cpc_1_位=随机随机数。随机数(0,9)
而cpc_2_位==cpc_1_位或cpc_2_位==cpc_3_位或cpc_2_位==
cpc_4位数字:
cpc_2_位=random.randint(0,9)
而cpc_3_位==cpc_1_位或cpc_3_位==cpc_2_位或cpc_3_位==
cpc_4位数字:
cpc_3_位=随机随机数。随机数(0,9)
而cpc_4_位==cpc_1_位或cpc_4_位==cpc_2_位或cpc_4_位==
cpc_3位数字:
cpc_4_位=random.randint(0,9)
当机会>0时:
正确的
纠正错误=0
回答=输入(“输入一个具有不同数字的四位数字(例如1476):”)
p_1_位=int(答案[0])
p_2_位=int(答案[1])
p_3_位=int(答案[2])
p_4_位=int(答案[3])
如果p_1_位==cpc_1_位:
correct\u correct=int(correct\u correct)+1
elif p_1_位==cpc_2_位或p_1_位==cpc_3_位或p_1_位==
cpc_4位数字:
纠正错误=int(纠正错误)+1
其他:
通过
如果p_2_位==cpc_2_位:
correct\u correct=correct\u correct+1
elif p_2_位==cpc_1_位或p_2_位==cpc_3_位或p_2_位==
cpc_4位数字:
纠正错误=int(纠正错误)+1
其他:
通过
如果p_3_位==cpc_3_位:
correct\u correct=int(correct\u correct)+1
elif p_3_位==cpc_1_位或p_3_位==cpc_2_位或p_3_位==
cpc_4位数字:
纠正错误=int(纠正错误)+1
其他:
通过
如果p_4_位==cpc_4_位:
correct\u correct=int(correct\u correct)+1
elif p_4_位==cpc_1_位或p_4_位==cpc_3_位或p_4_位==
cpc_2_位:
纠正错误=int(纠正错误)+1
其他:
通过
打印(“”)
如果int(correct_correct)==4:
打印(“恭喜!您找到了计算机的号码!”)
打破
elif int(correct\u correct)>0或int(correct\u correct)>=1和int(correct\u correct)
< 4:
打印(“您得到了”+str(correct\u correct)+“正确的数字”
位置和“+str(纠正错误)+”正确的数字但在错误的位置。”)
elif int(correct\u correct)==0和int(correct\u error)==0:
打印(“您没有猜到任何数字,请再试一次!”)
其他:
引发异常(“CheckError:第69行,服务器出现了问题
比较。”)
退出()
打印(“”)
机会=机会-1
如果机会==0:
打印(“您丢失了……密码是”+str(cpc\U 1位)+str(cpc\U 2位)
+str(cpc_3位)+str(cpc_4位)+“。请重新运行该程序重试。”)
时间。睡眠(4)

@WilliamHollinger欢迎访问SO!请查看我们的页面以及如何创建一个新的应用程序,然后请编辑您的问题。顺便说一句,我与Mastermind有着特殊的关系,因为这是我编写的第一个程序之一——在TI袖珍计算器上,然后在1979年在HP-67上!我仍然有HP-67的列表:天哪,谢谢我甚至不认为这是集合。标准Python库的计数器部分甚至试图将它隔离在shell中,导致从集合导入计数器中导入错误导入集合>代码,因此不必用<代码>集合对其进行前缀。< /代码>
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
[g == s for g, s in zip(guess, solution)]
[True, True, False, False]
sum(g == s for g, s in zip(guess, solution))
2
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)