鱼C论坛

 找回密码
 立即注册
查看: 2324|回复: 18

[已解决]小白问题_关于使用python打印出指定的图形问题

[复制链接]
发表于 2020-4-25 07:15:36 | 显示全部楼层 |阅读模式

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

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

x
有个小白问题,如何使用Python打印出指定个数的三角形图案,如下题目:

打出13579个*组成下列图形,下列三角形一共有n行 ,每行*号个数为1+3+5+7+9+……+n=13579 整个三角形一共有13579个*号组成   每下一行比上一行多两个心(等差数列)。第n行的第一个*号前不考虑空格问题(没有空格)   


1                *
2              ***
3            *****
4           *******
                  .
                  .
                  .
n   ******.......******


最佳答案
2020-4-25 11:31:53
13579数字不对,这个数学运算其实很简单,星星总数就是行数的平方,最接近的是116行,116**2=13456,到了117行总数13689,超了,另外如楼上所说,这个在很多电脑上看不到打印效果,超出了大部分显示器的显示范围,就会自动折行,不过如果4K的显示器就可以完整显示。如果一定按题目做,最后一行就只能打印不完整的星星。
total=int(input('请输入星星总数:'))
n=int(total**0.5//1)    #获取最接近的行数
last=total-n**2         #获取最后一行的星星数
for i in range(1,n+1):
    if last!=0:         #如果需要打印最后一行,每行必须多留一个空格
        print(' ',end='')
    print(' '*(n-i),'*'*(i*2-1),sep='')
print('*'*last)     #打印最后一行

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-25 08:06:34 | 显示全部楼层
用循环语句(迭代或递归中的一个,具体哪个不清楚,应该是迭代)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-25 09:08:17 | 显示全部楼层
weiter 发表于 2020-4-25 08:06
用循环语句(迭代或递归中的一个,具体哪个不清楚,应该是迭代)

weiter 大侠。可不可以帮忙演示一下具体的代码呀。不胜感激
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-25 09:10:03 | 显示全部楼层
Sky_Fall 发表于 2020-4-25 09:08
weiter 大侠。可不可以帮忙演示一下具体的代码呀。不胜感激


我也新手……刚刚自己搞了下……半天没搞对(字数总是对不上),而且效率低的一批……
如果你真的要——

这个字数还是不对……字数比要求的多
a = ("*")
b = 0
c = ("**")
d = 1
while d <= 13579 :
    print(a + b * c)
    b = b + 1
    d = d + 2 * b
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-25 09:33:07 | 显示全部楼层
weiter 发表于 2020-4-25 09:10
我也新手……刚刚自己搞了下……半天没搞对(字数总是对不上),而且效率低的一批……
如果你真的要— ...

恩,你的思路还可以,   我研究了半天    发现败在数学上了,  还有就是关于*号的定位问题,  第一排的* 应该是介于最后一排的*号总数的一半的位置才是中间位置。  可是最后一排有都少个*呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-25 09:34:47 | 显示全部楼层
Sky_Fall 发表于 2020-4-25 09:33
恩,你的思路还可以,   我研究了半天    发现败在数学上了,  还有就是关于*号的定位问题,   ...

所以就我没打印空格……(我用字数统计看了下,我那个的打印出来其实是超过要求的,目前没有搞定)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-25 09:36:04 | 显示全部楼层
Sky_Fall 发表于 2020-4-25 09:33
恩,你的思路还可以,   我研究了半天    发现败在数学上了,  还有就是关于*号的定位问题,   ...


我去算一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-25 09:45:30 | 显示全部楼层

    共勉之,多多交流
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-25 09:45:56 | 显示全部楼层
有没有什么可以计算字符数的代码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-25 09:46:29 | 显示全部楼层
Sky_Fall 发表于 2020-4-25 09:45
共勉之,多多交流

一起加油!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-25 09:55:46 | 显示全部楼层
Sky_Fall 发表于 2020-4-25 09:45
共勉之,多多交流


我已经乱了,可能字数是对上了,但是我改完之后加上了一段测试代码和一个输入,你试一下
a = ("*")
b = 0
c = ("**")
d = 1
f = int(input("what number do you want ?"))
while d < f:
    e = (a + b * c)
    print(e)
    d = len(e)
    b = b + 1
    print(d)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-25 10:02:01 | 显示全部楼层
weiter 发表于 2020-4-25 09:55
我已经乱了,可能字数是对上了,但是我改完之后加上了一段测试代码和一个输入,你试一下

  我看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-25 10:14:35 | 显示全部楼层

错误在哪很明显了……但是怎么改是个问题(我还要赶作业,先告退了……一天写两天的作业量)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-25 10:32:09 | 显示全部楼层
weiter 发表于 2020-4-25 10:14
错误在哪很明显了……但是怎么改是个问题(我还要赶作业,先告退了……一天写两天的作业量)

恩,再交流啦。          
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-25 11:31:53 | 显示全部楼层    本楼为最佳答案   
13579数字不对,这个数学运算其实很简单,星星总数就是行数的平方,最接近的是116行,116**2=13456,到了117行总数13689,超了,另外如楼上所说,这个在很多电脑上看不到打印效果,超出了大部分显示器的显示范围,就会自动折行,不过如果4K的显示器就可以完整显示。如果一定按题目做,最后一行就只能打印不完整的星星。
total=int(input('请输入星星总数:'))
n=int(total**0.5//1)    #获取最接近的行数
last=total-n**2         #获取最后一行的星星数
for i in range(1,n+1):
    if last!=0:         #如果需要打印最后一行,每行必须多留一个空格
        print(' ',end='')
    print(' '*(n-i),'*'*(i*2-1),sep='')
print('*'*last)     #打印最后一行

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-25 18:10:11 | 显示全部楼层
txxcat 发表于 2020-4-25 11:31
13579数字不对,这个数学运算其实很简单,星星总数就是行数的平方,最接近的是116行,116**2=13456,到了11 ...

多谢指教了,我研究研究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 08:23:45 | 显示全部楼层
txxcat 发表于 2020-4-25 11:31
13579数字不对,这个数学运算其实很简单,星星总数就是行数的平方,最接近的是116行,116**2=13456,到了11 ...

大侠,我看了一下,也试着尝试运行了一下程序,在程序第6行,print(‘ ’,end")  位于end后面的引号有报错呢。请教一下这里的end起什么作用呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-26 09:52:40 | 显示全部楼层
Sky_Fall 发表于 2020-4-26 08:23
大侠,我看了一下,也试着尝试运行了一下程序,在程序第6行,print(‘ ’,end")  位于end后面的引号有报 ...

是end='',print的参数,这是在打印完后附加打印的东西,默认是'\n',就是换行,end=''的意思就是打印完后不做任何动作,光标停在行尾。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 20:56:52 | 显示全部楼层
txxcat 发表于 2020-4-26 09:52
是end='',print的参数,这是在打印完后附加打印的东西,默认是'\n',就是换行,end=''的意思就是打印完 ...

明白了,多谢分享,我研究研究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 21:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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