Извините за отсутствие подробностей, поскольку я новичок в 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, но было бы здорово, если бы кто-то более опытный мог ответить.
Я просмотрел страницы вопросов и до сих пор не нашел ничего, связанного с тем, что я пытаюсь сделать. То же самое и с Ютубом.
Это работа для списка, а не для объединения строк.
Вы можете попробовать locals()[f'c{x}'] = True
, но это не лучшая практика.
@OneCricketeer Не приукрашивайте; это даже не хорошая и не нейтральная практика. locals
явно задокументирован как нечто, возвращаемое значение которого не следует изменять.
Используйте список вместо кучи переменных:
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
Это был всего лишь пример, я пытаюсь интегрировать эту проблему в гораздо больший масштаб. Я не думаю, что список будет возможен.
Длина вашего списка равна 5, но индексы могут достигать 5 (включительно), что выходит за пределы.
@MatthewFlaschen Да, только что заметил, спасибо. Исправлена индексация.
@Baller, в таком случае, пожалуйста, задайте новый вопрос, объясняющий вашу реальную потребность. Вам может понадобиться база данных (традиционная или простая, например SQLite). Или, возможно, словарь. Но это зависит.
@Вудфорд, тебе следует сохранить исходный пользовательский ввод из вопроса (1-5). Однако я удалил свой отрицательный голос.
@Baller список будет возможен. Или какая-то другая структура данных. Совершенно неразумно пытаться динамически использовать подобные переменные.
Вместо этого используйте список:
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.
Совершенно непонятно, что вы пытаетесь сделать. Какие строки следует объединить?