Изменение значения переменной с сохранением

У меня есть переменная D='tom'. Как сделать так, чтобы я ввел новое значение в input, и D='tom' поменялось на то значение, которое я ввел. Например, я в input введу "Ben", и переменная поменяется на D='Ben'. Нужно, чтобы после завершения работы кода pначение D='Ben' сохранилось.

Code screenshot

Комп завис, поэтому скинул фото вместо самого кода. Обратите внимание на строку 28. Я хочу сделать так, чтобы когда я ввел название сервера один раз, оно сохранилось, не хочу вводить название каждый раз.


Ответы (3 шт):

Автор решения: SVBazuev

Если нужно сохранять данные после завершения выполнения программы,
то надо будет записывать их в какой-нибудь файл, например: d.txt

from pathlib import Path

# Соответственно и получать значение ты будешь из файла
file_path = Path('d.txt')

# Проверяем, существует ли файл
if file_path.exists():
    with open('d.txt', 'r', encoding="utf-8") as f:
        d = f.read()
        print(f'Начальное значение: {d}')
else:
    raise FileNotFoundError(f'Файл {file_path} не найден.')

if new_d := input('Введите новое значение:  '):
    with open('d.txt', 'w', encoding="utf-8") as f:
        f.write(new_d)
        print(f'Новое значение: {new_d} сохранено в d.txt')

Успехов!

→ Ссылка
Автор решения: Stanislav Volodarskiy

В качестве шутки. Следующая программа редактирует свою первую строку, если та соответствует формату D=<что-то там строковое>. Это будет работать, но делать так не надо. Правила хорошего тона рекомендуют отделять неизменные данные (код) от меняющихся. Для этого есть много веских причин, поверьте.

D='tom'

import re


def edit_d(new_d):
    with open(__file__) as f:
        lines = f.readlines()
    if re.match("^D='.*'\n$", lines[0]) is not None or \
       re.match('^D=".*"\n$', lines[0]) is not None    :
        lines[0] = f'D={new_d!r}\n'
        with open(__file__, 'w') as f:
            f.writelines(lines)


D = input()
edit_d(D)
→ Ссылка
Автор решения: Serge3leo

Нужно, чтобы после завершения работы кода pначение D='Ben' сохранилось.

Дело обычное, вашей программе нужен файл конфигурации, традиционный подход - configparser. Чтение переменной со значением по умолчанию может быть таким:

import configparser
cfg_name = 'example.ini'  # Имя файла конфигурации
cfg = configparser.ConfigParser()
cfg.read_string("""[DEFAULT]  # Файл конфигурации по умолчанию
                   d = 42
                   """)
cfg.read(cfg_name)  # Считываем файл конфигурации, если нет - не страшно
d = cfg.getint('DEFAULT', 'd')  # Берём из него `d`
print(f'Старое значение: {d=}')

Что-то делаем, к примеру:

try:
    d = int(input("Новое значение (Enter↵ - оставить старое):"))
except ValueError:
    pass  # Если введена пустая или некоректная строка, `d` - старое
print(f"Рабочее значение {d=}")

Потом сохраняем на будущее:

cfg['DEFAULT']['d'] = str(d)  # В нужной секции под заданным именем
with open(cfg_name, 'w') as f:  # Открываем файл на время `with`, если его нет, то создаётся 
    cfg.write(f)  # Пишем в файл

Так, интереса ради, что у нас там записалось?

with open(cfg_name, 'r') as f:  # Открываем файл для чтения на время `with`
    print(f.read())
[DEFAULT]
d = 54
→ Ссылка