Не понимаю как сделать необязательные параметры!

FlyPhoeniX

Новичок
Пользователь
Фев 8, 2022
7
1
3
Сразу говорю готовый код мне кидать не надо!(Я надеюсь что вы мне дадите хорошую подсказку и я сам справлюсь!). Функция без необязательного параметра выполняется как надо, но я вообще не в какую не понимаю как реализовать код под эти необязательные параметры. Если есть возможность попробуйте дать ответ на псевдокоде.

1. Windows 7
2. Python 3.8.6
3. -
4.
Код:
def get_hidden_card(text, optional_argument=1):
    text = text[12:16]     # вывод текста без *
    print(text.rjust(16, "*")[8:16])    # вывод текста используя * перед срезом
    return text     # возвращать текст используя срез и * перед полученным срезом
get_hidden_card("2034399002125581", 1) # вызов функции     # "*5581"
get_hidden_card("2034399002125581", 2)                     # "**5581"
get_hidden_card("2034399002125581", 3)                     # "***5581"
get_hidden_card("2034399002125581")                        # "****5581"
 

AnKor

Новичок
Пользователь
Фев 12, 2022
3
3
3
Это можно реализовать без применения rjust(), простым умножением вот этого необязательного параметра на символ звёздочки с последующей конкатенацией со срезом строки, переданной первым аргументом. На место необязательного параметра встаёт переданный при вызове функции второй аргумент. Судя по последнему вызову функции и тому, что она должна напечатать, в этом случае - аргумент по умолчанию должен быть равен 4. Если мы ничего не передаём вторым аргументом, то ты этот параметр умножаешь на '*' и прилепляешь нужный срез строки (первого аргумента). Предпоследний вызов функции - на место 4 встанет тройка и уже она будет умножаться на звездочку. И так далее.
 
  • Мне нравится
Реакции: FlyPhoeniX

FlyPhoeniX

Новичок
Пользователь
Фев 8, 2022
7
1
3
Это можно реализовать без применения rjust(), простым умножением вот этого необязательного параметра на символ звёздочки с последующей конкатенацией со срезом строки, переданной первым аргументом. На место необязательного параметра встаёт переданный при вызове функции второй аргумент. Судя по последнему вызову функции и тому, что она должна напечатать, в этом случае - аргумент по умолчанию должен быть равен 4. Если мы ничего не передаём вторым аргументом, то ты этот параметр умножаешь на '*' и прилепляешь нужный срез строки (первого аргумента). Предпоследний вызов функции - на место 4 встанет тройка и уже она будет умножаться на звездочку. И так далее.
Спасибо вам большое за подсказку! Все работает, но к сожалению этот код по заданию должен выполняться обязательно с помощью rjust() :(
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
rjust принимает длину новой строки и символ которым надо дополнить эту строку до указанной длины
Python:
text = 'hello'
text.rjust(10, '=')  # hello=====
text.rjust(7, '+')  # hello==
То есть тебе надо просто менять длинну строки (первый аргумент), после даже срез не нужен
 
  • Мне нравится
Реакции: FlyPhoeniX

AnKor

Новичок
Пользователь
Фев 12, 2022
3
3
3
Спасибо вам большое за подсказку! Все работает, но к сожалению этот код по заданию должен выполняться обязательно с помощью rjust() :(
Тогда с необязательным параметром также всё, он по умолчанию равен 4. А в теле функции сначала делаешь нужный срез входной строки, а потом к нему применяешь метод rjust, в который первым аргументом пойдет твой необязательный параметр + длина твоего среза. Таким образом к твоему срезу будут добавляться звёздочки до нужной длины строки. Ну а второй аргумент '*'. Останется только запринтить. Но срез в конце уже не нужен. Будет работать)
 
  • Мне нравится
Реакции: FlyPhoeniX

FlyPhoeniX

Новичок
Пользователь
Фев 8, 2022
7
1
3
Тогда с необязательным параметром также всё, он по умолчанию равен 4. А в теле функции сначала делаешь нужный срез входной строки, а потом к нему применяешь метод rjust, в который первым аргументом пойдет твой необязательный параметр + длина твоего среза. Таким образом к твоему срезу будут добавляться звёздочки до нужной длины строки. Ну а второй аргумент '*'. Останется только запринтить. Но срез в конце уже не нужен. Будет работать)
Сижу уже где-то несколько часов и вообще не понимаю, вроде сделал как вы написали. Но программа выводит везде 5581.

Python:
def get_hidden_card(text, optional_argument=4):
    text = text[12:16]
    text.rjust(optional_argument + 4, "*")
    return text

print(get_hidden_card("2034399002125581"))
print(get_hidden_card("2034399002125581", 1))
print(get_hidden_card("2034399002125581", 2))
print(get_hidden_card("2034399002125581", 3))
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
Сижу уже где-то несколько часов и вообще не понимаю, вроде сделал как вы написали. Но программа выводит везде 5581.

Python:
def get_hidden_card(text, optional_argument=4):
    text = text[12:16]
    text.rjust(optional_argument + 4, "*")
    return text

print(get_hidden_card("2034399002125581"))
print(get_hidden_card("2034399002125581", 1))
print(get_hidden_card("2034399002125581", 2))
print(get_hidden_card("2034399002125581", 3))
все правильно, но ты не учел одного, методы строк не меняют значение переменной, а просто возвращают результат, у тебя должно быть
Python:
# Не так
text.rjust(optional_argument + 4, "*")
# А так
text = text.rjust(optional_argument + 4, "*")
 
  • Мне нравится
Реакции: FlyPhoeniX

FlyPhoeniX

Новичок
Пользователь
Фев 8, 2022
7
1
3
все правильно, но ты не учел одного, методы строк не меняют значение переменной, а просто возвращают результат, у тебя должно быть
Python:
# Не так
text.rjust(optional_argument + 4, "*")
# А так
text = text.rjust(optional_argument + 4, "*")
Спасибо большое!!! Вам и AnKor! Я все такие смог решить задание) Надеюсь подобных трудностей связанных с необязательными параметрами у меня не возникнет) Еще раз больше спасибо =)
 
  • Мне нравится
Реакции: Vershitel_sudeb

Vladislav.Khammatov

Новичок
Пользователь
Май 20, 2022
2
0
1
Это можно реализовать без применения rjust(), простым умножением вот этого необязательного параметра на символ звёздочки с последующей конкатенацией со срезом строки, переданной первым аргументом. На место необязательного параметра встаёт переданный при вызове функции второй аргумент. Судя по последнему вызову функции и тому, что она должна напечатать, в этом случае - аргумент по умолчанию должен быть равен 4. Если мы ничего не передаём вторым аргументом, то ты этот параметр умножаешь на '*' и прилепляешь нужный срез строки (первого аргумента). Предпоследний вызов функции - на место 4 встанет тройка и уже она будет умножаться на звездочку. И так далее.
Добрый день, Ankor.
Пытаюсь выполнить такое же задание, но реализовать функцию нужно без применения rjust().
Написал следующий код ->

Python:
def get_hidden_card(str, base=4):
    return "*" * base + str[10:16]

text = "11111111112345, 3"
result = get_hidden_card(text)
print(result)

Тестирую, но при любом заданном значении необязательного параметра количество "*" всегда остается 4.

Могли бы подсказать, в чем может быть проблема? На что стоит обратить внимание?
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 599
464
83
Добрый день, Ankor.
Пытаюсь выполнить такое же задание, но реализовать функцию нужно без применения rjust().
Написал следующий код ->

Python:
def get_hidden_card(str, base=4):
    return "*" * base + str[10:16]

text = "11111111112345, 3"
result = get_hidden_card(text)
print(result)

Тестирую, но при любом заданном значении необязательного параметра количество "*" всегда остается 4.

Могли бы подсказать, в чем может быть проблема? На что стоит обратить внимание?
вы не передаете второй параметр в функцию, и он принимает значение по умолчанию, то есть 4
Python:
def get_hidden_card(str, base=4):
    return "*" * base + str[10:16]

text = "11111111112345, 3"
result = get_hidden_card(text, 3)
print(result)
 
  • Мне нравится
Реакции: Vladislav.Khammatov

Vladislav.Khammatov

Новичок
Пользователь
Май 20, 2022
2
0
1
вы не передаете второй параметр в функцию, и он принимает значение по умолчанию, то есть 4
Python:
def get_hidden_card(str, base=4):
    return "*" * base + str[10:16]

text = "11111111112345, 3"
result = get_hidden_card(text, 3)
print(result)
Благодарю за ответ!
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
пост № 4:
Код:
text = 'hello'
text.rjust(10, '=')  # hello=====
text.rjust(7, '+')  # hello==
не верны комментарии
Код:
text = 'hello'
print(text.rjust(10, '='))  # =====hello
print(text.rjust(7, '+'))  # ++hello
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
25
28
пост № 4:
Код:
text = 'hello'
text.rjust(10, '=')  # hello=====
text.rjust(7, '+')  # hello==
не верны комментарии, будет так:
Код:
text = 'hello'
print(text.rjust(10, '='))  # =====hello
print(text.rjust(7, '+'))  # ++hello
 

Форум IT Специалистов