Преобразование строки в верхний регистр без встроенных методов
Я пытаюсь выполнить преобразование строки в нижний регистр в верхний регистр без использования встроенных функций (кроме 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
строка в верхний регистр без использования inbuilt
function
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