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 程序通过

在这里插入图片描述

总结

当教辅实在太花时间了。

### 回答1: print() 函数用于将指定的字符串或对象(通常是字符串)输出到屏幕或文件。它是最简单的输出函数之一,可以接受任何类型的参数,但通常将字符串作为参数。它的语法如下:print(value(s), sep = ' ', end = '\n', file = sys.stdout, flush = False)其,value(s) 是要输出的字符串,sep 是分隔符,end 是行尾字符,file 是要写入的文件对象,flush 是一个布尔值,用于控制是否刷新缓冲区。 ### 回答2: print()函数Python用于在控制台输出信息的函数print()函数的语法格式为:print(value1, value2, ...),可以传入一个或多个参数。 第一个参数可以是一个字符串或表达式,用于显示在控制台上。print()函数根据参数的类型自动转换为字符串并输出。 可以使用多个参数,用逗号分隔,print()函数将每个参数输出到一行,并在参数之间自动添加一个空格。 可以使用转义字符来控制输出的格式,如使用\n表示换行,\t表示制表符print()函数还可以使用end参数来指定输出的末尾字符,默认为换行符\n,可以改为其他字符。 print()函数也可以输出多个值,以空格分隔,例如:print(value1, value2)。 在print()函数还可以使用格式化字符,如%s、%d等,用于将变量的值插入到字符串print()函数可以将输出重定向到一个文件,如print(value, file=file_object)。 print()函数还有一些其他的参数,如sep、file等,可以用于控制输出的分隔符、输出到不同的文件等。 总而言之,print()函数Python用于在控制台输出信息的函数,非常灵活和易用,可以根据需要输出不同的内容和格式。 ### 回答3: 在Pythonprint()函数一个常用的输出函数,用于在控制台输出或者输出到文件。它可以输出多种类型的数据,如字符串、数字、变量、表达式等。 print()函数的语法形式为print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False),其value表示要输出的数据,可以是一个或多个参数;sep表示参数之间的分隔符,默认为一个空格;end表示输出结束后的字符,默认为换行符;file表示输出到的文件,默认为标准输出流(控制台);flush表示是否立即刷新输出,默认为False。 当print()函数只有一个参数时,可以直接输出该参数的值;当有多个参数时,输出结果依次以分隔符连接。同时,可以使用转义字符(\n、\t等)和格式化字符串来控制输出的格式。 除了输出到控制台,print()函数还可以将输出重定向到文件。通过设置file参数为一个文件对象,可以将输出结果保存到指定的文件,方便日志记录或保存运行结果。 另外,print()函数也可用于调试代码。在调试过程,我们可以使用print()来输出间结果或某个变量的值,以帮助我们理解代码的执行过程和调试错误。 总的来说,print()函数Python非常常用的一个输出函数,它能够方便地输出各种类型的数据,并且允许我们进行一定的格式控制和输出重定向。在编写和调试代码时,print()函数都是一个不可或缺的工具。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值