Назначение Python, включающее преобразование символов в строке в числа - PullRequest
0 голосов
/ 03 апреля 2019

Добрый день, у меня возникли некоторые проблемы при попытке запустить этот пакет кода, который включает в себя преобразование отдельных буквенных символов в строке в числа.Конкретные буквы алфавита разделены на отдельные группы, основанные на порядке их расположения, как показано в коде.

Вот что у меня пока есть:

def main():

    gSNumberConversion()

def gSNumberConversion():

   phoneNum = input('Please Enter the number in the format of XXX-XXX-XXXX\n:')

   phoneNum = phoneNum.split('-')

   for var in phoneNum[1:2]:

       for char in var:
        if char == 'A' or char == 'B' or char == 'C':
            char = '2'
        elif char == 'D' or char == 'E' or char == 'F':
            char = '3'
        elif char == 'G' or char == 'H' or char == 'I':
            char = '4'
        elif char == 'J' or char == 'K' or char == 'L':
            char = '5'
        elif char == 'M' or char == 'N' or char == 'O':
            char = '6'
        elif char == 'P' or char == 'Q' or char == 'R' or char == 'S':
            char = '7'
        elif char == 'T' or char == 'U' or char == 'V':
            char = '8'
        elif char == 'W' or char == 'X' or char == 'Y' or char == 'Z':
            char = '9'

            print(phoneNum)

main()

Код должен проходить по номеру телефона, в котором скрыта небольшая фраза, такая как "555-GET-FOOD " и возвращает его числовой эквивалент.И пока ввод не проходит, программа не возвращает численно замененную версию числа

Ответы [ 4 ]

0 голосов
/ 03 апреля 2019

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

def main():
    gSNumberConversion()

def gSNumberConversion():

  phoneNum_inputted = input('Please Enter the number in the format of XXX-XXX-XXXX\n:')

  phoneNum = [y for x in phoneNum_inputted.split('-') for y in x]

  real_num = ""
  for char in phoneNum:
    if char == 'A' or char == 'B' or char == 'C':
        real_num += '2'
    elif char == 'D' or char == 'E' or char == 'F':
        real_num += '3'
    elif char == 'G' or char == 'H' or char == 'I':
        real_num += '4'
    elif char == 'J' or char == 'K' or char == 'L':
        real_num += '5'
    elif char == 'M' or char == 'N' or char == 'O':
        real_num += '6'
    elif char == 'P' or char == 'Q' or char == 'R' or char == 'S':
        real_num += '7'
    elif char == 'T' or char == 'U' or char == 'V':
        real_num += '8'
    elif char == 'W' or char == 'X' or char == 'Y' or char == 'Z':
        real_num += '9'
    else:
        real_num += char

  print(real_num)

main()

Выход:

Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
Please Enter the number in the format of XXX-XXX-XXXX
:555-GET-FOOD
555
0 голосов
/ 03 апреля 2019

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

newPhoneNum="" #new empty variable to add the result to
var = phoneNum[1:2] #extract the part of the phone that you will use


for index in len(var)):
        if var[index] == 'A' or var[index] == 'B' or var[index] == 'C':
            newPhoneNum+='2'
        .
        .  
        etc 
        print(phoneNum[0]+newPhoneNum)
0 голосов
/ 03 апреля 2019

Вы можете заранее создать словарь

char_dict = { 
    'A':2,
    'B':2,
    'C':2,
    'D':3,
    'E':3,
    'F':3,
    'G':4,
    'H':4,
    'I':4,
    'J':5,
    'K':5,
    'L':5,
    'M':6,
    'N':6,
    'O':6,
    'P':7,
    'Q':7,
    'R':7,
    'S':7,
    'T':8,
    'U':8,
    'V':8,
    'W':9,
    'X':9,
    'Y':9,
    'Z':9
}

# take input
input_str = input()

# initialise result string
result = ''

# loop over input
for val in input_str:
    if val in char_dict:
        # take the number equivalent from dict
        result = result + str ( char_dict.get(val) )
    # other wise take the number or -
    else:
        result += result + val

print(result)

надеюсь, это поможет.

0 голосов
/ 03 апреля 2019

Первая ошибка: вы печатали phoneNum во внутреннем цикле, тогда как вы присваивали преобразованную цифру переменной char.

Во-вторых phoneNum[1:2] не правильно, если вы хотите преобразовать полный ввод.

Вот обновленный код -

def main():

    gSNumberConversion()

def gSNumberConversion():

   phoneNum = input('Please Enter the number in the format of XXX-XXX-XXXX\n:')

   phoneNum = phoneNum.split('-')
   print(phoneNum)

   for var in phoneNum: # mistake 2

       for char in var:
        if char == 'A' or char == 'B' or char == 'C':
            char = '2'
        elif char == 'D' or char == 'E' or char == 'F':
            char = '3'
        elif char == 'G' or char == 'H' or char == 'I':
            char = '4'
        elif char == 'J' or char == 'K' or char == 'L':
            char = '5'
        elif char == 'M' or char == 'N' or char == 'O':
            char = '6'
        elif char == 'P' or char == 'Q' or char == 'R' or char == 'S':
            char = '7'
        elif char == 'T' or char == 'U' or char == 'V':
            char = '8'
        elif char == 'W' or char == 'X' or char == 'Y' or char == 'Z':
            char = '9'

        print(char) ## mistake 1

main()
...