Ошибка значения: недопустимый литерал для int() с основанием 10: ‘Blusson Hall’

#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 здесь. Есть ли проблема с ответом?