2016-09-07 75 views
0

我正在写我的第一个python游戏,并试图合并两个额外的元素,但我不确定如何写它。Python的猜测游戏提示和积分系统

1:这个想法是,游戏会随着内置的随机模块(即123)产生一个随机的三位数字,用户将有23次尝试猜测正确的数字。它将通过要求用户在0-9之间输入三位数字来启动。我想创建一个提示系统,以便用户知道他们是否在正确的轨道上。请参阅下面链接中的示例(我无法显着嵌入图像)。

Click to see example Input/Output for hints

  • A “W” 表示所有在猜测的字符是错误的。
  • 一个或多个“X” s表示,他们有一个正确的字符,但在不正确的位置
  • 一个或多个“R” s表示他们有一个正确的字符在正确的位置

要得到这样的提示将需要创建3个独立的数字和它们结合在一起,形成目标号码或我仍可以用下面的代码来做到这一点:

target = random.randint(111, 999) 

我已经开始写一个函数它接受变量猜测(这是用户拥有的)输入)和目标(生成的数字):

def get_hint(guess, target): 

这是就我所知道的。我知道,可笑,可笑。我几乎不知道是否有可能创建这个提示系统。我还希望它有一个积分系统,其中积分开始于10000(如果用户猜测正确的第一次尝试)并减少10%的每个不正确的猜测(第二个猜测= 9000,第三个猜测= 8100,等等)保留到小数点后两位。我有增加的猜测的量计数用户已尝试这样当他们猜测正确的数字会发生以下情况:

if guess == target: 
    print("Congratulations!") 
    print("{} was the correct answer!".format(target)) 
    print("You guessed the correct answer in {} tries and scored {} points.".format(tries, points)) 

回答

0

第一点系统是相当简单:只是有一个得分varible,并在每一轮score=score*0.9修改和圆形它2位小数与"{:.2f}".format(score)

打印关于提示系统时:

有三个数字的名单会很容易对付,所以我会承担targetguess有以下格式"123"[1,2,3](如字符串可以建立索引列表)

一个

棘手的部分是做正确的比较,因为你有照顾已经与目标匹配的数字,以便在guess = 113和target = 333的示例情况下仅给出"r"。下面是做这项工作的函数:

def hint(guess,target): 

    if guess == target: 
     print("win") 
    else: 
     #we store a list to keep track of the numbers 
     #already matched so we don't count them twice as x and r 
     r=[0]*len(target) 

     #first we check if there's a direct match 
     for i,n in enumerate(guess): 
      if guess[i] == target[i]: 
       r[i]=1 

     #we make new lists without the digits that matched 
     stripped_guess=[n for i,n in enumerate(guess) if r[i] == 0] 
     stripped_target=[n for i,n in enumerate(target) if r[i] == 0] 

     #we will now try to count the amount of x 
     x=0 
     for n in set(stripped_guess): 
      #we count how many time that given digit appears 
      # in the two lists, the smallest is our x amount 
      x+=min(stripped_guess.count(n),stripped_target.count(n)) 

     if sum(r) == 0 and x == 0: 
      print("w") 
     else: 
      print("r"*sum(r)+"x"*x) 

一些测试:

>>> hint(guess="404",target="404") 
win 
>>> hint("135","331") 
rx 
>>>hint("11123","12133") 
rrrx 
+0

对于猜测意义的“w”选项,他们没有得到任何数字是否正确? –

+0

对于积分系统,如果每次错误猜测时都要将10000减少10%,代码是如何工作的? –

+0

我改正了分数降低了10%(而不是原来的90%),并在末尾添加了一个小测试的“w”案例 – jadsq

-1

如果您有变量num一个三位数字,你可以剥掉位数: 在[1]:NUM = 347

在[2]:NUM%10

缺货[2]:7

在[3]:(NUM%100)// 10

出[3]:4

[4]:(NUM%1000)// 100

出[4]:3

然后你就可以比较的数字,把你的XS和卢比。

+0

不完全是,它会像 - 请输入一个猜测:123, 你的猜测,123,是不正确的, 您当前的提示是:XX –

+0

这将意味着2位数字是正确的 –

+0

它有意义吗? –