我正忙着一个软件工程训练营。有一个问题我正在努力回答,特别是因为它特别要求我不使用功能。这是个问题:
声明名为hero
的变量等于Super Man
按以下方式打印出来:
S^U^P^E^R M^A^N
不要使用任何功能来执行此操作
通常我可以通过使用函数轻松完成此操作,但现在我完全被卡住了
答案 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)