3

我正在在线学习 Python 课程简介

问题如下:

对于这个程序,输入的第一行是一个整数宽度。然后,有几行文字;“END”行表示文本的结束。对于每一行文本,您需要打印出它的居中版本,通过在左右添加句点 .. 来使每行文本的总长度为宽度。(所有输入行的长度最多为宽度。)居中意味着如果可能,添加到左侧和添加到右侧的句点数应该相等;如果需要,我们允许左侧比右侧多一个句点。例如,对于输入

13
Text
in
the
middle!
END

正确的输出是

.....Text....
......in.....
.....the.....
...middle!...

给出的提示是:

对于 L 的输入行长度,您应该在右侧添加 (width-L)\\2 个句点

到目前为止,这是我的代码:

width = int(input())
s1 = input()

periods_remain = width - len(s1)
L = periods_remain
periods_rtside = (width-L)//2
periods_leftside = width - periods_rtside
periods_rt_str = '.' * periods_rtside
periods_left_str = '.' * periods_leftside
line1 = periods_left_str + s1 + periods_rt_str

我的 line1 结果看起来像“...........Text..”而不是......Text....

可以在这里运行

我的问题似乎是 L。我不确定如何定义 L。谢谢!

4

3 回答 3

4

您可以str.center为此使用:

>>> lis = ['Text', 'in', 'the', 'middle!', 'END']
>>> for item in lis:
...     print item.center(13, '.')
...     
.....Text....
......in.....
.....the.....
...middle!...
.....END.....

format

for item in lis:
    print format(item,'.^13')
...     
....Text.....
.....in......
.....the.....
...middle!...
.....END.....

您的代码的工作版本:

lis = ['Text', 'in', 'the', 'middle!', 'END']
width = 13
for s1 in lis:
    L = len(s1)                                    #length of line
    periods_rtside = (width - L)//2                #periods on the RHS
    periods_leftside = width - periods_rtside - L  #peroids on the LHS
    periods_rt_str = '.' * periods_rtside
    periods_left_str = '.' * periods_leftside
    line1 = periods_left_str + s1 + periods_rt_str
    print line1

输出:

.....Text....
......in.....
.....the.....
...middle!...
.....END.....
于 2013-09-04T17:56:42.680 回答
0

对于那些仍在为这个棘手的问题苦苦挣扎的人,这是我在 Python 3 shell 中工作的代码,即使它在http://cscircles.cemc.uwaterloo.ca/8-remix/中仍然失败

First_line = input("First input: ")
width = int(First_line)

while True:
    s1 = input("Second input: ")
    if s1 != 'END':
        L = len(s1)                                                             #length of line
        periods_rtside = (width - L)//2                                     #periods on the RHS
        periods_leftside = width - periods_rtside - L                   #periods on the LHS
        periods_rt_str = '.' * periods_rtside
        periods_left_str = '.' * periods_leftside
        line1 = periods_left_str + s1 + periods_rt_str
        print(line1)
    else:
        break

要让它在http://cscircles.cemc.uwaterloo.ca/8-remix/ 控制台中工作,您需要将前 2 行更改为

宽度 = int(输入())

和 s1 到 s1 = input()

并通过单击“输入测试输入”按钮提供您自己的测试输入

于 2015-04-30T09:53:26.823 回答
0

只需对上述代码进行一些小的更改,它就可以在评分器中使用。

     width = int(input())
     s1 = input()
     while s1 != "END":
        L = len(s1)                                                                  
        periods_rtside = (width - L)//2                                     
        periods_leftside = width - periods_rtside - L                   
        periods_rt_str = '.' * periods_rtside
        periods_left_str = '.' * periods_leftside
        line1 = periods_left_str + s1 + periods_rt_str
        print(line1)
        s1 = input()
于 2016-10-19T01:46:15.333 回答