2016-11-15 4 views
0

Я еще рано изучаю код, поэтому извините, если код неуловимый ... Я делаю ряд игр с угадыванием, которые догадываются, основываясь на первом предположении из двух чисел пользователь дает, а затем помещает эти числа в список по возрастанию. то мой вопрос, я хочу, чтобы удалить число ниже/выше моего первого предположения, то просто сделать random.choice (список) код для подражания ....удаляет числа из списка, меньшего чем переменные

import random 
print("\nLets see if I can guess the number you're thinking.\nI've got some questions first") 
tryNumber=1 
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)+".\n") 
firstGuess=random.randint(numberRangeLow, numberRangeHigh) 
numbers=[] 
nums=[] 
while numberRangeLow < numberRangeHigh+1: 
    numbers.append(numberRangeLow) 
    nums.append(numberRangeLow) 
    numberRangeLow+=1 

while tryNumber < trys: 
    print("Is your number", str(firstGuess), "?") 
    answer=input("Enter 'higher', 'lower' or correct (Case-Sensitive)") 
    if answer == "higher": 
     numbers.remove('''nums >= firstGuess''') 
     firstGuess=random.choice(numbers) 
     print("Is your number", str(firstGuess), "?") 

Я не комфортно с функциями только пока что почему это так много. как только я получу это совершенно плохое изменение, это вызовет функции для всего. -hopefully-

ответ

0

Прежде всего, 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) 
+0

так, numbers = numbers [list_index + 1:] ... где я ищу этот материал, –

+0

Нажмите на ссылку для сортировки списка, это дает базовый пример, который будет лучше объясняться, чем моя попытка: P В принципе, '[a: b]' означает пропустить первые значения 'a' и last' b', поэтому '[a:]' просто означает отрезать первые значения 'a' и не делает ничего до конца. – Peter

0

Изменить numbers.remove('''nums >= firstGuess''') на numbers.remove(firstGuess) Вам также необходимо учитывать числа, которые больше, чем ваше первое предположение, поэтому вам нужно удалить их перед этим. numbers = ([x for x in numbers if x > firstGuess]) должен сделать трюк.

while tryNumber < trys: 
    print("Is your number", str(firstGuess), "?") 
    answer=input("Enter 'higher', 'lower' or correct (Case-Sensitive)") 
    if answer == "higher": 
     numbers = ([x for x in numbers if x > firstGuess]) 
     firstGuess=random.choice(numbers) 

Это должно заставить вас начать.

+0

Что именно означает «x для x в цифрах»? Я понимаю, если x больше, чем firstGuess –

Смежные вопросы