当前代码的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
我认为这可能是因为您正在函数中声明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
相关问题 更多 >
编程相关推荐