编写一个接受由字母组成的输入字符串的函数 字符并删除字符串的所有尾随空格和 返回它而不使用任何.strip()方法。例如,如果:
input_string ="您好"
那么你的函数应该返回一个输出字符串,例如: output_string ="你好"
这是我的代码:
def Trailing_White_Space (input_str):
count = 0
for i in range (len(input_str) + 1, 0):
if (input_str[i] != ' '):
count = i
break
new_s = input_str[len(input_str):count]
return (new_s)
#Main Program
input_str = " Hello "
result = Trailing_White_Space (input_str)
print (result)
我确信逻辑是正确的。我已经用可能的测试用例运行代码。我的代码仍然没有给出任何输出。请帮忙。
答案 0 :(得分:3)
以下是您遇到问题的主要原因:
input_str[len(input_str):count]
如果切片在len(input_str)
开始,那么你根本不会得到任何字符。您只需使用[:count]
,但您还没有正确获得count
。
为了从结尾循环,你必须使用范围的第三个参数来减少你的值,所以它必须是
for i in range(len(input_str) - 1, -1, -1):
你想要-1,每次减少一个值。您还希望从len-1
开始,否则您将获得无效索引,如果您希望结束为0,则需要传递-1,因为范围不会转到结束值。
现在,您可以正确使用count
和切片input_str
:
return input_str[:count]
答案 1 :(得分:3)
如果你想看到一个单行答案。就是这样:
from string import whitespace as ws
def remove_trailing_whitespace(t):
return t[:-next(i for i, c in enumerate(t[::-1]) if c not in ws)]
示例:
>>> print '"{}"'.format(remove_trailing_whitespace(' hello ')) # spaces
" hello"
>>> print '"{}"'.format(remove_trailing_whitespace(' hello\n')) # newline
" hello"
>>> print '"{}"'.format(remove_trailing_whitespace(' hello\t')) # tab
" hello"
>>> print '"{}"'.format(remove_trailing_whitespace(' hello \t\n ')) # space, newline, tab
" hello"
奖励:所有空白字符,而不仅仅是空间和最佳效率。
答案 2 :(得分:2)
更正指定new_s
变量的行。
new_s = input_str[:count+1]
此外,由于您的循环需要在每次迭代后递减。将0
替换为-1
。
for i in range(len(input_str)-1, -1, -1):
编辑:请参阅@InbarRose's answer以获得更好的选择。
答案 3 :(得分:1)
尝试使用re.sub()
import re
def remove(my_string):
new_string = re.sub(r'(.*?\w)([ \t\n\r]*)', r'\1', my_string)
return(new_string)
my_string = str(input())
modified = remove(my_string)
print(modified)
<强>解释强>
re
是python中用于正则表达式的模块。
re.sub(pattern, replacing_pattern, string_to_be_modified)
是语法。
此处,方括号中的任何字符(\w
- &gt;任意字符, - &gt;空格,
\t
- &gt;标签,\n
- &gt ;遇到替换为\r
(Nothing)时,换行符,''
- &gt;回车符。因此你得到一个剥离的字符串。
查找所有正则表达式匹配here
答案 4 :(得分:0)
range()
会上升。如果您希望它反向运行,则必须明确设置该步骤。另外,您不想从len(input_str)
+ 开始1.您想从len(input_str)
开始 - 1.对于任何可迭代的,x,x[len(x)]
未定义。 x[len(x) + 1]
甚至更远。要获取最后一个元素,您应该使用len(input_str) - 1
。此外,如果将第二个数字设置为0
,则不会评估第一个元素。 range()
的第二个参数是独占,所以你应该比你想象的更远一个数字:
def Trailing...
count = 0
for i in range(len(input_str) - 1, -1, -1):
...
答案 5 :(得分:0)
使用while
循环:
my_str = ' hello '
while len(my_str) > 0 and my_str[-1] == ' ':
my_str = my_str[:-1]
print(my_str) # prints: ' hello'
答案 6 :(得分:-6)
你的循环没有通过。你必须指明它正在递减。以下是工作代码。
DISTINCT