Найти - Пользователи
Полная версия: Конкантинация строк
Начало » Python для новичков » Конкантинация строк
1
sssony
Конкатенация работает только со строковыми параметрами, это понятно.

Если не перевести в строки (см.ниже выделенное), выдаёт ошибку:
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)
xam1816
выделите свой код из редактора и вставьте между
[code python]сюда вставить код[/code]
ZerG
Нельзя взять строку от массива.
Используй для этого
‘’.join(list_name)
xam1816
 print('Диапазон выбора: ' + str(range_of_choice)) # str(range_of_choice) если тут перевести в строку, то будет нормально

если не перевести в str, то будет попытка сложения строки Диапазон выбора и списка range_of_choice, что не допустимо
ZerG
xam1816
  print('Диапазон выбора: ' + "".join(range_of_choice))
xam1816
sssony
range_of_choice = numbers + letters #Если преобразовать в строку оба листа в этом месте, то всё равно ошибка
Вот здесь оба листа не преобразовываются в строку, они просто складываются в один общий лист
py.user.next
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
>>>
Через распаковку.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB