Как сдвинуть строку вправо на n символов

#python

Вопрос:

Я практиковался в кодировании и нашел это упражнение в Интернете:

Введите строку s и целое число n в двух строках соответственно и определите функцию для перемещения строки s вправо на n битов и влево, когда n-отрицательное число.

Если s-пустая строка «, выведите » независимо от n.

Ввод образца:

 s ='123456' n=3  

Пример вывода:

 Output result: 456123  

Я делал это до сих пор:

 def shiftall(s, n, left, right):  while left lt;= right:   if s[left] lt; 0 and s[right] lt; 0:  left  = n    elif s[left] gt; 0 and s[right] lt; 0:  s[left], s[right] =   s[right], s[left]  left  = n  right -= n    elif s[left] gt; 0 and s[right] gt; 0:  right -= n  else:  left  = n  right -= n   def display(s):  for i in range(len(s)):  print(s[i], end=" ")  print()   if __name__ == "__main__":  s = str(input('s='))  n = int(input('n='))  shiftall(s, 0, n - 1)  display(s)  

Но получаю ошибку и не могу с ней справиться:

 Traceback (most recent call last):  File "C:UsersUserPycharmProjectspythonProjectmain.py", line 31, in lt;modulegt;  shiftall(s, 0, n - 1) TypeError: shiftall() missing 1 required positional argument: 'right'   

Есть какие-нибудь предложения? ОТРЕДАКТИРОВАННЫЙ ВЫВОД ОШИБОК*

Комментарии:

1. Воспользуйся __name__ .

2. это if __name__ == "__main__":

3. Просто предложение, другой подход к этому таков: s = "123456" n = 3 n = n % len(s) while n: s = s[-1] s[:-1] n -= 1 print(s)

4. Вы можете добиться сдвига более лаконично, используя нарезку: s[-n:] s[:-n] это ваша сдвинутая строка.

5. Просто уточняю, вы не сдвигаете строку по битам , а просто меняете положение символа в строке. Каждый символ в строке ASCII равен 7 битам.

Ответ №1:

Это и есть __name__ , и нет name

Также вы можете сделать :

 s = s[n:]   s[:n]  

чтобы переместить строку.

Комментарии:

1. Извините, что я включил неправильную ошибку, теперь вы можете проверить это нормально

Ответ №2:

if name == "__main__": должно быть if __name__ == "__main__":

__name__ это специальная встроенная переменная python,соответствующая имени текущего модуля.

ИЗМЕНИТЬ: Новая ошибка:

shiftall(s, 0, n - 1) предоставляется только 3 аргумента:

  • s
  • 0, и
  • n-1

Ты забыл последний аргумент или ты имел в виду shiftall(s, 0, n, 1) ?

Похоже, что вы указываете n как 0, а вместо этого указываете его как значение «правильно»

Комментарии:

1. извините, что я включил неправильную ошибку, теперь вы можете проверить точную ошибку

2. @GreatDreamer обновлен ответ

Ответ №3:

Что именно является параметром left и right для чего? Вся информация содержится в номере n . Кроме того, строки являются неизменяемыми, поэтому вы не можете назначать строковые индексы, такие как s[foo] = "b" . Вам придется вернуть новую строку из вашей функции:

 def shiftall(s, n):  n %= len(s) # make sure you are within the bounds of s  return s[n:]   s[:n]    

Затем вы можете переназначить свой s результат с помощью функции:

 s = "123456" n = 3 s = shiftall(s, n) print(s) # 456123