ValueError: недопустимый литерал для int () с основанием 10: «Blusson Hall» - PullRequest
2 голосов
/ 02 ноября 2011

Это это домашнее задание, но я не ищу раздаточный материал. Сообщения об ошибках еще не были объяснены, поэтому я не знаю, как это исправить или почему это происходит. Я знаю, что это случается, когда я пытаюсь сделать 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")

Ответы [ 3 ]

6 голосов
/ 02 ноября 2011

Ваша проблема в том, что вы вызываете 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 '-ый (нуля, конечно, первый) символ 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:

Если не написать код для вас (который, по вашему разумению, вы решили не просить), это, вероятно, вся помощь, которую я могу оказать (хотя не стесняйтесь задавать любые вопросы, которые вам нужны, и я предложу дальнейшие советы).

2 голосов
/ 02 ноября 2011

Мне кажется, я вижу проблему.

вместо

n = int(s)

попробовать

n = len(s)
0 голосов
/ 02 ноября 2011

Вы не можете преобразовать строку в целое число, и это то, что вы пытаетесь сделать, когда набираете:

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 () - это метод, который есть во всех строках. Объединение берет некоторый повторяемый объект (например, список или даже другую строку) и помещает строку, которая является объектом объединения между каждым элементом повторяемого элемента. Таким образом, в этом случае он помещает '' между каждым элементом строки 's'.

...