我的程序有问题,应该通过使用一个字符串的第一个单词和一个没有第一个单词打印字符串的函数来反转字符串。
def first_word(string):
first_space_pos = string.find(" ")
word = string[0:first_space_pos]
print(word)
def last_words(string):
first_space_pos = string.find(" ")
words = string[first_space_pos+1:]
print(words)
def reverse(string):
words = string.count(" ") +1
count = 1
string_reversed = ""
while count < words:
string_reversed = first_word(string) + str(" ") + string_reversed
string = last_words(string)
count += 1
print(string_reversed)
我得到的错误是:
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
以及这一行:
string_reversed = first_word(string) + str(" ") + string_reversed
感谢任何帮助。感谢。
答案 0 :(得分:2)
first_word
不会返回任何内容,因此会生成None
值,并且不能将其用作带字符串的+操作数。您可能想要返回word
。
答案 1 :(得分:0)
您已混淆打印和返回。 打印将值转储到输出(您的屏幕),但不会更改内存中的任何数据,并且不会对该值进行任何进一步操作。 返回将其作为函数值发回。
正如编译器警告告诉我的那样,你的函数都没有向调用者返回任何值。因此,你得到&#34;无&#34;作为值,你的调用程序burfs。用返回替换所有这些终端打印语句,您的代码运行良好:
def first_word(string):
first_space_pos = string.find(" ")
word = string[0:first_space_pos]
return word
def last_words(string):
first_space_pos = string.find(" ")
words = string[first_space_pos+1:]
return words
def reverse(string):
words = string.count(" ") +1
count = 1
string_reversed = ""
while count < words:
string_reversed = first_word(string) + str(" ") + string_reversed
string = last_words(string)
count += 1
return string_reversed
print reverse("Now is the time for all good parties to come to the aid of man.")
输出:
of aid the to come to parties good all for time the is Now
答案 2 :(得分:0)
您将print
的功能与return
混淆。
print
是一个python函数,它会将括号中的任何内容打印到stdout
或另一个输出流(如果明确指定)。
return
是将您想要的内容作为函数值发送回来的语句。
IE:
>>> def foo():
print('foo')
>>> def bar():
return 'bar'
>>> u = foo()
foo
>>> u
>>> type(u)
<class 'NoneType'>
>>> u = bar()
>>> u
'bar'
>>> type(u)
<class 'str'>
另外,你可以用python str[::-1]
>>> def stringReverse(s):
print(' '.join(s.split()[::-1]))
>>> stringReverse('Hello this is how to reverse a string')
string a reverse to how is this Hello
这只是一个建议,但是你可能会尝试以特定的方式进行字符串反转。正如Prune所说,如果用print
return
,你的功能就可以正常工作
答案 3 :(得分:0)
您的两种方法first_word()
&amp; last_words()
不返回任何内容,因此会创建一个无法使用字符串添加的空值。使用return
代替print
,这样会很好。