我正在使用Python(3.x)为作业创建一个简单的程序。它需要一个多行输入,如果有多个连续的空格,它会将它们删除并用一个空格替换它。 [这是最简单的部分。]它还必须打印整个输入中最连续的空格的值。
示例:
input = ("This is the input.")
应打印:
This is the input.
3
我的代码如下:
def blanks():
#this function works wonderfully!
all_line_max= []
while True:
try:
strline= input()
if len(strline)>0:
z= (maxspaces(strline))
all_line_max.append(z)
y= ' '.join(strline.split())
print(y)
print(z)
if strline =='END':
break
except:
break
print(all_line_max)
def maxspaces(x):
y= list(x)
count = 0
#this is the number of consecutive spaces we've found so far
counts=[]
for character in y:
count_max= 0
if character == ' ':
count= count + 1
if count > count_max:
count_max = count
counts.append(count_max)
else:
count = 0
return(max(counts))
blanks()
据我所知,这可能非常低效,但似乎几乎可行。我的问题是:我想,一旦循环完成追加到all_lines_max,打印该列表的最大值。但是,如果没有在每一行上执行,那么似乎没有办法打印该列表的最大值,如果这有意义的话。关于我复杂代码的任何想法?
答案 0 :(得分:1)
只需打印max
的{{1}},就在您当前打印整个列表的位置:
all_line_max
但请将其留在 top 级别(所以dedent一次):
print(max(all_line_max))
并删除def blanks():
all_line_max = []
while True:
try:
strline = input()
if strline:
z = maxspaces(strline)
all_line_max.append(z)
y = ' '.join(strline.split())
print(y)
if strline == 'END':
break
except Exception:
break
print(max(all_line_max))
调用,该调用会打印每行的最大空格数。
每次找到空格时,您的print(z)
功能会向maxspaces()
列表添加count_max
;不是最有效的方法。你甚至不需要在那里保留一份清单; counts
需要移动 out 循环,然后才能正确反映最大空间数。您也不必将句子转换为列表,您可以直接循环遍历字符串:
count_max