Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
2 / 2 / 1
Регистрация: 31.12.2016
Сообщений: 73

В С++ так не работает, объясните пожалуйста, почему в Pythone работает

23.10.2020, 00:54. Показов 2430. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите пожалуйста новичку, объясните почему так!
Помнится, когда то решал такую задачку на плюсах, там было все понятно... Здесь никак понять не могу!
Задача: пользователь вводит слово, нужно удалить со слова гласные буквы!

Алгоритм: перебираем каждую букву по индексу, лишнее выбрасываем и на каждом этапе пересохраняем, если я правильно помню!

но в пайтоне почему-то оно работает по другому:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
userWord = str(input("Введите слово: "))
userWord = userWord.upper()
for letter in userWord:
    if letter == 'A':
        continue
    elif letter == 'E':
        continue
    elif letter == 'I':
        continue
    elif letter == 'O':
        continue
    elif letter == 'U':
        continue
    print(letter)
Ввели: name
на выводе:
N
M
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2020, 00:54
Ответы с готовыми решениями:

Объясните, пожалуйста, почему так происходит в первом варианте и почему второй вариант работает корректно?
Я сидел и изучал списки и операции над ними. И написал вот такой простенький код: sent='qwertyuiop' word='tyu' ...

Объясните пожалуйста, почему не работает.
:@echo off :2 set /p a = call :1 %a% goto 2 :1 echo value = %1 goto:eof

Объясните почему так работает?
CString myclass::Fun1(CString name) { return "NAME1"; } Пишет: error C2664:...

14
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
23.10.2020, 01:11
Цитата Сообщение от jekakeba Посмотреть сообщение
но в пайтоне почему-то оно работает по другому
Потому, что С++ это язык низкого уровня, а Python язык высокого уровня, где команда питона является объединением группы команд С++. Поэтому знание Языка С++ не упрощает изучение питона, а как говорит Лутц, иногда даже мешает изучению питона. Забудь те о С++ когда пишите на питоне, Это как при владении несколькими иностранными языками речи. Когда Вы используете немецкий язык, должно быть полное погружение в него, и Вы должны отключаться от знания английского языка.
1
2 / 2 / 1
Регистрация: 31.12.2016
Сообщений: 73
23.10.2020, 01:23  [ТС]
Вот с немецким я понял, так как уже столкнулся с этим!
А с питоном еще не совсем понял...
Но, спасибо за ответ)
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
23.10.2020, 01:29
Цитата Сообщение от jekakeba Посмотреть сообщение
А с питоном еще не совсем понял...
Просто нужно учить язык Python как самостоятельный язык, не связанный с С++. Хотя в питоне можно использовать куски написанные на С++, но для этого нужно использовать специальные средства питона, для подключения этих кусков.
1
23.10.2020, 01:38

Не по теме:

Цитата Сообщение от Viktorrus Посмотреть сообщение
иногда даже мешает изучению питона.
подтверждаю. После си питон шел (да и идет) очень тяжело - постоянное пересчитывание байт на краю сознания и желание микрооптимизаций.

1
2 / 2 / 1
Регистрация: 31.12.2016
Сообщений: 73
23.10.2020, 01:39  [ТС]
ок, если вам не сложно, объясните пожалуйста первые 1-2-3 строчки
Python
1
2
3
userWord = str(input("Введите слово: "))
userWord = userWord.upper()
for letter in userWord:
С первой все ясно, создана переменная и с ввода присвоено ей значение одновременно
вторая тоже ясно, маленькие поменяли на большие и не более, саму переменную не изменили! и вот здесь вопрос: переменную не изменили, а создали новую, или множество новых и получился список?
и третья строчка: "letter " - это вообще как? Создать создали, но она пустая? и как мы по итогу в нее что-то присвоили?

Спасибо!
0
377 / 228 / 79
Регистрация: 24.11.2009
Сообщений: 695
23.10.2020, 01:44
Цитата Сообщение от jekakeba Посмотреть сообщение
переменную не изменили, а создали новую,
В питоне нет переменных в понимании си. В питоне связывание имени userWord с новым объектом в памяти полученном в результате работы userWord.upper(). Старый объект связанный с userWord больше не имеет связанных с ним имен и маркеруется для сборщика мусора.
1
2 / 2 / 1
Регистрация: 31.12.2016
Сообщений: 73
23.10.2020, 01:46  [ТС]
но userWord не меняется! мы можем насоздавать другх переменных кучу, но эта не меняетя и ее тоже можем вывести в любой момент!
вот честно, ничего не понял... Блин, все как - то не объяснимо(
0
377 / 228 / 79
Регистрация: 24.11.2009
Сообщений: 695
23.10.2020, 01:51
Цитата Сообщение от jekakeba Посмотреть сообщение
"letter " - это вообще как?
Python
1
for letter in userWord:
примерно так:
C++
1
for( auto letter : userWord ) {}
или так:
C
1
for (char* p_letter = &userWord[0]; *p_letter != '\0'; p_letter++) {}
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
23.10.2020, 02:40
Лучший ответ Сообщение было отмечено jekakeba как решение

Решение

jekakeba, Вообще то в этом коде из строки ничего не выбрасывается и ничего не пересохраняется.
Здесь вводится строка.
Затем создается новая строка (старая удаляется из памяти сборщиком мусора).
В цикле пробегаем все буквы в строке "NAME".
И если буква не гласная, то выводим ее на экран.
Цитата Сообщение от jekakeba Посмотреть сообщение
третья строчка: "letter " - это вообще как? Создать создали, но она пустая? и как мы по итогу в нее что-то присвоили?
Читайте как работает цикл for. Цикл на каждом шаге помещает в переменную letter ссылку на очередной объект из последовательности "NAME". каждая буква, это самостоятельный объект (строка из одного символа).
В общем пока изучаете питон, забудьте о С++ и начните изучать именно Python. По Вашим вопросам видно, что Вы питона не знаете.
Кстати в питоне такой код обычно пишут так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
#userWord = str(input("Введите слово: ")) # не верно
userWord = input("Введите слово: ") # правильно. При вводе с клавиатуры мы всегда
                                    # получаем строку. Поэтому функция str() лишняя
                                    # В переменной userWord ссылка на объект-строку "name"
userWord = userWord.upper()         # В переменной userWord ссылка на объект-строку "NAME"
                                    # Теперь нет переменных, которые имеют ссылку на 
                                    # на объект-строку "name". Поэтому сборщик 
                                    # мусора удалит этот объект из памяти.
for letter in userWord:        # цикл пробегает по последовательности букв из объекта "NAME",
                               # на который теперь находится ссылка в переменной userWord
    if letter in ('A', 'E', 'I', 'O', 'U'):
        continue
    print(letter)
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
23.10.2020, 05:17
Цитата Сообщение от jekakeba Посмотреть сообщение
саму переменную не изменили!
В том-то и дело, что изменили. На псевдокоде:

C++
1
2
3
4
5
6
7
8
char *userWord;//создали указатель
userWord = new char[256];//выделили память под строку
cin >> userWord;//заполнили строку
 
char *tmp = new char[256];//выделили память под новую строку
str.upper(userWord, tmp);//заполнили новую cтроку
delete userWord; // старую строку соберёт потом сборщик мусора
userWord = tmp; //присвоили указатель на новую строку
То же самое на питоне:
Python
1
2
3
userWord = input("Введите слово: ")
tmp = userWord.upper() #новая строка
userWord = tmp
Цитата Сообщение от jekakeba Посмотреть сообщение
но в пайтоне почему-то оно работает по другому:
вы сейчас выводите
C++
1
cout << letter << endl;
А надо так:
Python
1
print(letter, end='')
1
2 / 2 / 1
Регистрация: 31.12.2016
Сообщений: 73
23.10.2020, 10:06  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
Читайте как работает цикл for. Цикл на каждом шаге помещает в переменную letter ссылку на очередной объект из последовательности "NAME". каждая буква, это самостоятельный объект (строка из одного символа).
Вот теперь все понял, спасибо!
В Питоне совершенно не так, как в С...
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
23.10.2020, 11:04
Цитата Сообщение от jekakeba Посмотреть сообщение
В Питоне совершенно не так, как в С...
Принципиально всё так же.

C
1
2
3
4
5
6
7
8
  char *userWord = "Trixie is Best Pony";
  size_t i=0;
  char letter=userWord[i];
  while (letter!='\0'){
      printf("%c\n", letter);
      i++;
      letter=userWord[i];
  }

Python
1
2
3
userWord = "Trixie is Best Pony"
for letter in userWord:
    print(letter)
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
23.10.2020, 14:14
Цитата Сообщение от jekakeba Посмотреть сообщение
Помнится, когда то решал такую задачку на плюсах, там было все понятно... Здесь никак понять не могу!
Коды на Python и на С++ для решения этой задачи идентичны. Или ты совсем не знаешь С++.
P.S. На С++ ты описал один вариант решения, а на Python привел совершенно иной. А правда в том, что на обоих языках можно делать и так и эдак.
0
2 / 2 / 1
Регистрация: 31.12.2016
Сообщений: 73
23.10.2020, 14:56  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Или ты совсем не знаешь С++.
Значит совсем не знаю)
спасибо за ответ
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.10.2020, 14:56
Помогаю со студенческими работами здесь

Объясните, пожалуйста, почему не работает строка
Ничего не понимаю... Объясните, пожалуйста, почему не работает строка program 1; var a: integer; begin; readln(a); if...

Объясните пожалуйста почему не работает программа
Во время выполнения программы возникает ошибка. Не могу понять почему. Вот код: #include &lt;iostream&gt; #include &lt;cstring&gt; ...

Объясните пожалуйста, почему не работает условие!
Начал изучать классы, хочу понять как работать с приватными переменнами! Есть такой вот метод: char* student::returnName() { ...

Объясните почему работает именно так?
Добрый день. Пишу приложение и пытаюсь в меню добавить обработку метода jMenuItem1MouseClicked (при выборе пункта меню окно должно...

Объясните пожалуйста почему не работает эта конструкция
PreparedStatement st= conn.prepareStatement(&quot;select Ник, Пароль from Сотрудники where Ник = ? and Пароль = ?&quot;); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru