要处理的数据太多

时间:2017-12-21 10:01:07

标签: python python-3.x

我写了一个非常简单的程序,它创建一个随机字符串,要求用户输入一个字符串并计算他错过/点击的字母数。它一直持续到他猜到随机字符串为止。

出于某种原因,当我尝试运行它时,我收到错误:“要处理的数据很多”。我之前从未见过这个错误,也不知道出了什么问题以及原因。

我很想得到你的意见。这是我写的代码:

import random
import string
def cows_and_bulls(real_string, guess_string):
    hits = 0
    missed = 0
    hits_set = []
    missed_set = []
    for index, letter in enumerate(guess_string):
        if real_string[index] == letter:
            hits +=1
            hits_set.append(letter)
        elif letter in real_string and letter not in hits_set:
            missed +=1
            missed_set.append(letter)
    print(hits, missed)
    return ("hits:" +str( hits), "missed:" +str( missed))

def main():
        random_string = ''.join([random.choice(string.ascii_letters) for n in
                                 range(5)])
        guess_string = input("please enter a guess string")
        if len(guess_string) != 5 or guess_string.isalpha == False:
            print("please enter a new guess")
            guess_string = input("please enter a guess string")

        win = False
        while win is not True:
            hits,missed =  cows_and_bulls(random_string, guess_string)
            if hits == len(random_string):
                print("you win!")
                win = True
                break

if __name__ == '__main__':
    main()

print(cows_and_bulls("abcd", "abdz"))

2 个答案:

答案 0 :(得分:1)

你需要修复你的主要功能。

目前它不会给你你想要的行为。如果相同的猜测(我在jupyter笔记本中得到的行为)猜测的len是5,那么现在运行这样的函数将导致无限循环的打印命中和未命中。根据您用来运行的确切环境,这可能会造成麻烦。

让你的主人这样:

def main():
        random_string = ''.join([random.choice(string.ascii_letters) for n in
                                 range(5)])
        win = False
        while win is not True:

            guess_string = input("please enter a guess string")
            if len(guess_string) != 5 or guess_string.isalpha == False:
                print("please enter a new guess")
                guess_string = input("please enter a guess string")
            if len(guess_string) == 5:
                hits,missed =  cows_and_bulls(random_string, guess_string)
                if hits == len(random_string):
                    print("you win!")
                    win = True

应该解决问题。如果您的主要功能看起来像这样,那么每次玩家没有获胜并且获胜后循环停止时您会要求输入。每次猜测错误时,系统都会提示玩家提供新输入。

在我的最后,这固定了被困在无尽的循环中打印命中和未命中相同的猜测。

答案 1 :(得分:1)

此外,您需要修复cows_and_bulls方法。变化:

return ("hits:" +str( hits), "missed:" +str( missed))

return hits, missed

没有变化,在行

if hits == len(random_string):

您正在将字符串与整数进行比较。 即使你猜测字符串,你也会有一个无限循环,因为'hits:5' == 5是假的。