鱼C论坛

 找回密码
 立即注册
查看: 1406|回复: 8

[已解决]萌新的疑惑:for 循环 为什么print(*)就能打印出星星啊?

[复制链接]
发表于 2021-9-17 00:17:10 | 显示全部楼层 |阅读模式

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

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

x
真·萌新

for i in range(5):
    for j in range(i+1):
        print("*"*j,end=" ")
    print()

没想明白,为什么这儿 i 不是 * ,print(*)  打印出来就是*呢?
是有什么原理吗?
最佳答案
2021-9-17 15:53:51
wsion54197 发表于 2021-9-17 15:36
for i in range(5):
    print(*)
这种没有×* 的 ,直接print(*)  就能打印出* 啊?



print(*) 只会报错,不会打印 *

print('*') 才会打印 * ,而这里要你打印 * 多次,你直接 print('*')  不是只能打印一个吗?

楼主你是连代码都没执行吧,你的代码:
for i in range(5):
    print("*")

输出结果:
*
*
*
*
*

而前者代码:
for i in range(5):
    for j in range(i + 1):
        print("*" * j, end=" ")
    print()

输出结果:
 
 * 
 * ** 
 * ** *** 
 * ** *** ****

打印效果完全不同

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

使用道具 举报

发表于 2021-9-17 01:44:11 | 显示全部楼层
      、Python 支持字符串乘法操作:
    "*" * 5 = "*****"
         所以,print("*"*j) 会连续打印出 j 个 "*"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-17 06:58:12 From FishC Mobile | 显示全部楼层
看仔细了,引号里面的是字符*   引号外面的是乘号*
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-17 08:29:06 | 显示全部楼层
因为吧,print函数里面是个表达式。

然后你看这个表达式的构成,是字符串,乘号*,和j的乘积,以及一个逗号分割的end=‘’

接着,你要想啊,print的作用是打印出:整数,浮点数,字符串,逻辑数,对象名这些的东西。

那么你这里的字符串,乘号*,和j的乘积是哪一类呢?
当然是字符串啊。所以这个乘积的运算结果就是字符串,那么这个‘乘积’的过程就是对‘*’这个字符串的一个运算。

所以就是后面的一个知识点,作为str类型的数据,你是可以对其使用+和*的运算的,分别对应拼接和复读机的作用:
>>> '计算机'+'二级考试'
'计算机二级考试'
>>> '群里的人都是复读机'*8
'群里的人都是复读机群里的人都是复读机群里的人都是复读机群里的人都是复读机群里的人都是复读机群里的人都是复读机群里的人都是复读机群里的人都是复读机'
当然,这里的j对应的在每次循环中是个整数啊,就像上面的‘’群里的人都是复读机'*8里面的8一样。


总结,这是字符串的运算用法。后面会学到的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-17 08:35:01 | 显示全部楼层
[b]

第二个 for 循环中的 print() 括号中填的是 ("*" * j, end=" ")

第一个 参数是 "*" 字符串,而字符串乘上一个整数时,意思就是重复拼接几次,例如 "FishC"*3 就是将 FishC重复三次后拼接起来,结果为:"FishCFishCFishC"

同理你的 "*" * j 就是将 "*" 字符串重复 j 次 后拼接,而 end 参数是结束 print 时会追加打印一个 " " 空格,这样就不会换行
for i in range(5):
    for j in range(i + 1):
        print("*" * j, end=" ")
    print()
[/b]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-17 15:34:52 | 显示全部楼层
jackz007 发表于 2021-9-17 01:44
、Python 支持字符串乘法操作:
    "*" * 5 = "*****"
         所以,print("*"*j) 会连续打印出 ...

for i in range(5):
    print(*)
这种没有×* 的 ,直接print(*)  就能打印出* 啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-17 15:36:11 | 显示全部楼层
Twilight6 发表于 2021-9-17 08:35
第二个 for 循环中的 print() 括号中填的是 ("*" * j, end=" ")

第一个 参数是 "*" 字符串,而字符 ...

for i in range(5):
    print(*)
这种没有×* 的 ,直接print(*)  就能打印出* 啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-17 15:36:55 | 显示全部楼层
Python初学者8号 发表于 2021-9-17 08:29
因为吧,print函数里面是个表达式。

然后你看这个表达式的构成,是字符串,乘号*,和j的乘积,以及一个 ...

for i in range(5):
    print(*)
这种没有×* 的 ,直接print(*)  就能打印出* 啊?
我在提问的时候输出错了,应该是不在外面乘那个j的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-17 15:53:51 | 显示全部楼层    本楼为最佳答案   
wsion54197 发表于 2021-9-17 15:36
for i in range(5):
    print(*)
这种没有×* 的 ,直接print(*)  就能打印出* 啊?



print(*) 只会报错,不会打印 *

print('*') 才会打印 * ,而这里要你打印 * 多次,你直接 print('*')  不是只能打印一个吗?

楼主你是连代码都没执行吧,你的代码:
for i in range(5):
    print("*")

输出结果:
*
*
*
*
*

而前者代码:
for i in range(5):
    for j in range(i + 1):
        print("*" * j, end=" ")
    print()

输出结果:
 
 * 
 * ** 
 * ** *** 
 * ** *** ****

打印效果完全不同

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 09:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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