Преобразование строки в верхний регистр без встроенных методов

Я пытаюсь выполнить преобразование строки в нижний регистр в верхний регистр без использования встроенных функций (кроме ord () и char()). Следуя логике, представленной здесь в другой ветке, я придумал это.

def uppercase(str_data):
   ord('str_data')
   str_data = str_data -32
   chr('str_data')
   return str_data
print(uppercase('abcd'))

Однако я получаю сообщение об ошибке: TypeError: ord() ожидал символ, но найдена строка длиной 8. Чего мне здесь не хватает?

4 ответа

Решение

Вам необходимо выполнить ord() для каждого символа входной строки. вместо входной строки:

def uppercase(str_data):
    return ''.join([chr(ord(char) - 32) for char in str_data if ord(char) >= 65])

print(uppercase('abcdé--#'))
>>> ABCDÉ

Без присоединения:

def uppercase(str_data):
    result = ''
    for char in str_data:
        if ord(char) >= 65:
            result += chr(ord(char) - 32)
    return result
print(uppercase('abcdé--#λ'))
>>> ABCDÉΛ

Программа для convert строка в верхний регистр без использования inbuiltfunction

Str1=input("Enter the string to be converted uppercase: ")

for i in range (0,len(Str1)):

   x=ord(Str1[i])
   if x>=97 and x<=122:
       x=x-32
   y=chr(x)
   print(y,end="")

На мой взгляд, лучший способ - использовать вспомогательную строку, представляющую алфавит, если вы не хотите использовать chr() а также ord():

def toUppercase(s):
    alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    result = ''
    for x in s:
        if x not in alphabet or alphabet.index(x)>=26:
            result += x
        else:
            result += alphabet[alphabet.index(x)+26]
    return result

Это также обрабатывает пунктуацию, такую ​​как ; или же .,


Обновить:

Согласно запросу ОП, это версия без index():

def toUppercase(s):
    alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    result = ''
    for x in s:
        for pos in range(52):
            if alphabet[pos] == x:
                i = pos
        if x not in alphabet or i>=26:
            result += x
        else:
            result += alphabet[i+26]
    return result

print(toUppercase('abcdj;shjgh'))
def uppercase(str_data):
   ord('str_data')
   str_data = str_data -32
   chr('str_data')
   return str_data
print(uppercase('abcd'))

в этом коде ord принимает один символ в качестве аргумента, но вы указали более одного, поэтому он показывает ошибку. Возьмите один символ за раз, преобразуйте его в верхний регистр и сделайте одну строку, как показано ниже.

def convert_to_lower(string):
    new="" 
    for i in string:
       j=ord(i)-32  #we are taking the ascii value because the length of lower 
             #case to uppercase is 32 so we are subtracting 32

       if 97<=ord(i)<=122 :  #here we are checking whether the charecter is lower
                      # case or not if lowercase then only we are converting into
                      #uppercase
           new=new+chr(j)
       else:  #if the character is not the lowercase alplhaber we are taking as it is
           new=new+i
    print(new)

convert_to_lower("hello world")
char=input("Enter lowercase word :")
for letter in char:
    s=ord(letter)
    if s>=97 and s<=122:
        print(chr(s-32),end=" ")

ord()- Возвращает кодовую точку Unicode для строки из одного символа.

Вы должны отправить одну символьную строку в качестве аргумента. Здесь вы отправляете строку 'abcd', которая имеет 4 символа, которая вызывает проблему. Отправьте каждый символ отдельно в функцию и, таким образом, сделайте 4 вызова функции, чтобы получить результат.

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

код:

def toUppercase(string):
    convertedCharacter = ''
    for i in string: 
         convertCharacter += chr( ( (ord(i)) -32) ) 
    return convertCharacter
Другие вопросы по тегам