Обмен значений двух переменных
Данная программа принимает от пользователя два значения и записывает каждое из них в отдельную переменную. Затем она меняет местами значения этих переменных без ввода временной переменной.
Решение задачи
- Пользователь вводит два значения, которые записываются в две разные переменные.
- Значения двух переменных складываются и результат сложения записывается в первую переменную.
- Далее из первой переменной вычитается вторая переменная и результат записывается во вторую переменную.
- Затем из первой переменной вычитаем вторую (с уже обновленным значением) и записываем полученный результат в первую переменную.
- Выводим полученные значения.
- Конец.
Исходный код программы
Ниже приведен исходный код программы по замене значений двух переменных без использования третьей переменной. Далее также будет приведен результат работы этого кода.
a = int(input("Введите значение первой переменной: ")) b = int(input("Введите значение второй переменной: ")) a = a + b b = a - b a = a - b print("a это:", a, " b это:", b)
Объяснение работы программы
- Пользователь вводит значение двух переменных и они записываются в переменные а и b .
- В переменную а записывается сумма а и b .
- В переменную b записывается разность переменной а (в которой сейчас находится сумма первоначальных значений a и b ) и переменной b . Таким образом первоначально введенное значение переменой a перешло в переменную b .
- Теперь вычитаем из переменной a (где сейчас по-прежнему находится сумма первоначально введенных величин) текущее значение переменной b (которое первоначально было записано в переменную a ). Таким образом в переменной a остается только значение, которое в начале программы было записано в переменную b .
- И далее выводим полученные значения на экран.
Результаты работы программы
Case 1 Введите значение первой переменной: 3 Введите значение второй переменной: 5 a это: 5 b это: 3 Case 2 Введите значение первой переменной: 56 Введите значение второй переменной: 25 a это: 25 b это: 56
Примечание переводчика
Все что было описано выше (в пунктах 2, 3, 4), в языке Python можно сделать в одну строчку. И это одно из основных достоинств этого языка программирования.
a=int(input("Введите значение первой переменной: ")) b=int(input("Введите значение второй переменной: ")) a, b = b, a # собственно здесь и происходит обмен значениями print("a это:",a," b это:",b)
Обмен значений двух переменных
Сегодня мы разберем три простых алгоритма обмена значениями двух переменных.
Обмен значений двух переменных через третью
В этом случае для временного хранения значения одной из переменных мы будем использовать временную третью переменную.
a = 5 b = 7 t = a a = b b = t print(a, b)
Для начала значение переменной a мы поместим в третью переменную t. Теперь когда у нас есть копия данных переменной a поместим в нее значение переменной b. После того, как мы перенесли значение переменной b, поместим в нее хранившееся в переменной t значение переменной a. Тем самым мы завершили обмен значениями у переменных a и b.
Обмен значений двух переменных путем математических вычислений
a = 5 b = 7 a = a + b b = a - b a = a - b print(a, b)
Тут мы в переменную a записываем сумму значений для переменной a и b (5 + 7 = 12). Затем в переменную b записываем разность значений переменных a и b (12 – 7 = 5), тем самым в переменной b остается значение переменной a. И последним действием записываем в переменную a так же разность переменных a и b (12 – 5 = 7). Только в этом случае, значение переменной b изменилось с его исходного значение 7, на новое 5. Таким образом в переменной a оказывается исходное значение переменной b.
Обмен значений двух переменных через распаковку
a = 5 b = 7 a, b = b, a print(a, b)
Данный способ обмена значениями подходит только для языка программирования Python. Значения справа от оператора присваивания, по порядку, распаковываются в переменные находящиеся слева. Таким образом значение переменной b попадает в переменную a, а значение переменной a в переменную b.
Обмен значениями переменных в Питоне
Забавно иногда открывать для себя лаконичные способы делать что-то в синтаксисе нового языка. Сегодня возникла нужда поменять значения двух переменных, и я подумал, что традиционный способ:
temp = x x = y y = temp
. слишком длинен. Не может быть, чтобы в Питоне не было чего-нибудь покороче.
В Питоне есть тип данных, который называется «tuple» (и который в руском языке должен называться «кортеж» — слово, возможно знакомое тем, кто изучал в институте высшую математику и что-то помнит из тех времен). По сути он представляет собой пачку любых значений в определенном порядке, с которой можно работать, как с единым целым, например в функцию передать:
x = (1, 'abc', 3) # tuple some_func(x)
С этими кортежами связана интересная особенность оператора присваивания. Он может автоматически распаковывать и запаковывать несколько значений в кортежи и обратно:
x, y, z = (1, 2, 3) # x = 1, y = 2, z = 3 t = 1, 2, 3 # t = (1, 2, 3)
Вот это мне и приглянулось для обмена значениями. Выглядит, по-моему, просто чудесно:
x, y = y, x
Комментарии: 20
Homo-Adminus
Насколько я помню, в перле всегда была такая возможность 🙂
($x, $y) = ($y, $x); Очень часто еще используют аналогичные схемы для заполнения набора переменных значениями из кусочков строки:
($x, $y, $x) = split /какой-нить разделитель/;
а как насчет массивов? 🙂
в перле очень похож обме на листы:
($x, $y) = ($y, $x);
Homo-Adminus
Осталось еще, чтобы ПХПшники прибежали и начали свои варианты предлагать 🙂
А потом можно будет организовать проект по поиску самых красивых/лаконичных/етс методов обмена значениями переменных.
Я буду за ПХПшника 🙂 list($a, $b) = array($b, $a);
Кстати, насчёт ПХПшников. Я показал своим коллегам эту возможность и они тут же ответили мне:
list($b, $a) = array($a, $b); Это просто ужасно! =) Кстати, вот приём на Python’e, до которого я сам дошёл. cursor.fetchall() возвращает словарь. В моём случае он выглядел так: нужно было получить список [«www.somesite.com», «www.ya.ru», «www.rambler.ru»]
вот строчка из программы: return [link[«ref_link»] for link in cur.fetchall()]
2MkDir
я вот как-то очень сильно не понимаю, как в питоне можно создать словарь c несколькими значениями под одним ключом.
>>> a = ; >>> a >>>
можно это как-то разъяснить?
кроме того for link in <. >будет перебирать ключи словаря. ключ словаря в данном случае — строка. потом с этой строкой сделать сделать link[«ref_link»] — никак нельзя, потому как «string indices must be integers».
Есть универсальный для всех языков метод через xor 🙂 a ^= b
b ^= a
a ^= b Описание:
http://wikisource.org/wiki/XOR_swap_algorithm
fetchall() всегда возвращает список (точнее кортеж). В зависимости от настройки это либо список словарей, либо список списков.
Т.е. не
а
(, < “ref_link”: “www.ya.ru”>, < “ref_link”: “www.rambler.ru”>)
Причем это поведение не по умолчанию, а по умолчанию fetchall() возвращает список списка:
(( “www.somesite.com”, ), ( “ref_link”: “www.ya.ru”, ), ( “ref_link”: “www.rambler.ru”, ))
наблюдатель
2Merle
А для строк? или вообще для нецелочисленных 😉
2наблюдатель
Не вижу проблемы. Строка — такая же последовательность 0 и 1, которую также можно несколько раз xor.
Осталось еще, чтобы ПХПшники прибежали и начали свои варианты предлагать 🙂
А можем и предложить. И покрасивее!
$a = $b + ($b=$a)*0;
Прошу заметить, что ничего не надо «автоматически распаковывать и запаковывать».
наблюдатель
2Merle
Это не меняет сути — метод универсален только для целочисленных типов. Возьмите float’ы, object’ы или язык/тип, где строка является последовательностью символов, а не байтов. Метод работать не будет (а ведь именно универсальность Вы подчеркивали).
2наблюдатель
Вы очень серьезно восприняли мою шутку об универсальности.
🙂 данный метод я привел скорее в качестве забавного и универсального на низком уровне примера.
понятно, что с его помощью можно реализовать и посимвольный обмен строк. Криво, но можно.
Но в общем-то использование этого метода в 99% задач неоправдано. В той же статье на Википедии на которую я давал ссылку написано что «However on modern (desktop) CPUs, the XOR technique is considerably slower than using a temporary variable to do swapping.»
А можем и предложить. И покрасивее! $a = $b + ($b=$a)*0;
Прошу заметить, что ничего не надо “автоматически распаковывать и запаковывать”.
Красиво, но не умеет строки 🙂
Предлагаю альтернативу: $a = @$b . (($b = a) && 0);
$a = @$b . (($b = a) ? » : »);
Поменять значения переменных между собой
Во всех задачах данного раздела нельзя использовать стандарт функции и дополнительные модули. Во всех функциях необходимо реализовать пользовательский алгоритм.
Задача:
Описать процедуру Swap(X, Y), меняющую содержимое переменных X и Y (X и Y — вещественные параметры, являющиеся одновременно входными и выходными). С ее помощью для данных переменных A, B, C, D последовательно поменять
содержимое следующих пар: A и B, C и D, B и C и вывести новые значения A, B, C, D.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Поменять соседние пары символов между собой
Новичок в python. Пишу прогу которая меняет соседние пары символов между собой, но нужно создать.
Поменять значения переменных местами
a = 10 b = 25 c = 12 d = 100 Необходимо поменять значение переменных местами, т.е., используя.
Поменять местами значения двух переменных (через деструктирующее присваивание)
Поменять местами значения двух переменных (через деструктирующее присваивание) на питоне .
Поменять в каждом ряду между собой максимальный и минимальный элемент
ну оочень нужна помощь((( нужно создать текстовый фаил содержащий двумерный массив(лист в листе).
![]()
![]()
35346 / 19946 / 4179
Регистрация: 12.02.2012
Сообщений: 33,093
Записей в блоге: 13
sofiadhi, это точно в Питоне?
4459 / 3212 / 1125
Регистрация: 21.03.2016
Сообщений: 7,949
1 2 3 4 5 6 7 8 9
def swap(X, Y): global a global b a,b = Y, X a = 10.54 b = 100.45 swap(a, b) print(a,b)
Регистрация: 19.03.2022
Сообщений: 24
Точно. Это информатика на первом курсе лингвистики)
4459 / 3212 / 1125
Регистрация: 21.03.2016
Сообщений: 7,949
sofiadhi, ну как бы в питоне нет процедур. вот и возник вопрос у Catstail,
Регистрация: 19.03.2022
Сообщений: 24
я в этом совсем не разбираюсь. а задачи эти информатик придумывает сам (или берет откуда-то), так что все может быть
![]()
![]()
35346 / 19946 / 4179
Регистрация: 12.02.2012
Сообщений: 33,093
Записей в блоге: 13
sofiadhi, хоть это и непедагогично, но вынужден признать: ваш преподаватель не знает Питон. Целые переменные в Питоне не могут быть «выходными параметрами» (передаются по значению).
1 2 3 4 5 6 7
def swap(x,y): return (y,x) x=111 y=222 x,y=swap(x,y) print(x,y)
но это бессмысленно. Скажите преподавателю, что для обмена значениям двух переменных в Питоне не нужны никакие swap-ы:
x,y=y,x
Регистрация: 19.03.2022
Сообщений: 24
боюсь, если я так скажу, то у меня будет незачет) но в его непрофессионализме я не сомневаюсь
Добавлено через 29 секунд
спасибо вам большое!
4459 / 3212 / 1125
Регистрация: 21.03.2016
Сообщений: 7,949
Сообщение от sofiadhi 
боюсь, если я так скажу, то у меня будет незачет)
скажите ссылаясь на этот форум. и если он считает что прав пусть зайдет сюда и обоснует свою процедуру
![]()
5890 / 3348 / 1034
Регистрация: 03.11.2009
Сообщений: 9,977
предлагаю такой вариант:
«Псс, Семён Семёныч просил передать и я цитирую. «
Регистрация: 19.03.2022
Сообщений: 24
Добавлено через 25 секунд
я бы с радостью, но я не настолько смелая)
4459 / 3212 / 1125
Регистрация: 21.03.2016
Сообщений: 7,949
ну есть одно НО
»’В Python можно задавать собственные процедуры и функции. Процедуры в Python используются, когда часто повторяется один и тот же набор действий
Задание процедуры в Python
def название_процедуры(аргумент1, аргумент2,…, аргументN):
команды, выполняемые процедурой
Задание функции в Питоне
def название_функции(аргумент1, аргумент2,…, аргументN):
команды, выполняемые функцией
return значение
Процедура отличается от функции тем, что функция в Питоне после выполнения должна возвращать какое-либо значение, а процедура просто выполняет команды»’
вот тут то и начинается путанница. то есть если функция ничего не возвращает толкового ( тогда она всегда возвращает None) то ее можно обозвать процедурой. но в питоне как то все это называют функцией в отличие от других яп.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Поменять местами значения двух переменных (через третью)
Сдвинуть циклически значения разрядов целого четырехзначного числа на одну позицию влево. .
Поменять между собой значения переменных А и В
В Lazarus. Поменяйте между собой значения переменных А и В, воспользовавшись третьей переменной С.

Поменять между собой значения двух переменных, не используя третьей переменной
Привет, мне вот нужна ваша помощь: 1) "Нужно поменять между собой значения двух переменных, не.
Поменять между собой значения двух переменных, не используя третьей переменной
Поменяйте между собой значения двух переменных, не используя третьей переменной.
Обменять между собой значения переменных
даны названия двух стран присвоить эти названия переменным величинам s1 s2, после чего обменять.

Поменяйте между собой значения двух переменных А и В, воспользовавшись третьей переменной R
Помогите пожалуйста решить задачку на паскале: Поменяйте между собой значения двух переменных А.
В матрице поменять между собой элементы имеющие заданные значения
создать программу в которой реализована функция, есть полка представляешься 5 на 5 массива.
