鱼C论坛

 找回密码
 立即注册
查看: 2289|回复: 7

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

[复制链接]
发表于 2020-1-16 14:52:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

遇到的问题是:
我手敲的代码 和 直接网页上点复制代码,运行的结果不一样...
这个是论坛里直接点复制的代码:
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。
实在想不明白了。。。
麻烦各位不吝赐教。谢谢!
最佳答案
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')

运行结果:
微信截图_20200119163913.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-16 16:08:46 | 显示全部楼层
两个代码倒数第二行print内容不一样。你的程序少一个“的”。
之所以看上去效果不一样,好像是没有出现tab,实际上是因为前面的字符数不一样,导致的tab补充的空格个数不一致。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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.寻找水仙花数 学习笔记》
2020-01-19 11_51_17-Window.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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个字符的整数倍, 如果前八个字符当中的后半部分是空格则正常, 如果前八个全是字符没有空格,则增加八个空格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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位

请大神有空再回复一下吧 谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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')

运行结果:
微信截图_20200119163913.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

打印一串数字这个方法真好啊,哈哈。。
非常感谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 16:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表