Member 13342931 Ответов: 2

Здравствуйте, мне дали эту задачу для домашнего задания, и я в тупике о том, что делать дальше, любая помощь была бы большой.


Напишите программу на Python, которая выполняет следующие действия:
Он предлагает пользователю подумать о дате (только месяц и дата в этом месяце, не включая год). Например, 1 января, 29 февраля, 15 апреля, 25 декабря и т. д.
Затем программа задает вопросы пользователю вашей программы, на которые пользователь может (только) ответить либо да, либо нет. Вы можете сделать код проще для себя, проверив только первый символ (букву) входной строки как " Y " или " y "(для Yes) или " N " или " n " (для No).
В 10 вопросах или меньше ваша программа определяет дату, о которой думает пользователь вашей программы.

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

Это то, что у меня есть до сих пор.
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')

Q1 = input("\nIs the date between Jan 1 and Jul 1 (both dates included)?")
if Q1 == "yes":
    Q2 = input("Is the date between Jan 1 and Mar 31 (both dates included)?")
if Q2 == "yes":
    Q4 = input("Is the date between Jan 1 and Feb 14 (both dates included)?")
if Q4 == "yes":
    Q6 = input("Is the date between Jan 1 and Jan 22 (both dates included)?")
if Q6 == "yes":
    Q8 = input("Is the date between Jan 1 and Jan 11 (both dates included)?")
if Q8 == "yes":
    Q10 = input("Is the date between Jan 1 and Jan 5 (both dates included)?")
if Q10 == "yes":
    Q12 = input ("Is the date between Jan 1 and Jan 2 ( both dates included)?")
if Q12 == "yes":
    Q14 = input ("Is Jan 1 the date you are thinking of?")
if Q14 == "yes":
    Q16 = ("The date you thought of is Jan 1.")
    
if Q1 == "no":
    Q3 = input("Is the date between Jul 2 and Sept 30 (both dates included)?")    
if Q3 == "yes":
    Q5 = input("Is the date between Jul 2 and Aug 15 (both dates included)?")
if Q5 == "yes":
    Q7 = input("Is the date between Jul 2 and Jul 23 (both dates included)? ")
if Q7 == "yes":
    Q9 = input("Is the date between Jul 2 and Jul 6 (bith dates included)?")
if Q9 == "yes":
    Q11 = input("Is the date between Jul 2 and Jul 3 (both dates included)?")
if Q11 == "yes":
    Q13 = input("Is Jul 2 the date you are thinking of?")
if Q13 == "yes":
    Q15 = input("The date you thought of is Jul 2.")

2 Ответов

Рейтинг:
9

Patrice T

Ваш код совершенно неверен.
Проблема та же, что угадать число от 1 до 500, вы не пишете сотни вопросов в своем коде, вы используете другой метод.
Таким же образом вы будете решать свою домашнюю работу.
Если это упростит вам задачу, вы можете сначала угадать месяц, а затем угадать день.
-----
Возьмите лист бумаги и карандаш. Используйте свой мозг и решите проблему вручную. Поскольку Гарри Поттер не дал вам решение, нет никакой магии, и решение не прыгнуло вам в лицо.
Вы решили проблему, следуя процедуре, которая является вашим алгоритмом. Вам нужно записать шаги механическим способом (как компьютер). Программа будет следовать этим шагам.


Member 13342931

Спасибо, что сказал угадать сначала месяц, а потом день. Я просто не могла перестать думать только о дате. Идея шагов тоже великолепна, спасибо.

Рейтинг:
16

Thomas Daniels

Поскольку это ваша домашняя работа, я не буду писать код для вас, но вместо этого я дам вам некоторую помощь по алгоритму.

Дело определенно не в том, чтобы создавать операторы if для всех дат. Алгоритм должен быть общим алгоритмом, который работает для каждой даты, и я верю, что этот будет работать (хотя я не пробовал для каждой даты): всегда разделяйте свои варианты на две части и спрашивайте об одной части. Вот пример (ответ-27 апреля):

1. Is the date between January and June (months included)? YES
2. Is the date between January and March (months included)? NO
3. Is the date in March? NO --> In the best case, you only use one question here. Worst case (like here), two questions. Splitting up again (in 2 months and 1 month) doesn't make that much sense, the best-case and worst-case scenarios are the same and it's more complicated)
4. Is the date in April? YES --> you got the month after 4 questions! Now the date
5. Is the day between 1 and 15 (days included)? NO
6. Is the day between 16 and 23 (days included)? NO
7. Is the day between 24 and 27 (days included)? YES
8. Is the day 24 or 25? NO
9. Is the day 26? NO

It's 27th April!

Это то, что вы могли бы попытаться реализовать. Он может быть не единственным, может быть не самым простым, но поиск алгоритма перед написанием кода обязательно необходим.


Member 13342931

Большое вам спасибо, мне было трудно понять, что делать, и это очень помогло.

Thomas Daniels

Пожалуйста!