Уведомления

Группа в Telegram: @pythonsu

#1 Март 28, 2024 12:07:57

sssony
Зарегистрирован: 2023-08-02
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Конкантинация строк

Конкатенация работает только со строковыми параметрами, это понятно.

Если не перевести в строки (см.ниже выделенное), выдаёт ошибку:
TypeError: can only concatenate str (not “list”) to str

Вопрос: где тут не строка и почему попытка перевести оба листа через str не работает ?


 from random import randint
numbers = []
a = 0
while a < 10:
    a += 1
    numbers.append(a)
letters_set = 'ABCDE'
letters = []
for letter in letters_set:
    letters += letter
range_of_choice = numbers + letters #Если преобразовать в строку оба листа в этом месте, то всё равно ошибка
print('Диапазон выбора: ' + str(range_of_choice)) # str(range_of_choice) если тут перевести в строку, то будет нормально
print('Всего символов в диапазоне: ' + str(len(range_of_choice)))
def random_choice():
    pulled_number = randint(range_of_choice[0], len(range_of_choice))
    return pulled_number
print("Winning ticket is", end=': ')
winning_numbers = []
for a in range(6):
    if winning_numbers not in winning_numbers:
        winning_numbers.append(random_choice())
print(winning_numbers)

Отредактировано sssony (Март 28, 2024 15:59:53)

Офлайн

#2 Март 28, 2024 15:38:52

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1310
Репутация: +  113  -
Профиль   Отправить e-mail  

Конкантинация строк

выделите свой код из редактора и вставьте между

[code python]сюда вставить код[/code]

Отредактировано xam1816 (Март 28, 2024 15:40:04)

Офлайн

#3 Март 28, 2024 16:15:15

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2586
Репутация: +  60  -
Профиль   Отправить e-mail  

Конкантинация строк

Нельзя взять строку от массива.
Используй для этого
‘’.join(list_name)



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#4 Март 28, 2024 17:07:21

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1310
Репутация: +  113  -
Профиль   Отправить e-mail  

Конкантинация строк

 print('Диапазон выбора: ' + str(range_of_choice)) # str(range_of_choice) если тут перевести в строку, то будет нормально

если не перевести в str, то будет попытка сложения строки Диапазон выбора и списка range_of_choice, что не допустимо

Офлайн

#5 Март 28, 2024 19:42:32

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2586
Репутация: +  60  -
Профиль   Отправить e-mail  

Конкантинация строк

xam1816
  print('Диапазон выбора: ' + "".join(range_of_choice))



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#6 Март 28, 2024 21:03:59

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1310
Репутация: +  113  -
Профиль   Отправить e-mail  

Конкантинация строк

sssony
range_of_choice = numbers + letters #Если преобразовать в строку оба листа в этом месте, то всё равно ошибка
Вот здесь оба листа не преобразовываются в строку, они просто складываются в один общий лист

Офлайн

#7 Март 30, 2024 22:56:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9730
Репутация: +  843  -
Профиль   Отправить e-mail  

Конкантинация строк

sssony
Если не перевести в строки (см.ниже выделенное), выдаёт ошибку:
TypeError: can only concatenate str (not “list”) to str
Вообще, это не должно работать
  
letters_set = 'ABCDE'
letters = []
for letter in letters_set:
    letters += letter

Похоже на баг ядра питона
  
>>> letters_set = 'ABCDE'
>>> letters = []
>>> for letter in letters_set:
...     letters += letter
... 
>>> 
>>> letters_set = 'ABCDE'
>>> letters = []
>>> for letter in letters_set:
...     letters = letters + letter
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
TypeError: can only concatenate list (not "str") to list
>>>

Но если вчитаться, то там у мутабельного последовательностного объекта запускается метод extend(), в который должен подаваться перебираемый объект.
https://docs.python.org/3/library/stdtypes.html#mutable-sequence-types
  
>>> lst = [123]
>>> 
>>> for i in 1, 2, 3:
...   lst += i
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
TypeError: 'int' object is not iterable
>>>

sssony
Если не перевести в строки (см.ниже выделенное), выдаёт ошибку:
TypeError: can only concatenate str (not “list”) to str
sssony
  
print('Диапазон выбора: ' + str(range_of_choice)) # str(range_of_choice) если тут перевести в строку, то будет нормально
print('Всего символов в диапазоне: ' + str(len(range_of_choice)))
Ну смотри
'Диапазон выбора: ' - это строка
range_of_choice - это список

Что будет, если к строке прибавить список? Понятно, что - ошибка, так как у строки нет такой операции, которой она могла бы к себе прибавить список, наполненный объектами. Строка может прибавить к себе только строку.
  
>>> 'abc' + [123]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: must be str, not list
>>> 
Что будет, если к списку прибавить строку? Понятно, что - ошибка, так как у списка нет такой операции, которой он мог бы к себе прибавить строку. Список может прибавить к себе только список.
  
>>> [123] + 'abc'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list
>>>

Так что, если тебе надо просто вывести их через пробел
sssony
  
print('Диапазон выбора: ' + str(range_of_choice)) # str(range_of_choice) если тут перевести в строку, то будет нормально
print('Всего символов в диапазоне: ' + str(len(range_of_choice)))
Так и пиши просто их через запятую в print()
  
>>> range_of_choice = ['a', 'b', 'c']
>>> 
>>> range_of_choice
['a', 'b', 'c']
>>> 
>>> print('Диапазон выбора:', range_of_choice)
Диапазон выбора: ['a', 'b', 'c']
>>>
Сначала так.

А потом можно и так
  
>>> range_of_choice = ['a', 'b', 'c']
>>> 
>>> range_of_choice
['a', 'b', 'c']
>>> 
>>> print('Диапазон выбора:', *range_of_choice)
Диапазон выбора: a b c
>>>
Через распаковку.



Отредактировано py.user.next (Март 30, 2024 23:06:48)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version