#python #list #python-2.7 #loops
#python #Список #python-2.7 #циклы
Вопрос:
Итак, у меня есть функция, которая в основном предлагает пользователю найти определенное предопределенное число (76 / семьдесят шесть). Каждый раз, когда делается неверное предположение, им выдается подсказка, за которой следует возможность угадать снова. Я хочу иметь возможность давать им разные подсказки из моего списка для каждого неправильного предположения. Это также сложно, потому что у меня должно быть определенное количество подсказок, поэтому после того, как список исчерпан, пользователю должно быть предложено просто угадать снова без указаний. Я еще не придумал свои подсказки, но вот код:
hint_list = ['filler_1','filler_2', 'filler_3', 'filler_4', 'filler_5']
def try_and_respond():
guess = raw_input('Guess: ')
if guess.isdigit():
guess = int(guess)
correct = guess == 76
else:
correct = guess.lower() == 'seventy-six'
if correct:
print 'n33[1;36;40m Fantastic! 76 is correct.'
elif not correct:
print 'n33[1;31;40mIncorrect. Here is a hint: 33[1;30;47m'
print hint_list[0]
try_and_respond()
Комментарии:
1. Должно ли это быть случайным? Или просто повторите цикл, начиная с самого начала, в том же порядке?
2. @orlp Тот же порядок
3. Есть ли ни один из двух ответов, которые удовлетворяют? Если ни один из них не удовлетворяет, пожалуйста, прокомментируйте, чтобы вы могли получить лучшие ответы. Если у вас есть удовлетворительные ответы, пожалуйста, проголосуйте / примите. Если слишком много пользователей с низкой репутацией не принимают ответы, то существует риск того, что все больше и больше людей не будут помогать пользователям с низкой репутацией, что было бы очень жаль
Ответ №1:
Ведите счетчик, чтобы решить, какую подсказку показывать следующей.
Если вы хотите иметь подсказки в случайном порядке, используйте random.shuffle()
# import random # uncomment if random hint order
hint_list = ['filler_1','filler_2', 'filler_3', 'filler_4', 'filler_5']
# uncomment next line for random hint order
# random.shuffle(hint_list)
incorrect_count = 0
def try_and_respond():
global incorrect_count
guess = raw_input('Guess: ')
if guess.isdigit():
guess = int(guess)
correct = guess == 76
else:
correct = guess.lower() == 'seventy-six'
if correct:
print 'n33[1;36;40m Fantastic! 76 is correct.'
else:
if incorrect_count < len(hint_list):
print 'n33[1;31;40mIncorrect. Here is a hint: 33[1;30;47m'
print hint_list[incorrect_count]
incorrect_count = 1
try_and_respond()
try_and_respond()
И вот модифицированная версия без рекурсии, но вместо этого явный цикл и некоторый код, чтобы сделать код совместимым с python3, но пусть он все равно выполняется с python2
# import random # uncomment if random hint order
import sys
# It's 2020, So I suggest to
# make the code also python 3 compatible.
if sys.version_info[0] < 3:
input = raw_input
hint_list = ['filler_1','filler_2', 'filler_3', 'filler_4', 'filler_5']
# uncomment next line for random hint order
# random.shuffle(hint_list)
incorrect_count = 0
def try_and_respond():
global incorrect_count
guess = input('Guess: ')
if guess.isdigit():
guess = int(guess)
correct = guess == 76
else:
correct = guess.lower() == 'seventy-six'
if correct:
print('n33[1;36;40m Fantastic! 76 is correct.')
else:
if incorrect_count < len(hint_list):
print('n33[1;31;40mIncorrect. Here is a hint: 33[1;30;47m')
print(hint_list[incorrect_count])
incorrect_count = 1
return correct
while not try_and_respond():
try_and_respond()
Комментарии:
1. пожалуйста, обратите внимание, что ваш код «немного странный» Idt не использует цикл, но рекурсию для запроса дальнейших времен В моем ответе я просто указал путь списка подсказок и не трогал остальную часть кода. Я мог бы отредактировать свой ответ позже, чтобы добавить измененную версию вашего скрипта, которую я считаю более распространенной
2. просто заменено:
print hint_list[0]
наprint hint_list[incorrect_count]
мой плохой3. Просто прочитайте свой ответ на @orlp, если вы не хотите случайного порядка и перестанете давать подсказки, тогда просто удалите
import random
иrandom.shuffle(hint_list)
из моего ответа
Ответ №2:
Для циклического изменения набора значений часто легко использовать оператор modulo %
.
Попробуйте выполнить следующее:
hint_idx = 0
while True:
print(hints[hint_idx])
hint_idx = (hint_idx 1) % len(hints)
Комментарии:
1. Я думаю, что OP попросил показать каждую подсказку, а затем прекратить давать подсказки. Тем не менее, неплохо показать оператор по модулю. Другие люди, читающие этот вопрос, возможно, захотят перебрать.