Member 13342931 Ответов: 1

Как угадать дату в 10 вопросах?


Я пытаюсь угадать дату по десяти вопросам. Я могу получить код, чтобы задать только десять вопросов, но у меня возникли проблемы с получением правильной даты. Программа продолжает идти до 31 декабря, и мне нужно, чтобы она сузилась до определенной даты. Я все еще очень новичок в программировании, так что любая помощь была бы очень кстати.

Что я уже пробовал:

#Guess the Date
#Instructions for program
print ('Think of a specific date in any year')
print ('e.g., Jan 1 or Feb 29 or Jul 4 or Dec 25')
print ('Truthfully answer "Yes" or "No" to the following questions')
print ('I will determine the date in ten questions or less')

#Return a list of elements, each element is a date in a calendar year
def Calendar(monthNames, numDaysInMonth): #defining Calendar

    if len(monthNames) != len(numDaysInMonth): 
        return []

    dates = []
    idx = 0     #index is set to zero

    while idx < len(monthNames):
        for date in range(1, numDaysInMonth[idx] + 1):
            dates.append(monthNames[idx] + " " + str(date))
        idx = idx + 1
    return dates
monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
          "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]   #list of months
numDaysInMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] #list of how many days in each month

#This is a binary search
first =Calendar(monthNames,numDaysInMonth) #first defined through the Calendar code block

def guess_game(first = Calendar(monthNames,numDaysInMonth)): #defining guess_game using months list and numDays item in the Calendar code to work the search

    if len(first) == 1:
        return first[0]

    mid = len(first)//2

    if is_earlier(first[mid]):    #list mindpoint
        return guess_game(first[:mid])
    else:
        return guess_game(first[mid:])

#Answer output, what is out putted in the python shell
def is_earlier(guess = 10): #defining is_ealier and setting the number of guesses equal to 10

    answer = input("Is {} earlier then your date? (Yes - earlier /No - not earlier) ".format(guess))#10 or less guesses to to find answer
    
    if answer.upper() == "Yes": #if true user can put No, no, n
        return True

    else:
        return False #if false user can put Yes, yes, y
        
guess_game() #intialize quess_game

1 Ответов

Рейтинг:
10

Patrice T

Ваше испытание answer неправильный.
Что происходит с пользователем answer когда вы это сделаете answer.upper() ?
Вы проверяете, против какой ценности ?

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
27.3. ПДБ — отладчика Python — питон 3.6.1 документации[^]
Отладка в Python | Python покоряет Вселенную[^]
pdb-интерактивный отладчик-Python модуль недели[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Member 13342931

Спасибо Вам за информацию об отладчике и за то, что вы дали мне знать, что мой ответ-это проблема.

Patrice T

Пожалуйста.