Ввод более 1 смены в программе
Привет, мне тяжело пытаться включить в свою программу более 1 смены. Цель состоит в том, чтобы назначить величину сдвига для каждого персонажа, например:
statement = input("Enter string: ")
shift = input("Enter shift amounts: ")
Например, если
statement = "Hello"
shift = 5 6 7
Как мне присвоить это 5 число H, 6 - E, 7 - l, затем снова 5 - l и 7 - o
Я думаю, что мне нужно сделать это в списке, так что это то, что я до сих пор:
for char in statement:
char[0] = shift[0]
1 ответ
Попробуй это:
#!/usr/bin/python
statement = raw_input("Enter string: ")
shift = raw_input("Enter shift amounts: ").split()
for index, char in enumerate(statement):
if index < len(shift):
print chr(ord(char) + int(shift[index])),
else:
print char,
Написан для Python 2 и не выполняет проверку ошибок при вводе пользователем, но должен работать.
Изменить: И версия Python3, так как похоже, что вы используете это:
#!/usr/bin/python
statement = input("Enter string: ")
shift = input("Enter shift amounts: ").split()
for index, char in enumerate(statement):
if index < len(shift):
print(chr(ord(char) + int(shift[index])), end='')
else:
print(char, end='')
print()
В обеих версиях, если число целых чисел, предоставленных пользователем для сдвига, меньше размера строки, значение сдвига принимается равным 0. Если вы хотите, вы можете выполнить тест, чтобы увидеть, меньше ли число целых чисел сдвига, предоставленных пользователем, меньше длины строки, и выдать ошибку или запросить ввод у пользователя снова.
Редактировать 2: В соответствии с запросом в комментариях, этот код перезапускает сдвиг вместо предположения, что это 0:
#!/usr/bin/python
statement = input("Enter string: ")
shift = input("Enter shift amounts: ").split()
for index, char in enumerate(statement):
index = index % len(shift)
print(chr(ord(char) + int(shift[index])), end='')
print()
Редактировать 3: как требуется в комментариях, этот код гарантирует, что пользовательский ввод только аз или аз, и находится в функции.
#!/usr/bin/python
import sys
from string import ascii_letters as alphabet
def enc_string(statement, shift):
# Make sure user entered valid shift values
try:
shift = [ int(val) for val in shift.split() ]
except ValueError:
print("Error: All shift values must be integers")
sys.exit(1)
# Make sure all chars in statement are valid
for char in statement:
if char not in alphabet:
print("Error: all characters in string must be a-z or A-Z")
sys.exit(1)
# Start putting together result
res = "Result: "
# Convert statement
for index, char in enumerate(statement):
shift_to_use = shift[index % len(shift)]
index_of_char = alphabet.index(char)
index_of_new_char = (index_of_char + shift_to_use) % len(alphabet)
res += alphabet[index_of_new_char]
return res
statement = input("Enter string: ")
shift = input("Enter shift amounts: ")
print(enc_string(statement, shift))