Bagel Pico fermi错误?

时间:2017-03-28 15:34:32

标签: python list

当前代码可能有比我目前看到的更多错误,但我想解决的是get_guess()函数。目前我已将其编码为“for i in range ...”,因为每当我输入猜测时,它会自动假设i = 0并打印“你只能猜数字”。我不确定为什么,当0是它应该检查的数字列表的一部分时。有想法该怎么解决这个吗?  旁注,事情缩进正确,我不习惯这个网站的格式。

import random

def explain_instructions(): 
print("I am thinking of a number with nonrepeating digits.  You will have 10 attempts to try and guess my number.")
print("'Bagel' will be displayed if no digits are correct.")
print("'Pico' will be displayed if a digit is correct but in the wrong place.") 
print("'Fermi' will be displayed if a correct digit is in the correct place.")

def generate_number(length): 
num_list = [0,1,2,3,4,5,6,7,8,9]
random.shuffle(num_list)
secret_num = num_list[0:length]
secret_num = "".join(str(digit) for digit in secret_num)
return secret_num

def give_clues(secret_num, guess):
clues = []
for i in range(len(str(guess))):
    if guess[i] == secret_num[i]:
        clues.append("Fermi")  
    elif guess[i] in secret_num and guess[i] != secret_num[i]: 
        clues.append("Pico")
if clues == []:
    clues.append("Bagel")
return(clues)
print(clues)


def get_guess(length, guess): 
for i in range(int(length)):
    if guess[i] in guess[:i] or guess[i] in guess[i+1:]:
        print("Repeating numbers don't work in this game.")
        return
    elif len(guess) != len(secret_num):
        print("You don't have the correct number of digits.")
        return
    elif guess[i] not in num_list and guess != "":
        print(i,"You can only guess numbers.")
        return
    else: 
        return int(guess)

def play_again(): 
print("Would you like to play again? (Yes/No)")
answer = input()
if answer.lower()== "yes":
    return True
else: 
    print("That wasn't a firm 'yes' so.... goodbye :( ")


print("Welcome to Bagel, Fermi, Pico!")
explain_instructions()
num_list = [0,1,2,3,4,5,6,7,8,9]
game_is_done = False

while True: 
print("How long would you like your number to be?")
length = input()
secret_num = generate_number(int(length))
print(secret_num)

max_guess = 0
while max_guess < 10: 
    print("Enter a", length, "digit guess:")
    guess = input()
    if guess == "411":
        print(explain_instructions())
    elif get_guess(length,guess): 
        max_guess += 1 
        clue = give_clues(secret_num,guess) 
        print(clue)

        if clue == ['Fermi'] * len(secret_num):
            print("Congrats! You guessed the correct number!")
            break
        if max_guess == 10:
            print("Oh no! You have run out of guesses. The secret number was:", secret_num)


if not play_again():
    break

1 个答案:

答案 0 :(得分:0)

我想这可能是因为你在函数中声明了num_list generate_number(length)

所以当你在函数外部要求num_list时,python不知道num_list是什么。将其声明为全局变量可以解决您的问题(但尚未对其进行测试) 是的,我= 0,因为它是迭代器,而不是你猜测的数字。如果你想看到你的猜测,写下

print(guess[i],"You can only guess numbers.")

尽管如此,我会对一些事情小心谨慎  1.指定输入必须是字符串。如果你输入一个没有引号的int,它会崩溃(至少对我而言崩溃),或者在将它传递给函数之前将其强制转换为字符串。当试图访问数组时它崩溃了[i]  2.注意以0开头的数字(例如02)。如果你没有另外指定,则转换为int会将其转换为2。