无论

时间:2016-11-16 23:40:57

标签: python

我一直在尝试编写一个实现牛群公牛游戏的Python程序,这是我的代码:

import random
def cb():
  pc = random.sample('123456789',4)
  cows = []
  bulls = []
  while True:
    guess = input('please enter a 4 digit num: ')
    cows = rmd(cows)
    bulls = rmd(bulls)
    if pc == guess:
      print('You win!')
      break
    (cows.append(i) for i in pc if i in guess and guess.index(i) == pc.index(i))
    (bulls.append(i) for i in pc if i in guess and guess.index(i) != pc.index(i))
    print ('{} cows and {} bulls'.format(len(cows), len(bulls))
    continue

这是我在放弃之前尝试的最后一种方法,在此之前我编写了50多个程序并且没有任何工作,它总会返回0牛0牛。我已经尝试过循环,而猜测!=数百个想法中的pc ..什么都行不通。

rmd是一个函数,通过将重复项转换为集合,然后将该集转换为列表并返回最终列表,从给定列表中删除重复项。

这只是一场愚蠢的游戏,但没有任何作用的事实令人沮丧......

2 个答案:

答案 0 :(得分:1)

random.sample返回一个列表,因此它永远不会等于用户输入的字符串。

(cows.append(i)...(bulls.append(i)...是生成器,这意味着除非进行评估,否则它们不执行任何操作。你可以通过交换方括号的括号括起来在技术上将它们变成列表推导,但你会建立一个副作用列表,这是不赞成的。而不是将list.append置于生成器或理解中,而是实际构建所需列表的理解,就像它们打算做的那样。此外,由于您首先只需要唯一的项目,因此没有理由在任何时候使用列表。

根本没有理由建立列表或集合,因为您要做的只是计算每个实例。

import random

def cb():
    pc = ''.join(random.sample('123456789',4))
    while True:
        guess = input('please enter a 4 digit num: ')
        if pc==guess:
            print ('You win!')
            break
        bulls = 0
        cows = 0
        for character in guess:
            if character in pc:
                if guess.index(character) == pc.index(character):
                    bulls += 1
                else:
                    cows += 1
        print(cows, 'cows and', bulls, 'bulls')

答案 1 :(得分:0)

  1. 不要灰心,开始编程并不容易!
  2. 经常使用print查看变量中的内容,您会感到惊讶!
  3. random.sample('123456789',4)会返回4个字母的列表,而不是4个字母的字词。
  4. input,与raw_input相反,尝试自动转换(例如输入“1234”会导致int),有些人认为这是不好的做法。使用raw_input确保获得字符串。
  5. 但是如果你从你的输入中得到一个int,以及一个字符串列表(如果你正确加入它,甚至是一个字符串,使用"".join(random.sample....)它们如何相等?!
  6. 最后(... for _ in _)语法是生成器语法。请谷歌,重要的是要理解 - 这是Python的核心结构之一。在您使用它时,永远不会评估该代码。不熟悉Python的人经常试图在任何地方强制使用酷语法,即使它没有任何意义。这很好(IMO):
  7. 代码:

    for index,i in enumerate(guess):
         if i in guess:
             if pc[index] == i: cows.append(i)
             else:              bulls.append(i)
    
    祝你好运! 编辑:

    我看到有人为你解决了这个问题 - 我仍然恳请你阅读有关发电机的信息,也许还有一个演练。