Программа, которая принимает на входе алфавит и выводит следующий символ в алфавите. - PullRequest
1 голос
/ 11 июля 2020
char = str(input())
char1 = ord(char) + 1
print(chr(char1))
if char == "Z":
  print("A")

это код, который я написал, когда ввожу Z, он появляется [A, я не понимаю, откуда эта квадратная скобка, не могли бы вы объяснить, почему это появляется, и что я могу сделать, чтобы исправить это, спасибо

Ответы [ 3 ]

1 голос
/ 11 июля 2020

Проблема заключается в том, что строка print(chr(char1)) будет выполняться, даже если char == "Z", потому что она не находится в блоке else. Квадратная скобка возникает из-за того, что [ является следующим символом ASCII после Z. Один из способов исправить ваш код - написать следующее:

char = str(input())
char1 = ord(char) + 1

if char == "Z":
  print("A")
else:
  print(chr(char1))
0 голосов
/ 11 июля 2020

Если вам нужно немного более элегантное и гибкое решение, которое позволяет избежать условий if, вы можете предварительно определить диапазон символов, которые вы хотите циклически перебирать, и использовать оператор по модулю %, чтобы ваш +1 автоматически проходил через диапазон ASCII, не выпадая на [, который является символом после Z.

chr_range_start = ord('A')  # Set your first character 
chr_range_end = ord('Z')    # Set your last character
chr_range = chr_range_end - chr_range_start

char = str(input())
char1 = chr_range_start + ((ord(char) + 1 - chr_range_start) % (chr_range + 1))
print(chr(char1))

Если вы решили, что хотите перебирать строчные буквы az вместо AZ, вы можете просто заменить ' A 'с' a 'и' Z 'с' z 'в первых двух строках. Вы можете сделать это для любого диапазона символов ASCII.

Если вы хотите изменить шаг на +2 символа, вы просто измените первый +1 (второй должен оставаться как есть):

char1 = chr_range_start + ((ord(char) + 2 - chr_range_start) % (chr_range + 1))

Это даст вам AC и ZΒ. Если вы сделали это с условием if, вам придется изменить его на:

if char == 'Y':
    char1 = 'A'
elif char == 'Z':
    char1 = 'B'

Это может стать громоздким. С помощью приведенного выше кода вы можете произвольно изменить свой диапазон, а также значение шага, не меняя код.

0 голосов
/ 11 июля 2020

Вам не хватает преобразования в chr после добавления 1, и вы можете воспользоваться тернарным оператором в Python:

char = input() # you don't need to convert to str, input returns a string
print("A" if char == "Z" else chr(ord(char) + 1))

Синтаксис:

true_val if condition else false_val
  • condition: логическое выражение, которое оценивается как True или False.
  • true_val: значение, которое присваивается, если выражение оценивается как True.
  • false_val: значение, которое будет присвоено, если выражение оценивается как False.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...