我写了一个非常简单的程序,它创建一个随机字符串,要求用户输入一个字符串并计算他错过/点击的字母数。它一直持续到他猜到随机字符串为止。
出于某种原因,当我尝试运行它时,我收到错误:“要处理的数据很多”。我之前从未见过这个错误,也不知道出了什么问题以及原因。
我很想得到你的意见。这是我写的代码:
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"))
答案 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
是假的。