贝果皮科弗米错误?

2024-05-23 20:32:53 发布

您现在位置:Python中文网/ 问答频道 /正文

当前代码的bug可能比我目前看到的要多,但我试图修复的是get_guess()函数。目前,我已经将其编码为在“范围内的I…”中打印I,因为每当我输入猜测时,它会自动假定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

Tags: inyounumbersecretreturnifdeflength
1条回答
网友
1楼 · 发布于 2024-05-23 20:32:53

我认为这可能是因为您正在函数中声明num_list generate_number(length)

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

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

我会小心处理一些事情,不是吗 1.指定输入必须是字符串。如果输入一个不带引号的int,它将崩溃(至少对我来说是崩溃的),或者在将其传递给函数之前将其转换为string。它在尝试访问数组guess[i]时崩溃 2.注意以0开头的数字(例如02)。如果不另行指定,则强制转换为int会将其转换为2

相关问题 更多 >