-1

我正在尝试在不使用任何内置函数(除 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() expected a character, but string of length 8 found.我在这里遗漏了什么?

4

7 回答 7

2

您需要为输入字符串的每个字符执行 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ÉΛ
于 2017-04-22T10:28:51.300 回答
1

在我看来,最好的方法是使用代表字母表的辅助字符串,如果您不想使用chr()and 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

这也处理标点符号,例如;or .


更新:

根据 OP 的要求,这是一个没有的版本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'))
于 2017-04-22T10:29:00.160 回答
1

这是一个不使用内置函数将字符串转换为大写的程序:

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="")
于 2018-05-28T07:32:13.803 回答
0
char=input("Enter lowercase word :")
for letter in char:
    s=ord(letter)
    if s>=97 and s<=122:
        print(chr(s-32),end=" ")
于 2020-02-28T14:24:50.410 回答
0

下面的简化代码有助于使用简单的计算将小写字母转换为大写字母

代码 :

def toUppercase(string):
    convertedCharacter = ''
    for i in string: 
         convertCharacter += chr( ( (ord(i)) -32) ) 
    return convertCharacter
于 2019-08-05T03:18:59.770 回答
0

ord() - 返回单字符字符串的 Unicode 代码点。

您必须发送一个字符串作为参数。在这里,您发送的字符串“abcd”有 4 个字符,这会导致问题。将每个字符分别发送到函数,因此对函数进行 4 次调用以获得结果。

于 2017-04-22T10:35:24.037 回答
0
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")
于 2020-12-02T17:12:57.047 回答