PAT (Basic Level) Practice 1036 跟奥巴马一起编程 Python解法

目录

    • 一、题目
    • 二、输入输出
    • 三、样例
    • 四、题目分析

一、题目

美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!

二、输入输出

输入格式:
输入在一行中给出正方形边长 N(3≤N≤20)和组成正方形边的某种字符 C,间隔一个空格。

输出格式:
输出由给定字符 C 画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的 50%(四舍五入取整)。

三、样例

输入样例:
10 a
输出样例:
aaaaaaaaaa
a a
a a
a a
aaaaaaaaaa

四、题目分析

这道题目原理很简单,但是拐了个弯。

1.思路看似简单,但初次编写代码可能会陷入坑中:四舍五入陷阱(以下为仅使用round函数):
PAT (Basic Level) Practice 1036 跟奥巴马一起编程 Python解法_第1张图片

WA代码:



a = input().split()
N, C = int(a[0]), a[1]
for i in range(round(N/2)):
    for j in range(N):
        if ((i!=0) and i!=(round(N/2)-1)) and ((j!=0) and (j!=N-1)):
            print(end=' ')
        else:
            print(str(C),end='')
    print("")

2.正解:
先回顾Python round()函数,python3(注意python2 和 3的round()是不一样的,这里仅以python3作说明)中round()对浮点数的取舍遵循的是“四舍六入五平分”,“五平分”就是根据取舍的位数前的小数奇偶性来判断,奇偶平分,符合公平性原则(四舍五入不是公平的),这样一来也就保证了在数据量较大的情况下,筛选数据的真实性。
因此利用该特性,编写一个万能四舍五入式即可。

AC代码:

def new_round(a, b):
    if isinstance(a, float):
        if str(a)[::-1].find('.') <= b:
            return(a)
        if str(a)[-1] == '5':
            return(round(float(str(a)[:-1]+'6'), b))
        else:
            return(round(a, b))
    else:
        return(round(a, b))
a = input().split()
N, C = int(a[0]), a[1]
for i in range(int(new_round(N/2, 0))):
    for j in range(N):
        if ((i!=0) and i!=(int(new_round(N/2, 0))-1)) and ((j!=0) and (j!=N-1)):
            print(end=' ')
        else:
            print(str(C),end='')
    print("")

你可能感兴趣的:(PTA(Programming,T,Assistant),python,开发语言,后端)