2012-02-24 3 views
0

Я пытаюсь взять исходный ввод и определить, находится ли он в диапазоне.
Вот мой код.Получение целочисленного ввода в диапазоне

def gold_room(): 
    print "This room is full of gold. How much do you take?" 

    next = raw_input("> ") 
    if next == int in range(50): 
     how_much = int(next) 
    else: 
     dead("Man, learn how to type a number.") 

    if how_much < 50: 
     print "Nice, you're not greedy, you win!" 
     exit(0) 
    else: 
     dead("You greedy bastard!") 

Когда я ввожу число, оно дает мне другое: «Человек, научись вводить число».
Я предполагаю, что линия, которая не работает в «, если следующий == INT в диапазоне (50):!
Может кто-нибудь помочь мне
Спасибо заранее
Edit:
Я нуб так что линия была только у меня ballparking.
Я думал, что это будет проверить ряд, чтобы увидеть, если это целое число в диапазоне числа 0-50.

+3

Пожалуйста, объясните, что вы думаете 'следующего == Int в диапазоне (50)' будет делать. Пожалуйста, ** обновите ** вопрос с пошаговым объяснением этого выражения. Возможно, вам стоит попробовать в подсказке '>>>', чтобы быть уверенным в том, что он делает. –

+1

Не скрывайте встроенную функцию 'next'. – katrielalex

+0

«Эта линия была только мне парком». Плохая привычка. используйте подсказку '>>>', пожалуйста, чтобы подтвердить, что делает код (или не делает). –

ответ

1

с raw_input возвращает строку, вам нужно преобразовать в междунар первым. Попробуйте заменить эту линию следующим образом:

if int(next) in range(50): 
+0

Курс списка слишком медленный, представьте себе большой список. – Fred

+0

Это работает! Спасибо! –

+3

Это не очень хороший способ проверить, находится ли число от 0 до 50. –

0

Результат raw_input() будет строкой, поэтому сначала вам нужно проверить, все ли цифры next. Есть несколько способов сделать это, проще всего использовать str.isdigit() функции:

next = raw_input("> ") 
if next.isdigit(): 
    how_much = int(next) 
else: 
    dead("Man, learn how to type a number.") 

Обратите внимание, что вам не нужно, чтобы проверить, если значение next находится в диапазоне от 0 до 50, так как ваш следующий оператор if уже проверяет, будет ли значение меньше 50, а отрицательные числа будут исключены next.isdigit().

+0

EAFP: 'try: int (next), за исключением ValueError: dead (...)' – katrielalex

0

Тест «next == int in range (50)« оценивается »(next == int) и (int in range (50))», что довольно бессмысленно и всегда равно false.

Вместо этого вы могли бы попробовать

try: 
    how_much = int(next) 
    if not (0<=how_much<50): 
     print 'Too greedy' 
except ValueError: 
    dead("Man, learn how to type a number.") 
0

Использование попробовать .. кроме позволит вам убедиться, что введенное значение является внутр. # raise является держателем места для обработки не-ИНТ contition:

try: 
    next = int(raw_input("> ")) 
except ValueError: 
    # raise 

if not 0 <= next <= 50: 
    print 'Too greedy' 
2

Если вы хотите, чтобы «получить целочисленный вход в диапазоне», вам нужна две вещи:

если
  1. Check вход является int
  2. Проверьте, если он находится в вашем диапазоне

Проверьте, если входной является int

try/except будет совершенным здесь:

n = raw_input('> ') 
try: 
    n = int(n) 
except ValueError: 
    dead() # or what you want 

Почему это хорошо?
Потому что, если n - это int, у вас есть возможность конвертировать его в целое число, и если это не исключение, вы можете получить звонок, и вы можете позвонить в свою dead() funcion.

Проверьте, если он находится в вашем диапазоне

Если вы до этого момента это означает, что исключение, прежде чем он не был поднят и n был преобразован в целое число.

Так что вам просто нужно сделать:

if 0 <= n <= 50: 
    print 'You win' 
else: 
    print 'You lose' 

Не делать:

if n in range(50): 
    # ... 

Beacuse он будет строить список из 50 чисел за бесценок.

Примечания: не использовать next в качестве переменного, beacuse это будет тенью встроенного next()

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