Игра в угадайку Python, подсчитывающая количество догадок

Мой учитель «Введение в информатику» дал нам задание на угадывание игры в кости, и, хотя мне удалось выяснить большинство компонентов, последняя часть состоит в том, чтобы вернуть правильное число (после того, как они угадали его) и число попыток, которые им потребовались, чтобы понять это. Мой код возвращает все это, но он не учитывает, если человек угадывает одно и то же число дважды. Есть ли способ сказать им, сколько догадок им потребовалось, чтобы найти число, игнорируя любые повторяющиеся числа?

Это код, который у меня есть до сих пор:

import random

give_number = input("We will roll a 6 sided dice. What do you think the number will be?\n ")
guess_number = 1

dice = random.randint(1,6)
while give_number != dice:
    if give_number > dice:
        give_number = input("Sorry, that answer is too high! Try again!\n ")
        guess_number = guess_number +1
    if give_number < dice:
        give_number = input("Sorry, that answer is too low! Try again!\n ")
        guess_number = guess_number +1

print "Congratulations, you were right, the answer was {}! It took you {} tries.".format(dice, guess_number)

person Lindsay Swanson    schedule 01.04.2015    source источник
comment
исправьте отступ. операторы if под while должны быть перемещены в мою одну вкладку   -  person letsc    schedule 01.04.2015


Ответы (3)


Чтобы обнаружить повторные предположения, мы должны отслеживать все предыдущие предположения.

Нам нужно только знать, угадывалось ли конкретное число раньше, а не сколько раз оно выпадало.

Это идеальное место для использования set (см. Python документы).

Начните с пустого набора (а не с guess_number = 1), затем добавляйте каждое предположение к этому набору.

Как только человек угадал правильно, вы можете проверить размер набора — это количество догадок без учета дубликатов.

person DNA    schedule 01.04.2015
comment
Или используйте словарь, чтобы увидеть, какое число было угадано больше всего раз. - person letsc; 01.04.2015

Я бы предложил использовать список для добавления догадок. Я изменил ваш код таким образом (для Python 3 в моем случае):

import random

give_number = int(input("We will roll a 6 sided dice. What do you think the number will be?\n "))
guess_number = 1
guessList = []
guessList.append(give_number)

dice = random.randint(1,6)
while give_number != dice:
    if give_number > dice:
        give_number = int(input("Sorry, that answer is too high! Try again!\n "))
        #guess_number = guess_number + 1
        if give_number not in guessList:
            guessList.append(give_number)
    if give_number < dice:
        give_number = int(input("Sorry, that answer is too low! Try again!\n "))
        #guess_number = guess_number + 1
        if give_number not in guessList:
            guessList.append(give_number)

if give_number not in guessList:
    guessList.append(give_number)
print ("Congratulations, you were right, the answer was {}! It took you {} tries.".format(dice, len(guessList)))

Если вы хотите проверить, является ли ввод целым числом или находится в пределах вашего диапазона, вы можете взглянуть на этот код:

import random

def inputIsInt(inpStr): # checks if the input is an integer in range (1, 7).
    try:
        if int(inpStr) in range(1, 7):
            return True
        else:
            return False
    except ValueError:
        return False

give_number = input("We will roll a 6 sided dice. What do you think the number will be?\n ")
while not inputIsInt(give_number):
    print("Sorry, your input is not an integer or out of range")
    give_number = input("We will roll a 6 sided dice. What do you think the number will be?\n ")

guessList = []
guessList.append(int(give_number))
dice = random.randint(1,6)

while int(give_number) != dice:
    if int(give_number) > dice:
        give_number = input("Sorry, that answer is too high! Try again!\n ")
        while not inputIsInt(give_number):
            print("Sorry, your input is not an integer or out of range")
            give_number = input("We will roll a 6 sided dice. What do you think the number will be?\n ")
        if int(give_number) not in guessList:
            guessList.append(int(give_number))
    if int(give_number) < dice:
        give_number = input("Sorry, that answer is too low! Try again!\n ")
        while not inputIsInt(give_number):
            print("Sorry, your input is not an integer or out of range")
            give_number = input("We will roll a 6 sided dice. What do you think the number will be?\n ")
        if int(give_number) not in guessList:
            guessList.append(int(give_number))

if int(give_number) not in guessList:
    guessList.append(int(give_number))
print ("Congratulations, you were right, the answer was {}! It took you {} tries.".format(dice, len(guessList)))
person Alexey Gorozhanov    schedule 01.04.2015
comment
Код был улучшен, теперь учитываются только разные попытки, включая последнюю. - person Alexey Gorozhanov; 01.04.2015

Вы также можете переместить переменную Guess_number за пределы оператора if, например:

    import random

    give_number = input("We will roll a 6 sided dice. What do you think the number will be?\n ")
    guess_number = 0

    dice = random.randint(1,6)
    while give_number != dice:
        guess_number = guess_number + 1
        if give_number > dice:
            give_number = input("Sorry, that answer is too high! Try again!\n ")
            #guess_number = guess_number +1
        if give_number < dice:
            give_number = input("Sorry, that answer is too low! Try again!\n ")
            #guess_number = guess_number +1

    print "Congratulations, you were right, the answer was {}! It took you {} tries.".format(dice,guess_number)
person jfish003    schedule 01.04.2015