2013-11-18 4 views
-2

Инструкции: Первый шаг - написать функцию lowerChar (char), которая может возвращать результат преобразования одного символа в нижний регистр. Это необходимо сделать следующее:Преобразование одного символа в нижний регистр

, если входной символ символ является заглавной буквой (между «A» и «Z»), он должен вернуть версию строчной буквы (между «а» и 'z'). Во всех остальных случаях он должен возвращать тот же символ, который был введен .

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

все у меня есть -

def lowerChar(char): 
+0

Если это все, что у вас есть, то вы не имеете вообще ничего, кроме уступки. – abarnert

ответ

2
In [26]: 'A'.lower() 
Out[26]: 'a' 

In [27]: 'a'.lower() 
Out[27]: 'a' 

Так что вы после этого:

def lowerChar(char): 
    return char.lower() 

В качестве альтернативы, вы можете futz вокруг со значениями ASCii как это:

def lowerChar(char): 
    if 97 <= ord(char) <= 122: # lower case 
    return char 
    elif 65 <= ord(char) <= 90: # upper case 
    return chr(ord(char)-32) 
    else: # not a letter of the alphabet 
    return char 
+0

Учитывая, что это, очевидно, какое-то задание для изучения основ программирования, я не думаю, что вы действительно ожидаете использовать такой простой выход из проблемы. Это похоже на то, что кто-то сказал написать строковый класс, а затем просто подклассифицировал класс строк, идущий с компилятором. :) – Mario

+0

@Mario: Я обновляюсь с помощью 'ord' и' chr', поскольку мы говорим – inspectorG4dget

+0

Хотя на нем вы, вероятно, должны сделать это шаг за шагом, потому что, как написаны подсказки, это может помочь понять весь процесс , – Mario

0
def lowerChar(char): 
    if len(char) != 1 or not isinstance(char, basestring): 
     raise TypeError 
    if char >= 'A' and char <= 'Z': 
     return char.lower() 
    else: 
     return char 

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

+0

Это не сжимает буквы только «(от А до Я)» - «Верх» буквы, подобные 'Æ', по-прежнему будут преобразованы в нижнюю, используя эту реализацию. –

+0

'if len (char)! = 0 или нет isinstance (char, basestring):' Не должно ли это 0 быть 1? –

+0

@SamyBencherif Да, он должен! Спасибо, что поймал это. –

0

Вот хороший простой способ сделать это:

import string 

def lowerChar(char): 
    if char in string.ascii_uppercase: 
     return char.lower() 
    else: 
     return char 

Объяснения Так в основном, вы проверяете, если персонаж в прописных значений ASCII-table - если она есть, то вы возвращаете строчную версию символа. Если нет, вы просто возвращаете символ «как есть».

+0

Выполнение теста, а затем просто вызов 'c.lower()' звучит немного устаревшим. Либо сделайте проверку, а затем ручное преобразование или просто передайте результат 'c.lower()'. – Mario

+0

Проблема с * not * проверкой того, является ли строка в верхнем регистре ASCII-таблицы, состоит в том, что не-английские буквы, такие как Ö, Æ, Å или Ø, все равно будут преобразованы в нижний регистр - если ответ должен быть прочитан буквально, только символы между А и Z должны быть преобразованы. –

+1

Точка взята, хотя я бы предположил, что такие основные задачи даже не будут пытаться объяснить кодовые страницы или любые другие расширенные материалы. ;) – Mario

1

Nicer не было трудно закодированные константы

def lowerChar(c): 
    if 'A' <= c <= 'Z': 
     return chr(ord(c) - ord('A') + ord('a')) 
    else: 
     return c 

другой способ без chr и ord

from string import ascii_lowercase, ascii_uppercase 
def lowerChar(c): 
    if 'A' <= c <= 'Z': 
     return ascii_lowercase[ascii_uppercase.index(c)] 
    else: 
     return c 
Смежные вопросы