#python #spaces
#питон #пробелы
Вопрос:
Это домашнее задание, но я не ищу подачки. Сообщения об ошибках на самом деле еще не были объяснены, поэтому я не знаю, как это исправить или почему это происходит. Я знаю, что это происходит, когда я пытаюсь преобразовать s в целое число, но если я этого не делаю, я получаю другую ошибку, так что я немного растерялся… Я также пытался просмотреть некоторые другие сообщения с аналогичными проблемами, но я очень новичок в Python и не могу следовать объяснениям.
Я думаю, это довольно простая функция. Я пытался преобразовать его в целое число, чтобы я мог выполнить для него функцию диапазона, но, похоже, это не работает. Предполагается, что программа сначала поместит пробел между буквами в «Blusson Hall» и добавит дополнительный пробел, если он там уже есть, и, наконец, напечатает этот дизайн вокруг конечного продукта. Спасибо за любую помощь.
def spaced(s):
n = int (s)
for [i] in range (n):
if [i] != " ":
n == n [i] " "
if [i] == " ":
n == n [i] " "
print "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-"
print ". ."
print "- " str (n) " -"
print ". ."
print "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-"
#- you write (5 marks) -#
###################
#- Tester's code -#
###################
spaced("Blusson Hall")
Комментарии:
1. Ничто из того, что вы здесь написали, на самом деле не имеет никакого смысла. Что именно вы пытаетесь сделать? Во-первых, вы, похоже, пытаетесь использовать
[i]
как имя переменной; в имени переменной не может быть квадратных скобок.
Ответ №1:
Ваша проблема в том, что вы вызываете spaced
нечисловую строку, а затем пытаетесь преобразовать ее в целое число:
>>> int("Blusson Hall")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'Blusson Hall'
Если вам нужен диапазон, основанный на длине строки, вы можете использовать что-то вроде:
for i in range(len(s)):
как в:
>>> s = "Busson Hall"
>>> for i in range(len(s)):
... print i
...
0
1
2
3
4
5
6
7
8
9
10
И, в качестве дополнительной помощи, вы могли бы использовать s[i]
, чтобы получить символ i
‘th (ноль, являющийся первым, конечно) s
. Кроме того, вы, вероятно, захотите начать с пустой строки, а затем добавить к ней отдельные символы (из исходной строки и любых добавленных пробелов), чтобы постепенно наращивать ее, прежде чем возвращать.
Например, этот фрагмент дублирует каждый символ с двоеточием между ними:
>>> s = "paxdiablo"
>>> s2 = ""
>>> for i in range(len(s)):
... s2 = "%s%s:%s:" % (s2, s[i], s[i])
...
>>> print s2
p:p:a:a:x:x:d:d:i:i:a:a:b:b:l:l:o:o:
Если не считать написания кода для вас (который, разумно, вы решили не запрашивать), это, вероятно, вся помощь, которую я могу оказать (хотя не стесняйтесь задавать любые вопросы, которые вы хотите, и я дам дополнительные советы).
Комментарии:
1. Ого! Я ожидал получить уведомление по электронной почте о любых ответах, поэтому я никогда не проверял. xD Большое вам спасибо за ответы, я думаю, это действительно поможет мне подготовиться к выпускному экзамену.
Ответ №2:
я думаю, что вижу проблему.
вместо
n = int(s)
попробуйте
n = len(s)
Ответ №3:
Вы не можете преобразовать строку в целое число, и это то, что вы пытаетесь сделать при вводе:
n = int(s)
spaced принимает только один аргумент, ‘s’, и вы передаете строку, затем пытаетесь преобразовать ее в целое число. Я думаю, что вы, вероятно, хотите
n = len(s)
Но на самом деле вам это даже не нужно. Поскольку строки можно повторять, вы можете просто перебирать их, как:
for ch in s:
...do stuff here...
И если индекс внутри s для каждого символа полезен / проще, enumerate() сделает это за вас:
for idx, ch in enumerate(s):
...do stuff here...
Просто чтобы вы знали, на самом деле вам вообще не нужен цикл for. Поскольку строки являются итеративными, а ‘join()’ принимает итерацию в качестве аргумента, вы можете заменить почти весь свой код этим:
' '.join(s)
Это выглядит странно, если вы раньше мало что делали с Python. Я создал строку ‘ ‘, а join() — это метод, доступный для всех строк. Join принимает некоторый итерируемый объект (например, список или даже другую строку) и помещает строку, которая является объектом соединения, между каждым элементом итерируемого. Итак, в этом случае он помещает ‘ ‘ между каждым элементом строки ‘s’.
Комментарии:
1. Было бы неплохо узнать, почему я был -1 здесь. Есть ли проблема с ответом?