Прежде всего, while numberRangeLow < numberRangeHigh+1: do stuff
в основном такой же, как range
.
Для этого же результата вы можете использовать numbers = range(numberRangeLow, numberRangeHigh + 1)
, который построит для вас список.
Вам также не нужно предупреждать, что он чувствителен к регистру, если вы используете str.lower()
, он автоматически поместит его в нижний регистр. Например, вы можете сделать if answer.lower() == "higher"
.
Чтобы удалить номера, вы можете сделать list slicing. Например, если у вас есть a = [1, 2, 3, 4]
, и он меньше 3, вы можете получить индекс 3, используя a.index(3)
, который в этом случае даст 2.
. Затем отсекая что-либо выше этого индекса с a[2:]
, вы удалили любые более высокие цифры, чем 3.
Вот краткое обновление вашего кода, в котором я упоминал биты.
trys=int(input("How many trys will you let me have? "))
numberRangeLow=int(input("What is the lowest number I can guess?: "))
numberRangeHigh=int(input("And the highest?: "))
print("\nSo I have",str(trys),"trys")
print("And the number is between",str(numberRangeLow),"and",str(numberRangeHigh)
#New bits:
numbers = range(numberRangeLow, numberRangeHigh + 1)
for i in range(trys):
guess = random.choice(numbers)
print("Is your number", str(guess), "?")
answer = input("Enter 'higher', 'lower' or 'correct'").lower()
if answer == 'correct':
break
elif answer == 'higher':
list_index = numbers.index(guess)
numbers = numbers[list_index + 1:]
elif answer == 'lower':
list_index = numbers.index(guess)
numbers = numbers[:list_index]
Я переделал последнюю часть кода, поэтому у вас не было 2 экземпляров случайного выбора. Кроме того, для записи, это считается лучшей практикой для name_variables_like_this
и notLikeThis
.
Редактирование: способ Кевина немного отличается от моего, простое сравнение предполагает, что вы написали цифры на бумаге, таким образом скопируйте бумагу пополам и отбросьте одну часть, тогда как метод Кевина будет писать ее снова на новом листе бумаги, так что вы получите больше контроля, но это немного медленнее.
Редактировать 2: Поскольку мне скучно, я написал, как я буду делать это с помощью функции (с некоторыми комментариями). Имейте в виду, что это python 2 не python 3 Я использую так, чтобы copy + paste не работал для вас.
def number_guess(tries, low, high):
#Error if low is more than or the same as high
if low >= high:
raise ValueError('invalid range')
#Build number list
num_list = range(low, high + 1)
print 'I have got {} tries'.format(tries)
print 'And the number is between {} and {}'.format(low, high)
for i in range(tries):
guess = random.choice(num_list)
print 'Is {} your number?'.format(guess)
answer = input('Enter higher, lower or correct').lower()
#Empty answer
if not answer:
continue
#Correct answer
if answer[0] in ('c', 'y'):
print 'I guessed in {} tries'.format(i)
return True
#Number is higher
if answer[0] == 'h':
list_index = num_list.index(guess)
num_list = num_list[list_index + 1:]
#Number is lower
elif answer[0] == 'l':
list_index = num_list.index(guess)
num_list = num_list[:list_index]
#If it hits this point there are no tries left
print 'I failed to guess'
return False
tries = int(input('How many tries will you let me have?'))
low = int(input('What is the lowest number I can guess?'))
high = int(input('And what is the highest?'))
success = number_guess(tries, low, high)
так, numbers = numbers [list_index + 1:] ... где я ищу этот материал, –
Нажмите на ссылку для сортировки списка, это дает базовый пример, который будет лучше объясняться, чем моя попытка: P В принципе, '[a: b]' означает пропустить первые значения 'a' и last' b', поэтому '[a:]' просто означает отрезать первые значения 'a' и не делает ничего до конца. – Peter