Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 30.03.2019
Сообщений: 14

While, For, Список

12.04.2023, 22:08. Показов 771. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток. Прошу прощения за возможно несуразный вопрос.
Имею список и переменную, необходимо организовать проверку символов в переменной, например:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
abc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
a = '765j'
 
def fnc(abc):
  index = 0
  while index < len(a):
    for i in abc:
      if i == a[index]:
        return print('Error')
    index += 1
  return print('Access')
 
 
fnc(abc)
# Error (Для любого из вариантов, где присутствует любой из элементов списка)
Собственно в таком варианте оно все работает как надо, НО! При попытке создать альтернативу, вернее при попытке реализовать этот же вариант с другим, менее габаритным списком, все благополучно рассыпается:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
abd = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '9', '.']
a = '765j'
 
def fnc1(abd):
  index = 0
  while index < len(a):
    for i in abd:
      if i == a[index]:
        return print('Access')
    index += 1
  return print('Error')
 
 
fnc1(abc)
# Access
Пробовал сделать проверку через отрицание, но результат все равно сыпется:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
abd = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '.']
a = '765j' 
 
def fnc1(abd):
  index = 0
  while index < len(a):
    for i in abd:
      if i != a[index]:
        return print('Error')
    index += 1
  return print('Access')
 
 
fnc1(abc)
# Error (если переменная а = 765j и все еще Error если переменная а = 765)
Объясните пожалуйста в чем ошибка в моей логике? Цикл 'while' запускается эквивалентно количеству символов в переменной, в нем цикл 'for' сравнивает каждое значение списка 'abc\abd' через переменную 'i' с символом переменной 'a' по индексу, это должно работать до тех пор, пока цикл 'while' не остановится (значение остановки задано). Но второй и третий варианты выдают неверный результат.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.04.2023, 22:08
Ответы с готовыми решениями:

Имеется список женихов и список невест. Объединить эти списки в список пар с учетом требований партнерам
Имеется список женихов и список невест. Каждая запись списка содержит пол, имя, возраст, рост, вес, а также требования к партнеру:...

программа которая берет список и создает список другой из этого же списка + тот же список без последнего элемента
надо написать программу которая берет список и создает список другой из этого же списка + тот же список без последнего элемента к...

Однонаправленный список (создать список из целых чисел; подсчитать кол-во отрицательных элементов.создав из них новый список)
#include&lt;fstream&gt; #include&lt;string&gt; using namespace std; #include&quot;list.cpp&quot; ifstream in(&quot;input.txt&quot;); ofstream out(&quot;output.txt&quot;); ...

9
 Аватар для TimutGin
515 / 339 / 146
Регистрация: 16.02.2021
Сообщений: 626
12.04.2023, 23:02
Цитата Сообщение от Satain Посмотреть сообщение
fnc1(abc)
список abd, а в функцию передаёте abc

измените название списка abd на abc

Добавлено через 31 минуту
Цитата Сообщение от Satain Посмотреть сообщение
этот же вариант с другим, менее габаритным списком, все благополучно рассыпается
потому-что во втором варианте также изменили 'Error' на 'Access'
Цитата Сообщение от Satain Посмотреть сообщение
if i == a[index]:
        return print('Access')
    index += 1
  return print('Error')
0
0 / 0 / 0
Регистрация: 30.03.2019
Сообщений: 14
13.04.2023, 01:53  [ТС]
Не совсем понял, Error и Access изменил местами, потому, что поменялась логика - если 'i == a[index]', тоесть если переменная в списке эквивалентна элементу строки по индексу, то по идее все должно работать, но оно не работает, следовательно я сделал что-то не так. По поводу списка abc и abd, в том то и дело, это разные списки, в идеале первый список (abc) вмещает в себя большое количество элементов, список (abd) включает только цифры от 0 до 9 и '.', я пытаюсь сделать проверку элементов по второму списку, так, как он меньше и это будет удобнее, но никак не могу понять в чем проблема, я знаю, что я еще весьма туповат, поэтому и хочу понять в чем не прав.
P.S. В первом сообщении я действительно немного напутал и написал в вызове второй и третей функции не тот список, там должен быть abd, но от этого к сожалению ситуация не меняется.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
13.04.2023, 07:46
XY походу.
Satain, ты лучше внятно объясни какой результат ты хочешь получить. Причем не только в данном конкретном случае, но и вообще.
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,214
13.04.2023, 10:11
Цитата Сообщение от Satain Посмотреть сообщение
Объясните пожалуйста в чем ошибка в моей логике?
Вам необходимо почитать документацию, в частности, что такое индекс в списках, как работают генераторы и как передавать параметры в функцию...
То, что Вы хотели получить:
Python
1
2
3
4
5
6
7
8
9
10
11
def fnc(arr, x):
    for n in arr:
        for m in x:
            if m == n:
                return 'Access'
    return 'Error'
 
abc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
a = '765j'
 
print(fnc(abc, a))
но в данном случае, можно обойтись одним циклом:
Python
1
2
3
4
5
6
7
8
9
10
def fnc1 (arr, x):
    for n in x:
        if n in arr:
            return 'Access'
    return 'Error'
 
abc = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
a = '765j'
 
print(fnc1(abc, a))
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
13.04.2023, 11:22
YuS_2, а можно еще проще:
Python
1
2
3
4
5
def foo(arr: list, x: str) -> str:
    # Если любой элемент из списка, должен состоять из элемента строки
    return "Access" if any(a in x for a in arr) else "Error"
    # Если все элементы списка, должны состоять из элементов строки
    return "Access" if all(a in x for a in arr) else "Error"
1
 Аватар для TimutGin
515 / 339 / 146
Регистрация: 16.02.2021
Сообщений: 626
13.04.2023, 13:04
Цитата Сообщение от Satain Посмотреть сообщение
при попытке реализовать этот же вариант с другим, менее габаритным списком, все благополучно рассыпается:
Он не рассыпается,а работает как написано
Цитата Сообщение от Satain Посмотреть сообщение
в нем цикл 'for' сравнивает каждое значение списка 'abc\abd' через переменную 'i' с символом переменной 'a' по индексу
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
abd = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '9', '.']
a = '765j'
 
def fnc1(abd):
  index = 0
  while index < len(a):
 
    for i in abd:             #в этом цикле каждый элемент в списке abd   
      if i == a[index]:       #сравнивается с 1м элементом в строке a
        return print('Access')# на 7й итерации этого цикла i становится равен 1му элементу в строке('7'=='7')
                              #поэтому функция и возвращает 'Access'
    index += 1
  return print('Error')
 
fnc1(abd)
# Access

В третьем коде логика такая же

1й элемент на первой же итерации цикла for не равен 1му элементу строки a
поэтому и возвращается 'Error'
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,214
13.04.2023, 14:00
Цитата Сообщение от Fudthhh Посмотреть сообщение
а можно еще проще
можно, конечно... но судя по тому, что ТС пытался сделать, all() не подойдет... там ведь достаточное условие по единственному соответствию, для выдачи 'Access'... all() выдаст True, только если проверка всех элементов выдаст True (a in x)
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
13.04.2023, 14:24
YuS_2, я не понял что именно хотел ТС, поэтому выдал два решения, пусть берет какое нравиться.
0
0 / 0 / 0
Регистрация: 30.03.2019
Сообщений: 14
13.04.2023, 15:36  [ТС]
Всем неравнодушным спасибо за ответы. Буду дальше ковырять, по предложенным вариантам. Пожалуй это было ошибкой с моей стороны, не сказать какой результат мне нужен... По большому счету все просто, я не столь давно начал скажем так именно учить python, и хочу сделать простой калькулятор, который соответственно принимает от пользователя три значения, через консоль и так как консоль допускает введение символов по мимо цифр и точки, я искал решение, которое будет проверять корректность введенных символов. К слову, в первом варианте, решение я все таки построил, возможно и корявенько, но оно работает и меня особенно воодушевляет, что я сам это сделал. Но в первом варианте в списке получилось два алфавита, плюс спец символы, поэтому я хотел сделать ход конем и задать поиск в списке по меньше. Он включает в себя только цифры и точку
(проверку на количество точек в строке, а проверка работает со значением переменной как со строкой, я тоже сделал), но видимо все работает как должно, просто я не правильно понимаю логику этой работы. Судя по всему в первом варианте, значение ошибки присваивается, когда цикл находит хотя бы один из элементов эквивалентный элементу из списка, во втором варианте по логике он выдает идентичный результат, когда находит первый символ в строке-переменной эквивалентный символу в списке. В общем я еще весьма глуп.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.04.2023, 15:36
Помогаю со студенческими работами здесь

Описать процедуру, которая формирует список L, включив в него по одному разу элементы, которые входят в список L1, но не входят в список L2.
Описать процедуру, которая формирует список L, включив в него по одному разу элементы, которые входят в список L1, но не входят в список...

Составить программу, которая формирует список L, включив в него по одному разу элементы, которые входят в список L1 но не входят в список L2
Составить программу, которая формирует список L, включив в него по одному разу элементы, которые входят в список L1 но не входят в список...

Дан Список стран и список месяцев! Для каждой страны задана среднемесячная температура по каждому месяцу. Напечатать список стран в порядке неубывания
Дан Список стран и список месяцев! Для каждой страны задана среднемесячная температура по каждому месяцу. Напечатать список стран в порядке...

Дан список слов. Отфильтровать список , получив список слов, которые начинаются с гласной буквы
a = b = ('a','e','i','o','u','y') c = for i in a: if i.lower() in b: c.append(a) print(c) Не пойму...

Создать список L, включив в него по одному разу элементы, которые входят в список L1, но не входят в список L2
Описать процедуру, которая формирует список L, включив в него по одному разу элементы, которые входят в список L1, но не входят в...


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

Или воспользуйтесь поиском по форуму:
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, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru