WilsonWolf2333 发表于 2020-1-16 14:52:21

P19 018函数:灵活即强大 课后题 动动手1.寻找水仙花数

题目--
1. 寻找水仙花数
题目要求:如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数。例如153 = 1^3+5^3+3^3,因此153是一个水仙花数。编写一个程序,找出所有的水仙花数。

遇到的问题是:
我手敲的代码 和 直接网页上点复制代码,运行的结果不一样...{:5_104:}
这个是论坛里直接点复制的代码:
def Narcissus():
    for each in range(100, 1000):
      temp = each
      sum = 0
      while temp:
            sum = sum + (temp%10) ** 3
            temp = temp // 10# 注意这里用地板除

      if sum == each:
            print(each, end='\t')

print("所有的水仙花数分别是:", end='')
Narcissus()


下方的是我自己看着答案手敲的代码:
def Narcissus():
    for each in range(100, 1000):
      temp = each
      sum = 0
      while temp:
            sum = sum + (temp%10) ** 3
            temp = temp // 10 #注意这里用地板除

      if sum == each:
            print(each, end = '\t')

print('所有水仙花数分别是:', end = '')
Narcissus()

运行结果的区别如下:
======= RESTART: C:\Users\aaaaa\bbbbb\Python\Code\daily script.py =======
所有的水仙花数分别是:153      370      371      407      
>>>
======= RESTART: C:\Users\aaaaa\bbbbb\Python\Code\daily script.py =======
所有水仙花数分别是:153 370      371      407

我手动敲的代码运行结果里,只有第一个数字和第二个数字中间,没有Tab。为什么?
自己做过的尝试如下:
1.核对两个代码,发现只是多了一些空格,移除空格,结果还是一样;
2.尝试修改代码打印出如下格式:
所有水仙花数分别是:
153        370        371        407
然后重新加入'\t'后,还是一、二数字之间不是Tab。
实在想不明白了。。。
麻烦各位不吝赐教。谢谢!

sunrise085 发表于 2020-1-16 16:08:46

两个代码倒数第二行print内容不一样。你的程序少一个“的”。
之所以看上去效果不一样,好像是没有出现tab,实际上是因为前面的字符数不一样,导致的tab补充的空格个数不一致。

WilsonWolf2333 发表于 2020-1-16 17:14:58

sunrise085 发表于 2020-1-16 16:08
两个代码倒数第二行print内容不一样。你的程序少一个“的”。
之所以看上去效果不一样,好像是没有出现tab ...

谢谢!
我大概明白你的意思了,记得看小甲鱼视频也有提到过...
为了让自己更好地理解,做的功课如下:
print('所有',end = '\t')
print('Tab后面的内容')
修改代码加个“的”:
print('所有的',end = '\t')
print('Tab后面的内容')

运行的对比结果为:(等级不够还没法传截图)
======= RESTART: C:\Users\aaa\bbb\Python\Code\daily script.py =======
所有        Tab后面的内容
>>>
======= RESTART: C:\Users\aaa\bbb\Python\Code\daily script.py =======
所有的        Tab后面的内容
总之就是从Tab开始都是对齐的。。

正在网上继续查询相关资料,thanks again!{:5_92:}

WilsonWolf2333 发表于 2020-1-17 17:08:03

本帖最后由 WilsonWolf2333 于 2020-1-19 11:54 编辑

今天百度了很多资料,关键字大致为“python 制表符” “python print \t”
还是不太懂\t打印出来 以什么标准对齐的。
仿照原问题写了简单代码,正在研究如下代码:
str0 ='所有水仙花数分别是:'
str1 = '156\t370\t371\t407'
str2 = str0 +str1
str3 = 'a' + str2

print(str0)
print(str1)
print(str2)
print(str3)

打印结果为
所有水仙花数分别是:
156        370        371        407
所有水仙花数分别是:156        370        371        407
a所有水仙花数分别是:156        370        371        407
结果的截图如下:


待处理任务:
1.继续自己研究
2.继续回复 @sunrise085
3.给出最佳答案
4.这个问题弄懂后更新帖子:《P19 018函数:灵活即强大 课后题 动动手1.寻找水仙花数 学习笔记》

WilsonWolf2333 发表于 2020-1-17 17:10:33

也写上部分网上找到的、我认为对我解答这个问题有帮助的资料:
百度经验 -
如果是在字符串之间使用制表符\t,当一个字符串打印完全后,下一个字符串会从8的倍数位开始显示。如图,字符串a打印位置为0,下一个字符串打印位置为第8位。(注意,python里的位置从0开始算)
新浪博客 -
\t 其实代表当前八个字符的单元结束,进入到下一个八个字符的单元中。
CSDN1 -
所以我们看到当\t前面为123456时,后面有两个空格;当\t前面为1234567时,后面有1个空格,而当前面正好为12345678时,后面跟8个空格
当前面为123456781234时,后面的空格数量为|12-8|%8=4
CSDN2 -
\t后面内容"eee"的前面得有8个字符的整数倍, 如果前八个字符当中的后半部分是空格则正常, 如果前八个全是字符没有空格,则增加八个空格

WilsonWolf2333 发表于 2020-1-19 14:40:24

sunrise085 发表于 2020-1-16 16:08
两个代码倒数第二行print内容不一样。你的程序少一个“的”。
之所以看上去效果不一样,好像是没有出现tab ...

你好! 麻烦帮忙看看这样总结的是否正确:
我做了一些代码测试,发现如下规则说得通。。(如下字节的概念我没有严格查询,根据自己理解写上去的..)
1.代码中输入的英文字符算一个字节,输入的汉字算两个字节,中文输入法下输入的冒号等符号算2个字节,数字算一个字节;
2.\t前面的内容如果占8的整数倍字节,那么这个\t就代表的是8个字符。例如4#楼代码str3字符串第一个\t前面就有24个字节;
3.\t前面的内容所占的字节数(设为x)如果不是8的整数倍,那么\t所占的位数(设为y)取决于,满足x+y == 8的整数倍这个条件。例如4#楼代码str2这个字符串,第一个\t前的内容占23个字节(我一个一个查的...),那么这个\t就只是一个英文输入法下的空格,即占1位

请大神有空再回复一下吧 谢谢!{:5_109:}

sunrise085 发表于 2020-1-19 16:37:15

本帖最后由 sunrise085 于 2020-1-19 16:39 编辑

WilsonWolf2333 发表于 2020-1-19 14:40
你好! 麻烦帮忙看看这样总结的是否正确:
我做了一些代码测试,发现如下规则说得通。。(如下字节的概 ...

你理解的是对的。总结的很好。
2和3合并一下,'\t'后面的字符从8的整数倍个字符后开始,且'\t'后的字符前至少有一个空格
另外没必要一个一个数,直接print一串数字就可以了。
def Narcissus():
    for each in range(100, 1000):
      temp = each
      sum = 0
      while temp:
            sum = sum + (temp%10) ** 3
            temp = temp // 10 #注意这里用地板除

      if sum == each:
            print(each, end = '\t')

print('所有水仙花数分别是:', end = '')
Narcissus()
print()
print('12345678901234567890123456789012345678901234567890')

运行结果:

WilsonWolf2333 发表于 2020-1-19 17:01:32

sunrise085 发表于 2020-1-19 16:37
你理解的是对的。总结的很好。
2和3合并一下,'\t'后面的字符从8的整数倍个字符后开始,且'\t'后的字 ...

打印一串数字这个方法真好啊,哈哈。。
非常感谢!!{:5_95:}
页: [1]
查看完整版本: P19 018函数:灵活即强大 课后题 动动手1.寻找水仙花数