«Иван Васильевич меняет профессию», экспрессию и время: классическая рецензия «Искусства кино»
75 лет исполнилось актрисе, народной артистке РФ Наталье Селезневой. Одна из самых заметных ее ролей была в фильме «Иван Васильевич меняет профессию», гайдаевской экранизации булгаковской пьесы «Иван Васильевич». Об этой образцовой эксцентрической комедии в 1974 году для «Искусства кино» писал критик Андрей Зоркий (ушел из жизни в 2006-м).
Итак, случилось еще одно несчастье. Еще одно литературное произведение известного писателя подверглось киноэкранизации.
Горестная картина! Плачет небо. Качаются на холодном ветру мокрые ветви деревьев. Прислонившись пылающим лбом к стеклу, по которому бьет осенний дождь, стоит опечаленный ценитель искусств и шепчет сокрушенно: «Ах, Иван Васильевич, Иван Васильевич! Что же это с тобой-то сделали?!» Зададимся и мы этим вопросом: а в самом деле, что же такое сделали с беззащитной булгаковской комедией на экране?
Вот, пискнув, дернулось, как резиновое, игрушечное, ухо стрельца. Вот на лестничной площадке огромного московского дома одуревший от ужаса, запутавшийся в своем царском одеянии среди детских колясочек, Иван Васильевич жалобно бибикает в клаксон педального автомобильчика. Вот время с грохотом сдвигает стены между XVI веком и двухкомнатной квартирой изобретателя Тимофеева, а на полосатеньких обоях, словно вобрав в себя дрожь этого глобального катаклизма, покачивается на гвоздике картина «Иван Грозный и сын его Иван». Да нет всего этого в пьесе Булгакова! Нет в 58 страницах булгаковской комедии и многих других эпизодов и сцен, с которыми столкнется зритель в ее экранном варианте.
Поэтому начнем с самого главного — с правомерности гайдаевского прочтения пьесы, с совпадения (или несовпадения) стилистики, комедийности и самого духа обоих произведений. Попробуем разобраться в том, потеряла или не потеряла на экране булгаковская пьеса? Надо ли нам плакать или — вместе со зрителем — смеяться?
Но прежде, для разминки, как в КВН, вот такая арифметическая задача. Из пункта А и из пункта В навстречу сатирической прозе Ильфа и Петрова вышли режиссер Швейцер и режиссер Гайдай. Каждый из них экранизировал по одному роману писателей, сняв по две киносерии. Спрашивается: чья экранизация лучше, точнее и ближе к романам? Миллион компетентных зрителей ответит — экранизация «Золотого теленка». Миллион столь же компетентных зрителей — экранизация «Двенадцати стульев». А третий миллион, быть может, скажет: «Вот если бы за Ильфа и Петрова взялся третий режиссер имярек!..» И вы знаете, все «три миллиона» по-своему правы.
Что же ближе прозе Ильфа и Петрова — сатирическая повествовательность или сатирическая гротескность, ирония или юмор, фантазия или изящный расчет? Все ближе. И на десяток точных прикосновений режиссера Швейцера к экранизируемой прозе приходится десяток точных прикосновений режиссера Гайдая (впрочем, у обоих были прикосновения и неточные, нечуткие).
И они разные — эти прикосновения! Их разнит индивидуальность художника, который становится новым, кинематографическим соавтором произведения. Естественно, что от каждой экранизации мы ожидаем точности, а скорее верности прочтения литературного оригинала. Но не следует забывать и о том, что прочтение — это тоже творчество, несущее в себе приметы и черты режиссерской индивидуальности.
«Иван Васильевич» на экране изменил координаты — действие переместилось из 30-х годов в 70-е.
Исчезли тесные московские дворики, раскрытые окна коммуналок, где «все на подоконниках лежат и рассказывают такую ерунду, которую рассказывать неудобно», исчезли патефоны, хрипящие радиорупоры, очереди за селедками, засаленные домовые книги, по-своему налаженное житье-бытье.
Конечно, вроде бы жалко терять благодатную для кинематографа фактуру, некогда облюбованную и Булгаковым, и Зощенко, и Ильфом вместе с Петровым. Однако очень важно помнить о том, что Булгаков отправлял на рандеву с опричниками в кошмарное историческое прошлое своих современников. В этом и заключалась острота и комедийная соль его произведения. Сегодня же самый мир булгаковских героев стал для нас достаточно отдаленным прошлым. Машине времени, стартуя в царство Грозного, пришлось бы совершить еще один сложный вираж, преодолеть еще один барьер минувшего. Прозрачно ясный булгаковский сюжет усложнился бы, зритель основательно бы запутался в том, кто и куда летит и, не дай бог, посчитал бы, что он имеет дело с историей, вовсе к нему непричастной.
Вот почему на экране возникла вся наша современная «лепота» (как выразился, озирая Москву с балкона, царь Иоанн Васильевич), вот почему взметнулись московские небоскребы, помчались современные лифты и милицейские машины.
Итак, «Иван Васильевич» меняет координаты и атрибуты времени. Процесс этот вовсе не механический. Он не сводится лишь к тому, что радиорупор заменяется телевизором, патефон — магнитофоном, горный дубняк — столичной, управдом — активистом ЖЭКа. Меняются некоторые смысловые координаты. Машина времени переносит в прошлое несколько иной экипаж. И на экране начинает вырисовываться несколько иное произведение.
Поначалу отметим сценарную выдумку, которая органично перенесла сюжет из 30-х годов в 70-е, которая остроумно и «железно» соединила булгаковскую историю и гайдаевскую интерпретацию.
В поисках сближения с нашим временем, в поисках остроумной отправной точки для повествования авторы сценария Бахнов и Гайдай «пристегнули» к сюжету «Ивана Васильевича» архипопулярного в зрительских массах Шурика, заставив именно его изобрести машину времени.
Кому был известен взлохмаченный изобретатель Тимофеев? Небольшому кругу читателей и театральных зрителей. А Шурика знали все! Студент и ночной сторож, герой той, помните, «кавказской кампании», один из популярных комедийных героев нашего времени, он, разумеется, мог изобрести и машину времени. И уже с этого забавного предположения началась новая кинокомедия.
Поставив столь неожиданный, броский, эксцентрический автограф на старой театральной рукописи, кинорежиссер Гайдай тем самым как бы заявляет свое право по-своему читать и интерпретировать текст, по-своему смеяться, перенося его на экран.
«Иван Васильевич» меняет… экспрессию.
Азбука гайдаевского киноязыка — эксцентрический трюк, каламбур, мгновенный аттракцион, фокус — стремительный, броский, парадоксальный.
Вот дантист Шпак склонился над пациентом. Мгновение — и словно отбойный молоток заработал во рту у бедняги. Ходят ходуном волосатые руки эскулапа, ходит ходуном зубоврачебное кресло — вибрация преувеличена в тысячу раз, извлечена наружу — в зрительный зал комедии.
Отчаянно мяукающего черного котенка засасывает с хвоста пылесос. Освободившись от дьявольского притяжения, котенок оголтело вскакивает на карниз и сваливается оттуда в аквариум с рыбками. Шурик пытается завязать в узел обезумевшего домашнего зверя — тот вдруг исчезает, странным образом превращаясь… в «кошачий узор» на полотенце.
Вот резкий и энергичный монтажный стык: с черно-белых кадров, с лежащего на полу после взрыва контуженного Шурика — на яркий цвет, на синее Черное море, на белоснежные корабли, на длинноногую Зиночку, поющую об ослепительной любви землян XX века, на вдохновенно созидающего свой очередной шедевр кинорежиссера Якина.
У Гайдая юмор задиристый, ярмарочно-звонкий. И естественно, что рождает он в зале точно такой же отзвук. На лучших, самых смешных сценах «Ивана Васильевича» у зрителя — помните чеховское определение — от хохота отскакивают все пуговицы на жилетке.
В одном из романов Чапека существовал герой, пальцы которого физически ощущали энергию, скрывающуюся в статике окружающих предметов. Кажется, тем же даром (только в комедийном плане) наделен Гайдай. Он взрывает статику с энтузиазмом и непреклонностью Шпака, поминутно включающего свою бормашину. Пластику обыденных бытовых движений режиссер энергично переводит в пластику эксцентриады.
Вот Жорж Милославский безуспешно пытается вскрыть сейф в квартире дантиста Шпака. Эта вполне бытовая процедура становится цирковым аттракционом: мелькают отмычки, руки, театральная физиономия жулика; каскадная музыка словно хохочет над неудачником, камера бойко осматривает интерьер, походя сравнивая прелестные формы античных мадонн и современных манекенщиц. Чисто гайдаевская киносценка.
Вот в царскую палату входит шведский посол со свитой. И тотчас начинается аттракцион — каскад поклонов, пританцовываний, реверансов, а музыка, смеясь, подсказывает: ведь это же «собачий вальс» фальшивых любезностей, смехотворных условностей парадного этикета.
Обращаясь к пьесе Булгакова, Гайдай отыскивает скрытые узлы движения, прощупывает паузы, «развинчивает» реплики и ремарки и, обнаружив в них колесики и винтики эксцентрического механизма, пускается в стремительный, лихорадочный, пестрый, вовсе не булгаковский бег.
Мчатся опричники, мчатся милиционеры, мчатся по лестницам Шурик и Иван Васильевич (их бег стилизован под пластику немых лент), мчится на черном киностудийном авто режиссер Якин с мимолетной спутницей жизни, мчатся Бунша и Милославский, мчатся санитары. В пьесе действие замкнуто в локальные ремарки: Бунша, кидаясь на стену, требует прекращения опыта; зловещий шум и набат; в окно влетает стрела; грохот в дверь, голос «Отворяй, собака!»; грохот; Милославский надевает кафтан; Бунша надевает царское облачение; дверь раскрывается, вбегают опричники и с ними дьяк. Остолбеневают. Гайдай на этой основе дает целый разворот комедийных событий, стремительно разматывает длинную ленту киноэксцентриады.
Кинематограф разламывает тесный коробок сцены — мы выходим на площадь перед Кремлем, видим опричников, суматошно идущих на штурм царской палаты. Постановщик искусно и смешно отыгрывает детали: сразу несколько стрел, пущенных «покойниками», как полагает поначалу жэковский активист, с визгом впиваются в стену над головой Бунши, пришпиливают его шляпу, и та, выразительно покачавшись, падает ему на голову.
Смешные, увлекательные кадры связаны, как всегда, с погоней. Неожиданно беглецы и опричники оказались рядышком, бок о бок на какой-то высоченной арке; раз! — Бунша и Милославский, перекрестясь, приготовились к отчаянному прыжку; два! — опричники, как горох, посыпались вниз; три! — Бунша и Милославский остались преспокойненько стоять на арке… И снова понеслись в карьер!
Вот снятый на самом общем плане пробег по галереям Кремля. Вдоль белых стен весело, мультипликацнонно мелькают красные фигурки опричников. Проносится погоня мимо Бунши, присевшего в изнеможении и чудом каким-то оказавшегося схожим с одной из церковных скульптур. Проносится погоня мимо Милославского, столь же изящно и скульптурно вписавшегося в кремлевский интерьер… Еще не успел смолкнуть хохот зрительного зала, а Бунша уже взлетел на колокольню, запутался в веревках, и загудели колокола, вызванивая малиново «Чижик-пыжик» и… «Подмосковные вечера».
Подобные эксцентрические аттракционы разматываются по всему полю картины. Они слагают самое сильное, самое смешное в гайдаевских лентах — их комедийную динамику, ритм. Здесь подлинная стихия гайдаевской комедийности.
Леонид Гайдай, на мой взгляд, не принадлежит к тем мастерам кинокомедии, которые как бы растворяются в материале, всякий раз заражаясь своеобразием литературных оригиналов. Напротив, заметьте, как сблизил на экране Гайдай столь разные произведения — «Двенадцать стульев» и «Ивана Васильевича». В кинематографическом контексте «Двенадцать стульев» И. Ильфа и Е. Петрова ближе к «Ивану Васильевичу» М. Булгакова, чем к «Золотому теленку», которого экранизировал М. Швейцер, ближе именно соавторством Гайдая.
Дело в том, что Гайдай любит и умеет снимать совершенно определенный, ясно очерченный тип кинокомедий. И для него снять фильм чисто «по-ильфовски» или чисто «по-булгаковски» так же неинтересно, а то и невозможно, как снять комедию «по-рязановски» пли «по-пырьевски». Вот почему, облюбовав литературный материал, режиссер семимильными шагами начинает двигаться от него к себе, к своему, гайдаевскому способу прочтения сценария, пьесы, книги…
Это вовсе не означает неизбежность удаления от литературного первоисточника. Оригинальность и индивидуальность прочтения может и приближать нас к оригиналу, открывая в нем новые, до поры до времени скрытые от глаз грани. И там, где гайдаевские краски точны, где гайдаевская эксцентрика безупречна — там в фильме столь же выразительный (только новый, кинематографический) язык булгаковского «Ивана Васильевича».
У Булгакова Иван Васильевич, перенесясь в наш век, поначалу «на чердаке орет», вовсе невидимый зрителю. У Гайдая же он, конечно, несется опрометью по лестницам дома, вскакивает в лифты, отворяет их «крестом животворящим», воюет половой щеткой, как царским посохом… И эта партитура действий, экспансивно развернутая на экране, подобно многим уже упоминавшимся мною эксцентрическим эпизодам, — прямое попадание в булгаковскую комедийную фантасмагоричность.
Такие прямые попадания — это всякий раз новые волны смеха в зале, это заметное увеличение общей массы смешного в комедии. В экранном «Иване Васильевиче» рядом с россыпью истинно комедийных разговорных сцен существует россыпь истинно комедийных немых эпизодов.
Выше говорилось о том, что решение авторов перенести исходное действие кинокомедии в сегодняшний день разумно и оправдано. Однако в этой переброске по-настоящему повезло лишь двум персонажам: Шурику и Ивану Васильевичу.
Шурик, став действующим лицом кинокомедии, пережил, пожалуй, самые удивительные приключения в своей жизни. Иван Васильевич встретился с бытовой техникой наших дней, и она предоставила ему много поводов для комедийно отыгрываемого изумления. Лифт и телевизор, магнитофон (включаемый, помните, несколько неожиданным образом) с песенкой Высоцкого, репинская репродукция и современный спортивный костюм — все это дало материал для новых остроумных блесток, украсивших киноповествование.
Но, увы, в сегодняшних эпизодах у Гайдая нет столь наблюдательного и иронического поводыря, как Булгаков. В подъезде высотного дома герои сатирической пьесы мельчают (разумеется, как комические персонажи), теряют социальные характеристики, становятся вполне ординарными персонажами ординарного киноводевиля. Бунша, лишившись даже своей скромной административной должности (а вместе с ней и «административного восторга»), глядится довольно бесцветным персонажем. Жорж Милославский смотрится всего лишь экзотическим жуликом, заглянувшим «на дело» из 30-х годов. На экране показана не среда, а компания. И неслучайно, что в огромном московском доме царит почти вакуумная пустота. В доме удивительно чисто и поразительно пусто — в нем словно бы вместе с лестницами и полами пропылесосили сатиру.
К счастью, эпизоды эти в кинокомедии носят экспозиционный характер. К счастью, очень скоро на современном горизонте появляется Иван Васильевич, и тотчас парадоксальность ситуаций начинает высекать живые, искры из персонажей. К счастью, Шурик без проволочек отправляет комедийных героев в прошлое, а там… там поправка на 30 лет, право же, не столь существенна.
Конечно же, самое смешное, истинно гайдаевское и, как это ни странно, истинно булгаковское в кинокомедии — это цепь приключений, разворачивающихся в прошлом. Здесь мир булгаковской сценической фантазии развернут кинематографически, остроумно передиктован в яркое эксцентрическое действо. Чего стоят — об этом мы уже говорили — пробеги по галереям Кремля опричников и «демонов», спасающихся от погони. Чего стоит отъезд опричников «на рать», когда гремит над конницей молодецкая, суровая и до чертиков смешная песня: «Кап, кап, кап. .. Из ясных глаз Маруси капают слезы на копье».
А великолепное царское застолье с махонькой кучкой «заморской» баклажанной икры на огромном блюде и леденящими душу домашними закусками! А появляющиеся в боярском собрании царь-Бунша и Жорж Милославский! А эстрадный номер гусляров, которых Милославский заставляет исполнять нечто темпераментно-магомаевское! А танцульки в царских хоромах!
…Спектр «исторических» приключений Бунши и Милославского, в общем-то, невелик: опасности и стремление порезвее драпануть от опасностей, искусы и желание послаще куснуть от всякого куска, будь то черная икра, сдобная царица или хотя бы даже державный престол. Из всего этого и слагается короткая жизнь наших отрицательных героев, которую они проживают искренне и простодушно, оставляя после себя ровное, и… пустое место.
Если Юрий Яковлев словно скучает, мается, играя там, в XX веке Буншу — назойливого зануду без определенных занятий, то в царских палатах он расправляет крылья. Его панический звонок в милицию на трепетном «разломе двух эпох» («не могу жить без милиции ни одной секунды!»), его смиренная подпись под царским указом: «и. о. царя Ивана Грозного» и жэковская печать, жирной кляксой украсившая благородный пергамент, его ужас перестраховщика и восторг новоиспеченного самодержца… В забредшем в XVI век жэковском активисте Бунше стародавние соблазны пропускаются через жалкие терзания его обывательского духа. И это очень смешно. А когда пышное застолье, да изрядная доза кардамонной, да близость царицы Марфы развязывают язык Бунше и заставляют его выразить классовую солидарность с крымским царем, мы понимаем: сатирический портрет обывателя написан, булгаковский злой комизм вернулся на экран под веселый перезвон гайдаевских шутовских колокольчиков.
Жорж Милославский (Леонид Куравлев), наоборот, против пьесы оказывается более принципиальным политиком, чем Бунша-Грозный, и ни в какую не хочет уступать шведам Кемь. Это новая и довольно изящно отредактированная черточка! Однако тонко и дальновидно направляя деятельность царя-Бунши, общего выражения их двойного портрета она не изменяет: Жорж Милославский в царских покоях ворует еще энергичнее и несравненно удачливее, чем в квартире дантиста Шпака.
Наконец, дьяк (Савелий Крамаров). В нем воплощена такая радость и полнота холуйского бытия, такая готовность отбивать лбом поклоны, такая гордость за царский пир и за царский гнев («был у нас один толмач-немчин, да мы его надысь в кипятке сварили»), что если Жорж Милославский плавает в XVI веке как рыба в воде, то Федя-дьяк млеет, как карась в сметане.
Короткое путешествие авторов кинокомедии по стогнам современности не обошлось без ощутимых потерь. Зато переброска с современного плацдарма в XVI век оказалась весьма остроумной и плодотворной.
Некоторые эпизоды фильма в этой части к тому же можно рассматривать как необычную эксцентрическую ретроспекцию — из прошлого в сегодняшний день. Вот почему, говоря о том, что «Иван Васильевич» меняет экспрессию, я имел в виду не только смену внешних выразительных средств.
Как и во многих эксцентрических кинокомедиях, в «Иване Васильевиче» не содержится прямого назидания, натужной, венчающей историю морали. Но, когда перед зрителями проходит пестрая вереница комических или гротесковых персонажей, мы узнаем в них (с улыбкой!) и нечто реальное, знакомое нам, увы, по жизни.
Так потеряла или не потеряла пьеса в экранизации? Поставив этот вопрос, я не стремлюсь к однозначному ответу на него. Просто я хотел напомнить и развить элементарную (как мне кажется) мысль: в искусстве экранизации (и, быть может, в особенности экранизации комедийной) художник всегда отражается в другом художнике, произведение отражается в другом произведении.
Текст Андрея Зоркого «Иван Васильевич меняет… экспрессию» был впервые опубликован в журнале «Искусство кино» (№1, 1974).
леонид гайдай
Поделиться
FacebookВконтактеTwitter
FacebookВконтактеTwitter
Ki-67 (MIB-1) экспрессия, иммуногистохимическое исследование (оценка пролиферативной активности по экспрессии Ki-67 (MIB-1); Ki-67 (MIB-1) by Immunohistochemistry, IHC)
Метод определения Гистологическое исследование биоптатов опухоли согласно гистологической классификации ВОЗ с окрашиванием гематоксилином-эозином. Иммуногистохимическое исследование индекса пролиферативной активности с применением моноклональных антител к Ki-67 (MIB-1) (пероксидазный и авидин-биотиновый методы).
Доступен выезд на дом
Онлайн-регистрация
Комплексное исследование биоптатов, включающее морфологическое описание и оценку пролиферативной активности клеток, которое используют в целях диагностики − определения биологического потенциала новообразований человека.
В современной онкоморфологии ведется поиск критериев, позволяющих верифицировать степень гистологической и биологической злокачественности с максимальной объективностью. Учитывая, что пролиферативная активность клеток опухолей человека коррелирует со степенью их гистологической и биологической злокачественности, в последние годы ИГХ-определение индекса пролиферации при исследовании экспрессии Ki-67 (MIB-1) является необходимым рутинным исследованием при онкологических заболеваниях.
Специфичным и оптимальным для широкого использования в патологоанатомической практике маркером пролиферации является антиген Ki-67. Ядерный антиген Кi-67 впервые описан Gerdes и соавторами в 1983 году, он состоит из двух полипептидных цепей с молекулярной массой 345 и 395 кДа. Это основная часть нуклеарного матрикса, в течение интерфазы ассоциированная с хромосомами фазы митоза. Ki-67−димерная молекула, имеющая тесную связь с 10-й хромосомой, конкретная роль этого протеина в процессе клеточного деления до сих пор точно не выяснена. Экспрессия Кi-67 позволяет выделить опухолевые клетки, находящиеся в активной фазе клеточного цикла, на всём его протяжении (G1-, S-, G2- и M-фазы). Кi-67 отсутствует только в G0-периоде. Активно пролиферирующие опухолевые клетки представляют собой «фракцию роста» новообразования. Пролиферативная активность является ведущим фактором как в механизме злокачественной трансформации клеток, так и в биологическом поведении уже возникших опухолей. Это одна из наиболее важных характеристик фенотипа опухоли, в значительной степени определяющая скорость роста новообразования, риск метастазирования, потенциальный ответ на лечебные мероприятия и исход онкологического заболевания.
Многие факторы, влияющие на течение и исход онкологических заболеваний, свое патогенетическое действие на опухоль опосредуют через изменение пролиферативной активности.Оценивать пролиферативную активность опухолевых клеток необходимо не только для определения биологических характеристик опухолей, но и для селективного подхода к выбору терапии.
Индекс пролиферативной активности в различных опухолях имеет разные значения, являясь при этом независимым прогностическим признаком, определяющим клиническое течение и прогноз заболевания. При Ki-67 менее 15% опухоль считается менее агрессивной, при показателе более 30% опухоль считается высоко агрессивной. При высоком уровне (выраженном в %) Ki-67 опухоль с более высокой вероятностью ответит на химиотерапевтическое лечение. При низком его уровне опухоль, например, молочной железы, при определённых условиях лучше отреагирует на гормонотерапию.
IC210: Типы и выражения III
IC210: Типы и выражения IIIВсе это выражение.
.. почти Почти все в программе C++ представляет собой выражение . Ан выражение — это текстовая часть исходного кода, которая может быть оценена как создать объект, который имеет тип и значение .Помните: Каждое выражение имеет тип и значение .
Арифметические выражения
Самые известные выражения — арифметические. Например, если к
представляет собой int
, которому присвоено значение 4,(k - 2)*7 // тип: int, значение: 14является выражением типа
int
и значением 14.Выражения присвоения
Один из примеров того, что менее очевидно является выражением:k = 5 // тип: int, значение: 5Здесь
k
снова является переменной типа int
.
Тип этого выражения — int
, а значение — 5. В общем 9Выражение присваивания 0004 имеет тот же тип, что и
присваиваемый объект, и то же значение, что и этот объект после
задание выполняется. Таким образом, как ни странно, если x
является
переменная типа double
(x = 3.4)*2.0 // тип: double, значение: 6.8, есть побочный эффектимеет смысл. В частности,
- Это выражение типа
удваивает
, и после его оценки оно имеет значение 6,8. - Выражение имеет побочный эффект ; то есть он изменяет значение переменной
x
на 3,4.
Менее очевидные выражения
Другой менее очевидный пример:Как мы видели в прошлой лекции,
cout
является объектом типа острейм
.- Выражение
cout << x
также имеет типostream
, а его значение равноcout
(например, умножая ноль на что-либо, вы все равно получаете ноль). - Однако там
является побочным эффектом для вычисления этого выражения; то есть,
x
выводится на экран!
Примечания. Значение выражения может быть определено во время выполнения.
Часто значение выражения не может быть определено пока программа не запустится. Например, посмотрите на код ниже:
инт к; цин >> к; cout
Каково значение выражения k+7
?
Ну, это зависит от того, что пользователь вводит для ввода . Это
что-то, что не может быть известно, пока программа не будет запущена.
Тип выражения определяется во время компиляции.
Однако тип выражения k+1
— это то, что мы
узнайте перед запуском программы: это int
. Большую часть времени
(особенно для подмножества C++, на котором мы сосредоточимся) тип выражение известно на этапе компиляции , т.е. при компиляции программы,
в отличие от его запуска. Из-за этого C++ называют «статически
типизированный" язык.
Что не является выражением?
В этот момент может показаться, что все является выражением, но это не так.- Заявление :
Что-нибудь с '; '(точка с запятой) в конце - оператор ,
не выражение. Таким образом, в то время как
k = 4
является выражением, используемым в(k=4)*3
будет оцениваться как 12, операторk = 4;
как строка кода, заканчивающаяся точкой с запятой, не является выражением. - Объявление переменной : Объявления переменных, что-то вроде
int k
например, не являются выражениями - независимо от того, ; есть.
Когда типы сталкиваются -- неявное преобразование типов
Все становится интереснее, когда выражения включают разные типы.В арифметических выражениях: повышение
Рассмотрим следующий код:двойной х = 3,3; интервал к = -2; // x*k : тип и значение?Каков тип и значение выражения
x*k
? Ответ (перетащите мышью):
// x*k -- тип: double, значение: -6,6Объяснение: C++ умеет умножать два объекта
int
и умеет
умножить два объекта double
, но он не знает, как умножать
один из каждого. Однако он понимает, что int
может быть преобразовал в , двойное
, и наоборот. Таким образом, он преобразует один
и выполняет умножение двух объектов одного типа. Но каким образом
должно идти?логический б = истина; символ с = 'а'; инт п = 1; двойной х = 2,1; // b+c : тип int // b+n : тип int // c+n : тип int // b+x : тип double // c+x : тип double // n+x : тип double
Для арифметики типы всегда преобразуются в том направлении, которое дает
В частности, направление следующее:
→ целое → двойнойИтак, в нашем примере выше
int
преобразуется (или продвигается)
к дублю, и операция выполняется над двумя дублями. Это не было бы
имеет почти такой же смысл наоборот, не так ли?
Еще несколько примеров справа:В выражениях присваивания: следует за типом назначенная переменная
Это неявное преобразование типов (неявное значение, что это происходит автоматически за кулисами, без вашего участия ничего непосредственно) происходит в других случаях. Единственный на нас прямо сейчас влияет назначений . Вы можете назначить объект одного тип к объекту другого типа, если C++ знает, как сделать преобразование. Если это не так, компилятор сообщит вам об этом. Так, например, рассмотрим следующий код:двойной х = 3,3; инт к;В приведенном выше выражении
k=x
относится к типу int
со значением 3 . C++ усекает double
s при преобразовании в интервал
с.Явное преобразование типов
Другой способ преобразования типов среди встроенных типов (int, double,
char, bool) должен следовать синтаксису языка C, который должен предварять
выражение, которое вы конвертируете с новым типом в круглых скобках. Для
Например, если k
— это int
, и вы хотите
преобразовать его в эквивалент двойной
, вы бы написали:
(двойной)k
который "приведет" k
к типу двойной
. C++ фактически добавляет C функциональности, т.е.
буквально C плюс некоторые другие вещи. Итак, C конструкции типа
все работает.
м
и n
равны int
с, n
больше. Мы хотели бы распечатать значение м/н
. Хорошо, cout << m/n << endl;
двойной
с. Чтобы явно преобразовать их в double
s
сначала мы напишем: cout << double(m)/double(n) << endl;
Быстрая проверка: Можете ли вы объяснить, какой тип и значение вы получаете с помощью следующего кода?
1 / двойной(2)Ответ (перетащите мышью): он имеет тип double и значение 0,5. Целое число 1 неявно повышается до типа double до того, как операция деления.
Явное преобразование может оказаться сложным позже, но на данном этапе просто, как , записывая имя нового типа, за которым следует старый объект в () .
Некоторые правила быстрого преобразования |
int → double : Это делает именно то, что вы ожидаете. |
double → int : это просто усекает значение, это означает, что все, что после десятичной точки, просто получает нарезанный. Вы можете попасть в беду, если двойное значение слишком большой. |
bool → int : true переходит в 1, false переходит в 0. |
int → bool : 0 переходит в false, все остальное идет к истинному; |
int → char : если int находится в диапазоне 0-127, значение char определяется таблицей ASCII; |
char → int : значение int определяется ASCII-таблица; |
Представление данных в компьютере
Биты и байты
Вспомните, что внутри компьютера все состоит из 0 и 1! (А бит просто значение 0/1. ) Но как все эти вещи могут - char
с, int
с, bool
с и double
s - быть представлено нулями и единицами? Наш
понимание типов будет действительно зависеть от способности ответить на эти
вопросы.
Память компьютера — это просто одна длинная последовательность битов.
Однако эти биты организованы в блоки по 8, называемые байта . Чтобы подчеркнуть, байт состоит из 8 бит. В
байт, мы можем представить числа от 0 до 255.Примечание: Мы не будем подробно рассматривать эту тему, так как ее охватывает SY110. Вы ожидали, что разберетесь в битах и байтах, двоично-десятичное и десятично-двоичное преобразование, и как ASCII table определяет сопоставление между символами и байтами. Что здесь в примечания - это всего лишь краткий обзор этого.
Мы настоятельно рекомендуем вам ознакомиться с классом на Цифровые данные из Сайт SY110. Вот ссылка на полную таблицу ASCII.
Представление
bool
s Тип bool
— это всего лишь способ интерпретации байта
память . Если все 8 бит байта равны нулю, интерпретация как логическое значение ложно
. В противном случае интерпретация bool правда
.Представляет
символов
с Тип char
- это просто , другой способ интерпретации байта.
памяти! Например, байт 01100001 интерпретируется как символ и
. Такая интерпретация байтов как символов называется
кодировка ASCII и эта таблица,
например, показывает вам все это. Интерпретация 01100001 как числа
в двоичном виде мы получаем число 97, и если вы посмотрите 97 в таблице,
вы увидите, что он соответствует символу a
. Мы уже видим одну из фундаментальных идей вычислительной техники, отличающуюся
типы объектов могут быть представлены путем обработки последовательностей 0 и 1
по-разному. Вот почему C++ должен отслеживать типы
объекты, поэтому он знает, как интерпретировать содержимое куска памяти
связанные с каждым объектом.
На самом деле, вы можете посмотреть на char
как просто небольшое целое число
(Я говорю маленький, потому что 8-бит позволяет нам только диапазон [0,255]). Этот
интерпретация в значительной степени говорит нам, чего ожидать от конверсий между char
с и int
с.
Арифметика на char
s .
Одна интересная особенность этого соответствия между символами и числами заключается в том, что
такие утверждения, как
каутиметь смысл.
- Глядя на таблицу ASCII, мы видим, что
'b'
соответствует числу 98, а'a'
соответствует номер 97. - Итак, C++ обрабатывает это как вычитание
int
задача 98 - 97, которая оценивается как 1. - Таким образом, тип и значение этого выражения — int и 1.
каутбудет выводить
101 и
Представляет
интервал
сТехнически int 5 может быть представлен как
00000000 00000000 00000000 00000101
. .. или это может быть представлено как
00000101 00000000 00000000 00000000
... в зависимости от того, что называется "порядком байтов" базовая машина. Это конкретное различие выходит за рамки охват этого курса, но вы столкнетесь с ним в последующих курсах CS/IT. курс.
Полный int
на вашем ПК состоит из 4 байтов или 32 бит, поэтому он
может представлять очень большие числа. Мы не собираемся вникать в
вопрос о том, как отрицательные числа представлены в двоичном формате. По сути int
выглядит как представление двоичного числа, которое мы только что
говорили, но в 32 битах.
Итак, int
5 представлен в компьютере как: 00000000 00000000 00000000 00000101
Представляет
двойной
с Двойной
занимает 8 байт или 64 бита. Формат более
сложна, однако, и мы не будем останавливаться на ней здесь, за исключением того, что она
представляет собой двоичную версию привычной научной нотации. 3.) Достаточно сказать, что двойной
1.0 есть
представлен следующими 64 битами:00000011 11111111 11111111 00000000 00000000 00000000 00000000 00000000
Проблемы
- Преобразование радианов в градусы, минуты и секунды. Это требует преобразования между типами! Посмотри, сможешь ли ты определить, где они происходят!
- Шифрование Ceasar Shift Код Ceasar Shift — это ранний метод зашифрованной связи. Эта программа реализует его для 4-буквенные сообщения. Это требует понимания оператора мода (%), и соответствие между символами, закодированными в ASCII, и числами.
- Калькулятор среднего балла
Знаете ли вы...
Документация Learning with Python 2nd Edition
2.1. Значения и типы данных
Значение — это одна из фундаментальных вещей — как буква или число — которыми манипулирует программа. Значения, которые мы видели до сих пор, равны 2 (значение результат, когда мы добавили 1 + 1), и «Hello, World!».
Эти значения относятся к разным типам данных : 2 является целым числом , и "Привет, мир!" это строка , так называемая, потому что она содержит строку буквы. Вы (и интерпретатор) можете идентифицировать строки, потому что они заключено в кавычки.
Оператор печати также работает для целых чисел.
>>> напечатать 4 4
Если вы не уверены, какой тип имеет значение, интерпретатор может указать ты.
>>> type("Привет, мир!") <тип 'строка'> >>> тип(17) <тип 'целое число'>
Неудивительно, что строки относятся к типу стр и целые принадлежат введите целое число . Менее очевидно, что числа с десятичной точкой принадлежат к типу называется с плавающей запятой , потому что эти числа представлены в формате, называемом с плавающей запятой .
>>> тип(3.2) <тип 'плавающий'>
Как насчет таких значений, как «17» и «3,2»? Они похожи на числа, но они заключены в кавычки, как строки.
>>> тип("17") <тип 'строка'> >>> тип("3.2") <тип 'строка'>
Это струны.
Строки в Python могут быть заключены либо в одинарные (‘), либо в двойные кавычки (""):
>>> type('Это строка.') <тип 'строка'> >>> type("И это тоже.") <тип 'строка'>
Строки с двойными кавычками могут содержать внутри одинарные кавычки, как в «борода Брюса», а строки в одинарных кавычках могут иметь двойные кавычки. внутри них, как в «Рыцарях, говорящих «Ни!»».
Когда вы вводите большое целое число, у вас может возникнуть соблазн использовать запятые между группы из трех цифр, например, 1 000 000. Это не допустимое целое число в Python, но легально:
>>> напечатать 1 000 000 1 0 0
Ну, это совсем не то, что мы ожидали! Python интерпретирует 1 000 000 как список из трех пунктов для печати. Так что не ставьте запятых в целые числа.
2.2. Переменные
Одной из самых мощных функций языка программирования является возможность управлять переменными . Переменная — это имя, которое ссылается на значение.
Оператор присваивания создает новые переменные и дает им значения:
>>> message = "Как дела, Док?" >>> n = 17 >>> пи = 3,14159
В этом примере выполняются три назначения. Первый присваивает строку «Что up, Doc?" в новую переменную с именем message. Вторая дает целое число 17 в n, а третий дает число с плавающей запятой 3,14159 в Пи.
Оператор присваивания , =, не следует путать со знаком равенства (хотя он использует тот же символ). Операторы присваивания связывают имя , слева от оператора со значением справа. Вот почему вы получите сообщение об ошибке, если введете:
>>> 17 = n
Обычный способ представить переменные на бумаге — написать имя со стрелкой. указывая на значение переменной. Такая цифра называется состоянием . диаграмма , потому что она показывает, в каком состоянии находится каждая из переменных (подумайте об этом как состояние ума переменной). На этой диаграмме показан результат операторы присваивания:
Оператор печати также работает с переменными.
>>> распечатать сообщение Как дела, док? >>> напечатать п 17 >>> напечатать пи 3.14159
В каждом случае результатом является значение переменной. Переменные также имеют виды; опять же, мы можем спросить переводчика, каковы они.
>>> тип(сообщение) <тип 'строка'> >>> тип(н) <тип 'целое число'> >>> тип (пи) <тип 'плавающий'>
Тип переменной — это тип значения, на которое она ссылается.
2.3. Имена переменных и ключевые слова
Программисты обычно выбирают для своих переменных осмысленные имена — они документируют, для чего используется переменная.
Имена переменных могут быть произвольно длинными. Они могут содержать как буквы, так и цифры, но они должны начинаться с буквы. Хотя законно использовать заглавные буквы, по соглашению мы этого не делаем. Если вы это сделаете, помните тот случай имеет значение. Брюс и Брюс - разные переменные.
В имени может использоваться символ подчеркивания (_). Он часто используется в названия, состоящие из нескольких слов, например my_name или price_of_tea_in_china.
Если вы дадите переменной недопустимое имя, вы получите синтаксическую ошибку:
>>> 76trombones = "большой парад" SyntaxError: неверный синтаксис >>> больше$ = 1000000 SyntaxError: неверный синтаксис >>> класс = "Информатика 101" SyntaxError: неверный синтаксис
76trombones незаконен, потому что он не начинается с буквы. больше$ является недопустимым, поскольку содержит недопустимый символ, знак доллара. Но что не так с классом?
Оказывается, этот класс является одним из Python ключевых слов . Ключевые слова определяют правила и структура языка, и их нельзя использовать в качестве имен переменных.
Python имеет тридцать одно ключевое слово:
и | как | утверждать | перерыв | класс | продолжить |
по умолчанию | дел | Элиф | еще | кроме | исполнитель |
наконец | для | из | глобальный | если | импорт |
в | это | лямбда | не | или | пройти |
печать | поднять | возврат | попробуй | , а | с |
выход |
Возможно, вы захотите держать этот список под рукой. Если переводчик жалуется на один ваших имен переменных, и вы не знаете почему, посмотрите, есть ли они в этом списке.
2.5. Вычисление выражений
Выражение представляет собой комбинацию значений, переменных и операторов. Если вы введите выражение в командной строке, интерпретатор вычислит его и отображает результат:
>>> 1 + 1 2
вычисление выражения выдает значение, поэтому выражения может появляться в правой части операторов присваивания. Значение по всем само по себе является простым выражением, как и переменная.
>>> 17 17 >>> х 2
Как ни странно, вычисление выражения — это не совсем то же самое, что печать ценить.
>>> message = "Как дела, Док?" >>> сообщение "Как дела, док?" >>> распечатать сообщение Как дела, док?
Когда оболочка Python отображает значение выражения, она использует тот же формат, который вы использовали бы для ввода значения. В случае строк это означает, что он включает кавычки. Но оператор печати печатает значение выражение, которое в данном случае является содержимым строки.
В скрипте выражение само по себе является допустимым утверждением, но оно не Делать что-нибудь. Скрипт
17 3.2 "Привет, мир!" 1 + 1
вообще не выводит. Как бы вы изменили сценарий для отображения значения этих четырех выражений?
2.6. Операторы и операнды
Операторы — это специальные символы, которые представляют такие вычисления, как сложение и умножение. Используемые оператором значения называются операндами .
Ниже приведены все допустимые выражения Python, смысл которых более или менее ясно:
20+32 час-1 час*60+минута минута/60 5**2 (5+9)*(15-7)
Символы +, - и /, а также использование скобок для группировки, означают в Python то, что они означают в математике. Звездочка (*) означает знак умножения, а ** — знак возведения в степень.
Когда вместо операнда появляется имя переменной, оно заменяется на его значение до выполнения операции.
Сложение, вычитание, умножение и возведение в степень делают то, что вы ожидать, но вы можете быть удивлены разделением. Следующая операция имеет неожиданный результат:
>>> минута = 59 >>> минут/60 0
Значение минуты равно 59, а 59, деленное на 60, равно 0,98333, а не 0. причина несоответствия в том, что Python выполняет целочисленное деление .
Если оба операнда являются целыми числами, результат также должен быть целым числом, и по соглашению целочисленное деление всегда округляет до вниз , даже в таких случаях где следующее целое число очень близко.
Возможным решением этой проблемы является вычисление процента, а не дробь:
>>> минут*100/60 98
Опять результат округляется в меньшую сторону, но хоть теперь ответ примерно правильный. Другой альтернативой является использование деления с плавающей запятой. мы увидим в глава 4, как преобразовать целые значения и переменные в числа с плавающей запятой ценности.
2.7. Порядок операций
Если в выражении присутствует более одного оператора, порядок вычисления зависит от правил приоритета . Python следует тому же приоритету правила для своих математических операторов, которые делает математика. Аббревиатура ПЕМДАС это полезный способ запомнить порядок операций:
- P арензы имеют наивысший приоритет и могут использоваться для форсирования выражение для оценки в том порядке, в котором вы хотите. Поскольку выражения в скобки оцениваются первыми, 2 * (3-1) равно 4, а (1+1)**(5-2) равно 8. Вы также можете использовать круглые скобки, чтобы упростить чтение выражения, как в (минуты * 100) / 60, хотя это не меняет результат.
- E Возведение в степень имеет следующий наивысший приоритет, поэтому 2**1+1 равно 3 и не 4, а 3*1**3 равно 3, а не 27.
- M умножение и D ivision имеют одинаковый приоритет, т.е. выше, чем A дополнение и S удаление, которые также имеют то же самое приоритет. Таким образом, 2 * 3-1 дает 5, а не 4, а 2/3-1 равно -1, а не 1. (помните, что при целочисленном делении 2/3=0).
- Операторы с одинаковым приоритетом оцениваются слева направо. Итак, в выражение minute*100/60, сначала происходит умножение, что дает 5900/60, что, в свою очередь, дает 98. Если бы операции оценивались из справа налево, результатом было бы 59*1, то есть 59, то есть неправильный.
2.8. Операции со строками
В общем, вы не можете выполнять математические операции со строками, даже если строки выглядят как числа. Следующее является незаконным (при условии, что сообщение имеет строку типа):
сообщение-1 "Привет"/123 сообщение*"Привет" "15"+2
Интересно, что оператор + работает со строками, хотя и не делать именно то, что вы могли бы ожидать. Для строк оператор + представляет конкатенация , что означает объединение двух операндов путем их связывания концы с концами. Например:
фрукты = "банан" Baked_good = "ореховый хлеб" распечатать фрукты + запеченное_хорошее
Результатом этой программы является бананово-ореховый хлеб. Пробел перед словом гайка является частью струны и необходима для создания пространства между объединенные строки.
Оператор * также работает со строками; он выполняет повторение. Например, «Веселье»*3 — это «Веселье, веселье». Один из операндов должен быть строкой; в другое должно быть целым числом.
С одной стороны, такая интерпретация + и * имеет смысл по аналогии с сложение и умножение. Так как 4*3 эквивалентно 4+4+4, мы ожидайте, что "Веселье"*3 будет таким же, как "Веселье"+"Веселье"+"Веселье", и это так. На с другой стороны, существует важный способ, которым конкатенация строк и повторение отличается от целочисленного сложения и умножения. Не могли бы вы подумайте о свойстве, что сложение и умножение имеют эту строку конкатенация и повторение не делают?
2.9. Вход
В Python есть две встроенные функции для получения ввода с клавиатуры:
n = raw_input("Пожалуйста, введите ваше имя: ") напечатать п n = input("Введите числовое выражение:") напечатать п
Пример запуска этого скрипта будет выглядеть примерно так:
$ python tryinput. py Пожалуйста, введите ваше имя: Артур, король бриттов Артур, король бриттов Введите числовое выражение: 7 * 3 21
Каждая из этих функций позволяет выдать подсказку функции между скобки.
2.10. Композиция
До сих пор мы рассматривали элементы программы — переменные, выражения, и заявления — по отдельности, не говоря о том, как их сочетать.
Одной из наиболее полезных особенностей языков программирования является их способность возьмите небольшие строительные блоки и составьте из них . Например, мы знаем, как добавляем цифры и умеем печатать; оказывается, мы можем делать и то, и другое одновременно время:
>>> напечатать 17 + 3 20
На самом деле добавление должно произойти до печати, поэтому действия на самом деле происходят не одновременно. Дело в том, что любое выражение включая числа, строки и переменные, могут использоваться внутри оператора печати. Вы уже видели пример этого:
print "Количество минут с полуночи: ", час*60+минута
Вы также можете помещать произвольные выражения в правую часть присваивания выписка:
процент = (минута * 100) / 60
Сейчас эта способность может показаться не впечатляющей, но вы увидите другие примеры, когда композиция позволяет четко и понятно выражать сложные вычисления. кратко.
Предупреждение. Существуют ограничения на использование определенных выражений. Для Например, левая часть оператора присваивания должна быть имя переменной , а не выражение. Итак, незаконно следующее: минута+1 = час.
2.12. Глоссарий
- оператор присваивания
- = оператор присваивания Python, который не следует путать с математическим оператором сравнения, использующим тот же символ.
- оператор присваивания
Оператор, присваивающий значение имени (переменной). Слева от оператор присваивания = является именем. Справа от оператор присваивания — это выражение, которое оценивается Python интерпретатор, а затем присвоено имя. Разница между левая и правая части оператора присваивания часто сбивает с толку новых программистов. В следующем задании:
н = н + 1
n играет совершенно разную роль по обе стороны от =. На справа это значение и составляет часть выражения , которое будет быть оценен интерпретатором Python перед тем, как присвоить его имени слева.
- Информация в программе, предназначенная для других программистов (или кого-либо другого). чтение исходного кода) и не влияет на выполнение программа.
- состав
- Возможность объединять простые выражения и операторы в составные операторы и выражения для представления сложных вычислений кратко.
- объединить
- Чтобы соединить две строки встык.
- тип данных
- Набор значений. Тип значения определяет, как его можно использовать в выражения. До сих пор типы, которые вы видели, были целыми числами (тип int), числа с плавающей запятой (тип float) и строки (тип ул).
- оценить
- Чтобы упростить выражение, выполнив операции, чтобы дают одно значение.
- выражение
- Комбинация переменных, операторов и значений, представляющая единственное значение результата.
- поплавок
- Тип данных Python, который хранит числа с плавающей запятой . Числа с плавающей запятой хранятся внутри в двух частях: , базовая и показатель степени . При печати в стандартном формате они выглядят как десятичные числа. Остерегайтесь ошибок округления при использовании чисел с плавающей запятой. и помните, что это только приблизительные значения.
- между
- Тип данных Python, содержащий положительные и отрицательные целые числа.
- целочисленное деление
- Операция деления одного целого числа на другое с получением целого числа. Целочисленное деление дает только целое число раз, которое числитель делится на знаменатель и отбрасывает любой остаток.
- ключевое слово
- Зарезервированное слово, используемое компилятором для разбора программы; ты нельзя использовать ключевые слова вроде if, def и while в качестве переменной имена.
- операнд
- Одно из значений, с которыми работает оператор.
- оператор
- Специальный символ, представляющий простое вычисление, такое как сложение, умножение или конкатенация строк.
- правила приоритета
- Набор правил, регулирующих порядок, в котором выражения, включающие оцениваются несколько операторов и операндов.
- диаграмма состояний
- Графическое представление набора переменных и значений для которые они ссылаются.
- выписка
- Инструкция, которую может выполнить интерпретатор Python. Примеры Операторы включают оператор присваивания и оператор печати.
- ул
- Тип данных Python, содержащий строку символов.
- значение
- Число или строка (или другие элементы, которые будут названы позже), которые можно хранится в переменной или вычисляется в выражении.
- переменная
- Имя, ссылающееся на значение.
- имя переменной
- Имя переменной. Имена переменных в Python состоят из последовательность букв (a..z, A..Z и _) и цифр (0..9), которая начинается с письмом. В передовой практике программирования имена переменных должны быть выбраны так, чтобы они описывали их использование в программе, делая программа самодокументирование .
2.13. Упражнения
Запишите, что происходит, когда вы печатаете оператор присваивания:
>>> вывести n = 7
Как насчет этого?
>>> напечатать 7 + 5
Или это?
>>> print 5. 2, "это", 4 - 2, "это", 5/2.0
Можете ли вы придумать общее правило для того, что может следовать за печатью? заявление? Что возвращает оператор печати?
Возьми предложение: Вся работа и отсутствие развлечений делают Джека скучным мальчиком. Сохраните каждое слово в отдельной переменной, затем распечатайте предложение на одну строку с помощью печати.
Добавьте скобки к выражению 6 * 1 - 2, чтобы изменить его значение от 4 до -6.
Поместите комментарий перед строкой кода, которая ранее работала, и запишите, что происходит, когда вы перезапускаете программу.
Разница между input и raw_input в том, что input оценивает входную строку, а raw_input — нет. Попробуйте следующее в интерпретаторе и запишите, что происходит:
>>> х = ввод() 3.14 >>> тип(х)
>>> х = raw_input() 3.14 >>> тип(х)
>>> х = ввод() «Рыцари, которые говорят «ни!» >>> х
Что произойдет, если вы попробуете пример выше без кавычек?
>>> х = ввод() Рыцари, говорящие «ни!» >>> х
>>> х = raw_input() «Рыцари, которые говорят «ни!» >>> х
Опишите и объясните каждый результат.