Форум сайта python.su
Мои функции
С двумя флагами
def find_sec_let_num_bef(text): out = 'none' f_was_letter = f_was_digit = False for ch in text: if ch.isalpha(): if f_was_letter and f_was_digit: out = ch break else: f_was_letter = True elif ch.isdigit(): f_was_digit = True return out
def find_sec_let_num_bef(text): out = 'none' state = 0 # (0 no, 1 no let1, 2 no dig, 3 let1 dig let2, 4 dig let1 let2) for ch in text: if state == 0: if ch.isalpha(): state = 1 elif ch.isdigit(): state = 2 elif state == 1: if ch.isdigit(): state = 3 elif state == 2: if ch.isalpha(): state = 4 elif state == 3: if ch.isalpha(): out = ch break elif state == 4: if ch.isalpha(): out = ch break return out
def find_sec_let_num_bef_(text): out = 'none' state = 0 # (0 no, 1 no let1, 2 no dig, 3 (let1 dig | dig let1) dig2) for ch in text: if state == 0: if ch.isalpha(): state = 1 elif ch.isdigit(): state = 2 elif state == 1: if ch.isdigit(): state = 3 elif state == 2: if ch.isalpha(): state = 3 elif state == 3: if ch.isalpha(): out = ch break return out
#!/usr/bin/env python3 import pytest from flagex import find_sec_let_num_bef as f @pytest.mark.parametrize( 'io', ( ('a1!', 'none'), ('a!1', 'none'), ('!a1', 'none'), ('!1a', 'none'), ('1!a', 'none'), ('abc1!', 'none'), ('abc!1', 'none'), ('ab1c!', 'c'), ('ab1!c', 'c'), ('ab1!c2d', 'c'), ('1ab', 'b'), ('1abc', 'b'), ('12ab', 'b'), ('12abc', 'b'), ('12a3b', 'b'), ('1;;;;ab', 'b'), ('1;;;;abc', 'b'), ('1;;a;;b', 'b'), ('1;;a;;bc', 'b'), ('a,123456789b', 'b'), ('a,1234@56789b', 'b'), ('aaa bbb ccclkj!@# $lll kkk 1!#@ $jkkk 123 bbb aaa', 'j'), (',;1abc bbb ccclkj!@# $lll kkk', 'b'), ('bbb ccclkj!@# $lll kkk123::@', 'none'), ) ) def test_values(io): i, o = io assert f(i) == o
python3 -m pytest
[guest@localhost flagex]$ python3 -m pytest
================================== test session starts ===================================
platform linux -- Python 3.6.1, pytest-6.0.1, py-1.9.0, pluggy-0.13.1
rootdir: /home/guest/prog/tests/py/flagex
plugins: mock-1.6.0, cov-2.4.0, spec-1.1.0, pep8-1.0.6, flakes-1.0.1
collected 24 items
flagex_test.py ........................ [100%]
=================================== 24 passed in 0.05s ===================================
[guest@localhost flagex]$
Офлайн
Anime_Jedi
Подскажите по task_7_7 она же 29не пойму как продумать логику для высчитывания местоположения точки
while not cell_is_filled() and not wall_is_on_the_right(): move_right() if cell_is_filled(): n = 0 while cell_is_filled(): n += 1 if n < 3: move_right() else: break
Офлайн
Офлайн
py.user.next
Не судите строго, но я на самом начале запнулся. Хотел по простому сделать, но не получилось …
Хотел цифру найти так,
# pervaya bukva
for d in newer:
while “0” <= d <= “9”:
Затем так же букву:
два списка
a = ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘l’, ‘m’, ‘n’, ‘o’, ‘p’, ‘q’, ‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’, ‘y’, ‘z’
A = ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘O’, ‘P’, ‘Q’, ‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’, ‘X’, ‘Y’, ‘Z’
И циклом
for f in spisok:
if f in a:
Но так я только первую букву и цифру нахожу.
Чтение про списки и про индексы в интернете мне не помогло.
Офлайн
0ppaДа можно по-разному находить. Суть метода str.isdigit() или str.isalpha() сводится к тому, что берётся каждый символ строки, у которой вызывается метод, и этот символ ищется в фиксированном множестве символов. Оно сложнее, конечно, устроено, так как ищет по всему юникоду. Но самодельные функции isdigit() и isalpha() можно написать, ничто не мешает.
Хотел цифру найти так
>>> def isalpha(ch): ... return ch in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' ... >>> def isdigit(ch): ... return ch in '0123456789' ... >>> text = 'One, Two, Three. 1 2 3. 我' >>> >>> for i in text: ... if isalpha(i): ... print(i, 'is a letter') ... elif isdigit(i): ... print(i, 'is a digit') ... else: ... print('<{}> is neither a letter nor a digit'.format(i)) ... O is a letter n is a letter e is a letter <,> is neither a letter nor a digit < > is neither a letter nor a digit T is a letter w is a letter o is a letter <,> is neither a letter nor a digit < > is neither a letter nor a digit T is a letter h is a letter r is a letter e is a letter e is a letter <.> is neither a letter nor a digit < > is neither a letter nor a digit 1 is a digit < > is neither a letter nor a digit 2 is a digit < > is neither a letter nor a digit 3 is a digit <.> is neither a letter nor a digit < > is neither a letter nor a digit <我> is neither a letter nor a digit >>> >>> '我'.isalpha() True >>>
Отредактировано py.user.next (Дек. 28, 2020 01:46:21)
Офлайн
f-a-v19я новенький и это задание мне далось болью и потом))) вроде как всё работает, но, возможно есть косяки…
помоните, пожалуйста, с решением задачи 23 (task_6_6()пытаюсь так, но врезаюсь в стену в ряде случаевdef task_6_6(): while not wall_is_on_the_right(): if wall_is_above() or not wall_is_beneath(): move_right() while not wall_is_above(): move_up() fill_cell() while not wall_is_beneath(): move_down() move_right() while not wall_is_above(): move_up() fill_cell() while not wall_is_beneath(): move_down() while wall_is_beneath(): move_left() if __name__ == ‘__main__’: run_tasks()
move_right() if not wall_is_above(): # решение проблемы если первый столб выпадает на самое начало коридора (это ломает код (цикл) написанный дальше) move_up() if wall_is_above(): # заполняет столб высотой в одну клетку fill_cell() move_down() while not wall_is_above() and wall_is_on_the_right(): # заполнение столба и выход из него в основной коридор fill_cell() move_up() if wall_is_above(): fill_cell() while not wall_is_beneath() and wall_is_on_the_right(): move_down() while wall_is_beneath() and not wall_is_on_the_right(): # заставляет робота двигаться до следующего столба move_right() if wall_is_beneath() and wall_is_on_the_right() and wall_is_above(): # отправляет робота в начальную точку когда заканчивается коридор while wall_is_beneath(): move_left() if not wall_is_above() and wall_is_beneath(): # заполнение столба и выход из него в основной коридор move_up() fill_cell() if wall_is_above(): # возвращает робота в основной коридор, если столб был высотой в одну клетку move_down() if wall_is_beneath() and wall_is_on_the_right(): # решение проблемы если в конце коридора есть столб высотой в одну клетку ??? while wall_is_beneath(): move_left() while not wall_is_above() and wall_is_on_the_right() and wall_is_on_the_left(): # цикл заполнения столба move_up() fill_cell() if wall_is_above(): while not wall_is_beneath() and wall_is_on_the_right() and wall_is_on_the_left(): # выход робота в основной коридор после заполнения столба move_down() if wall_is_beneath() and wall_is_on_the_right(): # отправка робота в начальную точку если столб оказался в конце коридора while wall_is_beneath(): move_left()
Отредактировано AndreyD (Апрель 21, 2021 18:21:39)
Офлайн
AndreyDИспользуй тег форума code
не знаю как нормально тут отобразить отступы
[code python]
while True:
print('ok')
[/code]
Отредактировано py.user.next (Апрель 14, 2021 20:25:55)
Офлайн
Lucker
опять прошу помощи, Задача №27: task_7_5. Закрасить клетки с увеличивающимся интервалом. Расстояние до стены не известно. пока имею такой вид кода:n=0move_right()while not wall_is_on_the_right(): fill_cell() if cell_is_filled(): n+=1 move_right(n)Но боюсь тут вообще нужно воспользоваться циклом “for”, совсем голову сломал…и сразу еще вопрос, как сделать, чтобы отступы были видны в сообщении?
move_right() fill_cell() move_right() fill_cell() a = 1 def move_not_crush(): # чтобы Робот не врезался в стену в процессе движения for move_not_crush in range(a): if not wall_is_on_the_right(): move_right() while not wall_is_on_the_right(): if not wall_is_on_the_right(): fill_cell() if not wall_is_on_the_right(): move_right() if not wall_is_on_the_right(): move_not_crush() a += 1
Отредактировано AndreyD (Апрель 21, 2021 18:19:25)
Офлайн
Офлайн
Online Training is rapidly becoming one of the most cost-effective ways to educate the world’s rapidly expanding workforce.
Офлайн