前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >python中print函数的输出问题(空格,制表符)

python中print函数的输出问题(空格,制表符)

作者头像
用户7886150
修改2021-01-25 10:26:31
修改2021-01-25 10:26:31
2.6K0
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: Python print()

前言 

在做编程题目时,为什么程序的实际输出和预期输出“看上去明明一模一样”,但是就是提示有误呢??? 

在此记录。 

问题描述 

最近在看educoder实训平台上的一道编程题,题目要求大概是: 

educoder中判断程序是否正确,是通过输出结果的字符串匹配来判断的。 然而涉及到这个制表符,空格的输出问题时,很容易出错。 

比如: 我的程序一开始是这样: 

def day(y, m, d):#计算y年m月d日是星期几

    # 请在下面编写代码

    y0=y-(14-m)//12

    x=y0+y0//4-y0//100+y0//400

    m0=m+12*((14-m)//12)-2

    d0=(d+x+(31*m0)//12)%7

    # 请不要修改下面的代码

    return d0

def isLeapYear(year): #判断year年是否闰年

    # 请在下面编写代码

    a=year%4

    b=year%100

    if(a==0 and b!=0):

        isLeapYear="True"

    else:

        isLeapYear="False"    

    # 请不要修改下面的代码

    return isLeapYear

def calendar(y, m): #打印y年m月日历

    print('       {}年{}月'.format(y,m))

    print('Su\tM\tTu\tW\tTh\tF\tSa')

    # 请在下面编写代码

    if(isLeapYear(y) is "True"):

        list_1=[31,29,31,30,31,30,31,31,30,31,30,31]

        firstday=day(y,m,1)

        count=0

        while(count<firstday):

            print("\t",end="")

            count+=1

        a=1

        while(a<=list_1[m-1]):

            print(a,'\t',end="")

            a+=1

            count+=1

            if(count%7==0):

                print("")

        if(a>list_1[m-1]):

            print("")

    else:

        list_2=[31,28,31,30,31,30,31,31,30,31,30,31]

        firstday=day(y,m,1)

        count=0

        while(count<firstday):

            print("\t",end="")

            count+=1

        a=1

        while(a<=list_2[m-1]):

            print(a,'\t',end="")

            a+=1

            count+=1

            if(count%7==0):

                print("")

        if(a>list_2[m-1]):

            print("")

测评结果是这样的: 

实在让人崩溃,明明是一模一样的,为什么会错呢??? 

解决方法 

1 发现问题 

我截取了预期输出和实际输出中的一行,进行比较: 

import difflib

s1='''

        1    2    3    4    5    

'''

s2='''

        1     2     3     4     5     

'''

print('s1 is equal to s2 ? The answer is ',s1==s2)

发现输出为:  

果然不一样。 

2 解决问题 

通过这个,我终于发现:  

原来s2(也就是我的实际输出)对比s1,是多了一个空格的。 

太神奇了,原来空格+制表符 看上去还是和 制表符 一样!!! 

错误代码在: 

print(a,'\t',end="")

修改成: 

print('%d\t'%a,end="")

这样就对了。!!! 

为什么: 因为print(a,'\t',end="") 中 a和'\t'中间隔了一个逗号,导致二者之间多输出了一个空格。 

比如: 输入代码 

a=1

b=2

print(a,b)

输出不是12,而是1 2。 

中间是有空格的(原因就在于a和b之间的逗号) 

3 程序通过 

总结 

当教辅实在太花时间了。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档