繁体   English   中英

简单的Python游戏无论如何都无法正常工作

[英]simple Python game doesn't work no matter what

我一直在尝试编写一个实现牛牛游戏的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是一项功能,该功能可通过将给定列表转换为集合然后将其转换为列表并返回最终列表来从给定列表中删除重复项。

这只是一个愚蠢的游戏,但没有任何效果的事实令人非常沮丧。

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

这些行(cows.append(i)...(bulls.append(i)...是生成器,这意味着除非进行评估,否则它们什么也不做。您可以通过交换该封围从技术上将它们转换为列表理解方括号括起来,但是您会为其副作用建立一个列表,这很令人皱眉。与其将list.append在生成器或理解中, 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. 不要灰心,开始编程并不总是那么容易!
  2. 经常使用print查看变量中的内容,您会感到惊讶!
  3. random.sample('123456789',4)返回4个字母的列表 ,而不是4个字母的单词。
  4. 与raw_input相反, input尝试进行自动转换(例如,输入“ 1234”将导致一个int),并且有人认为这是不好的做法。 使用raw_input确保获得字符串。
  5. 但是,如果您从输入中得到一个整数,以及一个字符串列表(或什至是一个字符串,如果使用"".join(random.sample....)正确地连接了它,那么它们怎么相等?!
  6. 最后,(...中的_表示_)语法是生成器语法。 请用谷歌搜索,了解它很重要-它是Python的核心构造之一。 使用该代码将永远不会对其进行评估。 刚接触Python的人经常尝试在任何可能的地方强制采用酷炫的语法,即使这没有任何意义。 这非常好(IMO):

码:

for index,i in enumerate(guess):
     if i in guess:
         if pc[index] == i: cows.append(i)
         else:              bulls.append(i)

祝好运! 编辑:

我看到有人为您解决了该问题-我仍然敦促您阅读有关发电机的内容,也许还会有一个演练。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM