需要在不使用函数的情况下将字符串设为大写

时间:2018-02-15 08:13:12

标签: python python-2.7

我正忙着一个软件工程训练营。有一个问题我正在努力回答,特别是因为它特别要求我不使用功能。这是个问题:

声明名为hero的变量等于Super Man
按以下方式打印出来:

S^U^P^E^R M^A^N

不要使用任何功能来执行此操作

通常我可以通过使用函数轻松完成此操作,但现在我完全被卡住了

7 个答案:

答案 0 :(得分:2)

嵌套列表理解可能有一个更短的方法,但这可能有效:

lower_to_upper = {'a': 'A', 'b': 'B', 'c': 'C', 'd': 'D', 'e': 'E', 'f': 'F', 'g': 'G', 'h': 'H', 'i': 'I', 'j': 'J', 'k': 'K', 'l': 'L', 'm': 'M', 'n': 'N', 'o': 'O', 'p': 'P', 'q': 'Q', 'r': 'R', 's': 'S', 't': 'T', 'u': 'U', 'v': 'V', 'w': 'W', 'x': 'X', 'y': 'Y', 'z': 'Z'}
hero = "Super Man"
string_list = ['^'+lower_to_upper[c] if c in lower_to_upper else '^'+c for c in hero ]
new_string = ""
for c in string_list:
    if c[1] == " ":
        c = " "
    new_string += c
new_string = new_string[1:]
print new_string

当然确实使用内部python函数,如__iter____next____getattr____getitem__等...但如果你试着去找那个兔子洞你会发现你实际上无法编写任何python代码而不至少隐式或明确地调用某些函数

答案 1 :(得分:1)

如果你考虑methods != functions在某些方面你可以拥有:

row.names(yourdf) <- yourdf$psid

打印:

hero = 'Super Man'
print(' '.join(['^'.join([s.upper() for s in word]) for word in hero.split()]))

S^U^P^E^R M^A^N .join().upper()都是字符串方法。除此之外,仅使用 list-comprehension

答案 2 :(得分:1)

您可以考虑使用ASCII值。 “a”和“A”的ASCII值之差可以添加到变量中。

hero = "Super man"
hero1 = ""

for i in hero:
    if ord(i) in range(97,122):
        p = chr(ord(i) - 32) + "^"
        hero1 = hero1 + p
    elif ord(i) in range(65,90):
        hero1 = hero1 + i + "^"
    else:
        hero1 = hero1 + i
print hero1[:-1]

答案 3 :(得分:1)

你可以试试这个 -

hero = 'Super Man'
# Add extra space at the end of main string to make each word in balance with
# word + ' ', so that last word can be manipulated easily.
hero += ' '
# declare new variable to hold manipulated string.
tmp = ''
i, length = 0, len(hero)
while i < length:
    ch = hero[i]
    # if current character is space then you need not to do anything just skip to next iteration.
    if ch == ' ':
        i += 1
        continue
    # if current character is in lowercase then make it in uppercase by using ASCII value
    # without using function,
    # ord() , this function gives ASCII integer value of character
    # chr() , this function gives character value for integer ASCII value
    if ch >= 'a' and ch <='z':
        ch = chr(ord(ch) - 32)

    # if next character is space then add character with space otherwise
    # add character with '^' symbol.
    if hero[i+1] == ' ':
        tmp += ch + ' '
    else:
        tmp += ch + '^'
    # increment the counter variable
    i += 1

print(tmp)

输出= S^U^P^E^R M^A^N

答案 4 :(得分:1)

假设您使用ASCII平台,或使用ASCII作为普通字母(包括latin1和utf8)的众多字符集之一,可以通过处理单个字符的代码来完成。大写字母A-Z的代码在[0x41-0x5A]范围内,小写字母a-z在[0x61-0x7A]范围内。好转换部分......

但是你只需要在字母之间添加^,而不是在字母和非字母字符之间添加hero = "Super Man" # take the code of any character in the string l = [ ord(x) for x in hero ] # convert lower case alphabet to upper case l = [ x - 0x20 if (x >= 0x61 and x <= 0x7A) else x for x in l ] # prepare a string for storing the result resul = "" caret = False # process characters... for i in l: if caret and i >= 0x41 and i <= 0x5A: resul += '^' resul += chr(i) caret = i >= 0x41 and i <= 0x5A # print the result print(resul) ,所以你需要记住前一个字符是否是字母并查看当前字符是否也是。现在我们可以在Python中开始编码:

S^U^P^E^R M^A^N

成功输出:

ord

但是这仍然使用一个函数:chr来获取一个字母的代码。 chr不是此处的函数,而是为其整数代码创建字符(类型bytes)的方法。在Python 3中,您可以使用ord类型来避免使用hero = "Super Man" # take the code of any character in the string l = bytes(hero) ...

nextButtonClicked

答案 5 :(得分:1)

既然他们已经为您提供了任务,并且您无法使用内置方法 我会说给定字符串做一个字典并表达你的

解决方案为: -

here = "Super Man"
a = {'S':'S','u':'U','p':'P','e':'E','a':'A','n':'N','M':'M','r':'R'}
b = '^'.join([a.get(x) for x in here if a.get(x)])
print(b) #expected output
  

取值为^ U ^ P ^ E ^ R ^ M ^ A ^ N

答案 6 :(得分:1)

通过 sting 操作,您可以使用 .split() 拆分为两个单词,然后使用 .join() 将其与特殊字符连接。为了避免出现“魔法字符串”,也许可以为特殊字符分配一个变量。

hero = "Super Man".upper()
word = hero.split()
special_char = "^"

有两种显示输出的方式S^U^P^E^R M^A^N

方法一:用特殊字符连接每个单词。

print(special_char.join(word[0])
      + " "
      + special_char.join(word[1]))

方法二:对每个单词分别赋值,然后.join() 加上特殊字符

word_1 = special_char.join(word[0])
word_2 = special_char.join(word[1])

print(word_1, word_2)