Вызов переменной с использованием двух объединенных строк Python

Извините за отсутствие подробностей, поскольку я новичок в Python:

c1 = c2 = c3 = c4 = c5 = False

x = int(input("Enter a number 1-5: "))  

if x > 5 or x < 1:
  print("Your number must be between 1 and 5")
else:
  "c", x = True

В строке 8 вы должны объединить две строки.

Я не уверен, достаточно ли я ясно выражаюсь и возможно ли это вообще в Python, но было бы здорово, если бы кто-то более опытный мог ответить.

Я просмотрел страницы вопросов и до сих пор не нашел ничего, связанного с тем, что я пытаюсь сделать. То же самое и с Ютубом.

Совершенно непонятно, что вы пытаетесь сделать. Какие строки следует объединить?

Klaus D. 08.08.2024 21:26

Это работа для списка, а не для объединения строк.

user2357112 08.08.2024 21:27

Вы можете попробовать locals()[f'c{x}'] = True, но это не лучшая практика.

OneCricketeer 08.08.2024 21:32

@OneCricketeer Не приукрашивайте; это даже не хорошая и не нейтральная практика. locals явно задокументирован как нечто, возвращаемое значение которого не следует изменять.

chepner 08.08.2024 21:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
4
63
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте список вместо кучи переменных:

c = [False] * 5

x = int(input("Enter a number 1-5: "))  

if x > 5 or x < 1:
  print("Your number must be between 1 and 5")
else:
  c[x-1] = True

Также вы должны знать, что строковые литералы (например, "c") плохо сочетаются с именами переменных. Если вы хотите использовать строку как способ идентификации переменной, используйте dict.

Добавлено для решения проблемы масштабирования. defaultdict может быть полезен как аналог разреженного массива.

from collections import defaultdict

c = defaultdict(lambda: False)
x = int(input("Enter a number 1-500000: "))  

if x > 500000 or x < 1:
  print("Your number must be between 1 and 500000")
else:
  c[x] = True

Это был всего лишь пример, я пытаюсь интегрировать эту проблему в гораздо больший масштаб. Я не думаю, что список будет возможен.

Baller 08.08.2024 21:30

Длина вашего списка равна 5, но индексы могут достигать 5 (включительно), что выходит за пределы.

Matthew Flaschen 08.08.2024 21:39

@MatthewFlaschen Да, только что заметил, спасибо. Исправлена ​​индексация.

Woodford 08.08.2024 21:39

@Baller, в таком случае, пожалуйста, задайте новый вопрос, объясняющий вашу реальную потребность. Вам может понадобиться база данных (традиционная или простая, например SQLite). Или, возможно, словарь. Но это зависит.

Matthew Flaschen 08.08.2024 21:40

@Вудфорд, тебе следует сохранить исходный пользовательский ввод из вопроса (1-5). Однако я удалил свой отрицательный голос.

Matthew Flaschen 08.08.2024 21:42

@Baller список будет возможен. Или какая-то другая структура данных. Совершенно неразумно пытаться динамически использовать подобные переменные.

juanpa.arrivillaga 08.08.2024 22:09

Вместо этого используйте список:

lst = [False for _ in range(5)]

print(lst)
# [False, False, False, False, False]

idx = int(input("Enter a number 0-4: "))  

if idx > 4 or idx < 0:
  print("Your number must be between 0 and 4")
else:
  lst[idx] = True

print(lst)
# [False, False, False, True, False]

Как правило, всякий раз, когда у вас есть такие переменные, как c1, c2, c3 и т. д., вместо этого вам следует использовать список . Доступ к спискам можно легко получить с помощью индекса, и они имеют множество других преимуществ, таких как возможность циклического перебора списка, доступ к различным функциям списка, возможность выполнять понимание списков и т. д. Обратите внимание, что списки в Python начинаются с индекс 0, а не 1.

Другие вопросы по теме