[英]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')
print
查看变量中的内容,您会感到惊讶! random.sample('123456789',4)
返回4个字母的列表 ,而不是4个字母的单词。 input
尝试进行自动转换(例如,输入“ 1234”将导致一个int),并且有人认为这是不好的做法。 使用raw_input确保获得字符串。 "".join(random.sample....)
正确地连接了它,那么它们怎么相等?! 码:
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.