我是python的初学者。我在代码大战中遇到过这个问题。
Jaden以他通过Twitter提供的一些哲学而闻名。在Twitter上写作时,他几乎总是将每个单词都用于大写。 你的任务是将字符串转换为Jaden Smith的编写方式。这些字符串是来自Jaden Smith的实际引用,但是它们没有像他最初输入的那样大写。
示例:
Not Jaden-Cased:“如果我们的眼睛不真实,镜子怎么能成真呢”
Jaden-Cased:“如果我们的眼睛不真实,镜子怎么能真实”
这是我的尝试(我应该使用函数进行编码)
def toJadenCase(string):
l = len(string)
for i in range(0,l):
if string[i] == ' ':
y = string[i]
string[i+1] = chr(int(y)-32)
return srting
s = raw_input()
print toJadenCase(s)
运行时,出现以下错误
How can mirrors be real if our eyes aren't real (this is the input string)
Traceback (most recent call last):
File "jaden_smith.py", line 9, in <module>
print toJadenCase(s)
File "jaden_smith.py", line 6, in toJadenCase
string[i+1] = chr(int(y)-32)
ValueError: invalid literal for int() with base 10: ''
即使在google之后我也无法理解这些错误。任何帮助,将不胜感激。如果我的代码中的其他错误被突出显示并且建议使用更好的代码,我也会很棒。
提前致谢:D
答案 0 :(得分:1)
正如Goodies指出的那样,字符串不应该用作变量名
在Zen of Python之后,这在技术上是一个功能,完全符合您的目标:
def toJadenCase(quote):
return quote.title()
编辑:
处理撇号的修订版本:
import string
def toJadenCase(quote):
return string.capwords(quote)
答案 1 :(得分:0)
首先你必须要理解字符串是不可变的,所以你不能在字符串中设置一个字符,而是从旧字符串中构建一个新字符串并替换旧字符串(这通常可以在一次传递中完成,所以它是不是很大的复杂情况)。 其次,对于大多数这类操作,使用字符串对象本身的方法要好得多,而不是从头开始重做所有内容。
说这个问题还有一些复杂性,但是你想要的功能就是在模块字符串中:
import string
s="How can mirrors be real if our eyes aren't real"
newstring=string.capwords(s)
如果你喜欢(为什么?!)DIY解决方案(使用字符串方法):
newstring=' '.join([ss.capitalize() for ss in s.split()])
请注意,使用不带参数的split
会在任何空格(例如制表符等)上拆分字符串,我认为这是理想的行为。
答案 2 :(得分:0)
如果你想在不使用已经存在的功能的情况下这样做,我就是这样做的,我会解释一切:
假设您获得的字符串仅包含基于文本的单词,并且所有单词均以字符*
开头def toJadenCase(string):
words = string.strip().split()
# This first strips all empty spaces around the words in the text and then splits the string by spaces (default) otherwise you can add a character inside split in order to split it at the character. This returns a list of words in the sentence.
li = [] # initialize empty list
for word in words:
word = chr(ord(word[0])-32) + word[1:]
# So there's a couple of things going on here.
# I could use .upper() to upper case something (like word[0].upper() + word[1:]
# in order to get it but I wanted to do it without the use of that.
# That being said, ord just figures out the ascii number and subtracting
# 32 makes it uppercase. chr changes it back to a string.
# Then it can be concatenated to the rest of the word.
# Strings can be treated as lists in python so word[0] and word[1:] works
Also, word[1:] just means from the 1st index to the end.
li.append(word) # this appends the word to the list
return ' '.join(li) # this joins all of the words in the list with a space
现在,如果你想要更简洁的东西(你可以使用.capitalize()):
def toJadenCaseShort(string):
return ' '.join([x.capitalize() for x in string.strip().split()])
返回:
>>> abc("hello my friends")
'Hello My Friends'
它的作用基本上是它使用列表理解来剥离然后拆分单词,将它们大写,然后将它们与空格连接起来!
当然,您可以使用string.title()作为标记。说但那有什么好玩的? :)
答案 3 :(得分:0)
以下是我的答案
import string
def toJadenCase(str):
quote = string.capwords(str)
return quote #Do not use print(quote) as it adds spaces
def toJadenCase(str): quote = string.capwords(str) return quote#不要使用print(quote),因为它会添加空格