научиться питону

по какой-то причине, когда игра достигает золотой комнаты, она не работает правильно. когда я ввожу любое число, я получаю сообщение смерти «человек, научись вводить число»,

благодаря

from sys import exit def gold_room(): print 'this room is full of gold, how much do you take?' next = raw_input('> ') if '0' in next or '1' in next: how_much = int(next) else: dead('man, learn how to type a number') if how_much < 50: print 'nice! your not too greedy. you win!' exit(0) else: dead('you greedy bastard!') def bear_room(): print 'there is a bear here.' print 'the bear has a bunch of honey' print 'the fat bear is in fromt of another door' print 'how are you going to move the bear?' bear_moved = False while True: next = raw_input('> ') if next == 'take honey': dead('the bear looks at you then pimp slaps you in the face') elif next == 'taunt bear' and not bear_moved: print 'the bear has moved from the door now. you can go through.' bear_moved = True elif next == 'taunt bear' and bear_moved: dead('the bear gets pissed off and chews your crotch off') elif next == 'open door' and bear_moved: gold_room() else: print 'i have no idea what that means.' def bolofumps_room(): print 'here you see the great evil bolofump' print 'he, it whatever stares at you and you go insane' print 'do you flee for your life or eat your head?' next = raw_input('> ') if 'flee' in next: start() elif 'head' in next: dead('well, that was tasty!') else: bolofumps_room() def dead(why): print why, 'good job!' exit(0) def start(): print 'you are in a dark room' print 'there is a door to your left and right' print 'which one do you take?' next = raw_input('> ') if next == 'left': bear_room() elif next == 'right': bolofumps_room() else: dead('you stumble around the room until you starve to death') start() 

EDIT: набрав одно произведение, но 2 не

  • Есть ли разница между «== False» и «is not» при проверке пустой строки?
  • Как сбросить курсор в начало той же строки в Python
  • python input () не работает как ожидалось
  • Как вы НЕ автоматически разыгрываете db.ReferenceProperty в Google App Engine?
  • Как преобразовать строку, которая уже выглядит как список в список?
  • В Python, как получить текущий кадр?
  • Как создать фиксацию и нажать на репо с GitHub API v3?
  • Как удалить определенные строки из списка
  • 6 Solutions collect form web for “научиться питону”

    Вы делаете это в gold_room :

     next = raw_input('> ') if '0' in next or '1' in next: how_much = int(next) else: dead('man, learn how to type a number') 

    он проверяет, только если '0' in next or '1' in next , так что неудивительно, что «2» не работает, не так ли?

    То, что вы хотите, идет по этим линиям

     next = raw_input('> ') try: how_much = int(next) except ValueError: dead('man, learn how to type a number') 

    Выполнение этого без исключений также возможно, но, пожалуйста, имейте в виду, что избегать чего-то важного и фундаментального, поскольку исключения – это действительно плохая идея. Я надеюсь, что книга, по крайней мере, сделает это понятной позже.

    В любом случае, мы знаем, что int принимает только цифры, поэтому мы просто проверяем это:

     if next.isdigit(): how_much = int(next) 

    Если вы рассмотрите то, что вы должны знать в данный момент в учебнике, которые состоят из

    • аргументы анализа
    • чтение пользовательских входов
    • используя if / loop / while,
    • функции,
    • Распечатать
    • список и его конкретные функции

    вы не можете использовать магические функции, такие как ловушки и использование «isdigit ()».

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

    То, о чем я думал, мое определение числа будет «строка, содержащая только символы от 0 до 9». Этого достаточно для выполнения упражнения.

    Таким образом, мой путь состоял в том, чтобы удалить все цифры из ввода и проверить, закончилось ли оно пустым. Если это так, это int, иначе, если остались символы, это не так.

     def remove_all_occurences(char_list, item): value = "%d" % item # convert to string while char_list.count(value) != 0: char_list.remove(value) return char_list def is_int(input): """Personnal function to test if something is an int""" # The sort separates all the characters of the list characters_list = sorted(input) for num in range(0,10): characters_list = remove_all_occurences(characters_list, num) return len(characters_list) == 0 

    next – это встроенная функция Python, поэтому вы захотите избежать именования переменных после нее … Не может быть причиной вашей проблемы, но попробуйте изменить имя этой переменной.

    Мое решение для числа Extra Credit проверяет, что символы ввода были целыми числами, такими как cladmi, но просматривает каждый символ, чтобы увидеть, является ли это целым числом (с помощью, возможно, слишком тупой логической операции – проще просто проверить, находится ли он в '123456789' ), записывает логическое значение в список, затем переводит этот список с оператором и, возвращая True если все символы включены. Я новичок во всем этом. Я думал, что это довольно роман, используя только то, что мы узнали до сих пор, и может быть полезно, если кто-то еще застрял в проблеме Neil:

     def is_integer(input): bool_list = [] # to hold the b truth = True for i in input: # tests if i is an integer, records the boolean in bool_list bool_list.append(i in str(range(0, 10)) and i != " " and i != ",") for t in bool_list: truth = truth and t # 'adds' each boolean in bool_list return truth # True if all are integers, False if not. 

    Я лично сделал это в функции gold_room. Это поможет вам в любом диапазоне. Надеюсь, это не просрочка.

    element = [] для i в диапазоне (0, 61): elements.append (i) next = int (raw_input (">")), если следующий в элементах: how_much = int (next) else:

    Я потратил несколько дней на размышления о том, как решить эту проблему для дополнительного кредита. Я прочитал две разные вещи, которые могли бы решить это для меня: исключение и isdigit. Сначала я решил разобраться, как это понять, не изучая ничего нового и просто используя то, что мы рассмотрели в тот момент в книге, и информацию, которую я мог бы выжать из pydoc о int. Я придумал решение, которое связано с огромным запутанным беспорядком списков, циклов, булевых вещей и бла-бла-бла, и это закончилось тем, что оно составило 60 строк и абсолютная головная боль. Я подумал про себя, что бы Зэд сказал об этом коде, если бы посмотрел на него и сравнил его с тем, что я в конечном итоге закончил. Я думаю, что хорошо, что несколько человек здесь, и, может быть, я включу себя, смогли придумать сложные, изобретательные и творческие способы обойти эту проблему, потому что решение проблем, очевидно, будет для нас необходимым навыком, однако , этот большой беспорядок кода в сравнении с тем, что я сейчас считаю, это то, к чему он стремился, – это не проблема. Как вы думаете, он намерен вас тратить кучу времени на написание что-то уродливое и трудно следовать? или, основываясь на материалах, которые мы слышали от него, вы думаете, что он предпочел бы, чтобы вы просто искали способ сделать это аккуратным и аккуратным способом с 3 или 4 строками очень простого легко читаемого кода? Я доволен этим:

     def gold_room(): print "This room is full of gold! How much do you take?" try: next = float(raw_input(">")) except ValueError: dead("Man, learn to type a number.") if (next) < 50: print "Nice, you're not greedy, you win!" exit(0) elif(next) >= 50: dead("You greedy bastard!") 

    В нем все работает, и это не испортит. Просто изучите новую вещь самостоятельно.

    Python - лучший язык программирования в мире.