鱼C论坛

 找回密码
 立即注册
查看: 2907|回复: 21

[已解决]【Python新手求助】星号递减程序

[复制链接]
发表于 2020-1-25 10:30:10 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 lzymm1 于 2020-1-25 10:41 编辑
  1. temp = input('请输入一个整数:')
  2. number = int(temp)
  3. while number:
  4.     i = number - 1
  5.     while i:
  6.         print(' ', end = '')
  7.         i = i - 1
  8.     j = number
  9.     while j:
  10.         print('*', end = '')
  11.         j = j - 1
  12.     print()
  13.     number = number - 1
复制代码

它的输出结果是类似输入 6 就输出
  1.      ******
  2.     *****
  3.    ****
  4.   ***
  5. **
  6. *
复制代码

这样的,但是为什么只需要写一个while i 就可以让它打印出 i 的次数,而不需要单独设置变量再乘上去?很不解。
这是我写的程序:
  1. temp = input("请输入一个整数")
  2. result = int(temp)
  3. while result > 0:
  4.     print(" "* result)
  5.     print("*"* result)
  6.     result = result - 1
复制代码

卡在这里很久了,求大佬帮忙解答一下
最佳答案
2020-1-25 11:03:55
lzymm1 发表于 2020-1-25 11:02
这个不行啊,输入出来没有打斜的

看错了,加上 end=""(不换行)就可以了:

  1. temp = input("请输入一个整数")
  2. result = int(temp)
  3. while result > 0:
  4.     print(" " * result, end="")
  5.     print("*" * result)
  6.     result = result - 1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-1-25 10:32:03 | 显示全部楼层
本帖最后由 lzymm1 于 2020-1-25 10:35 编辑

倒数第二行的星号不整齐,应该是对齐下来的帖子里不知道为什么不整齐
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-25 10:57:03 | 显示全部楼层
while i 就是当 i 不为 0 时执行循环。假设 i = 6,每执行一次循环体 i 就减 1,那么循环体就会被执行 6 次。

你写的程序也可以。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-25 11:02:40 | 显示全部楼层
zltzlt 发表于 2020-1-25 10:57
while i 就是当 i 不为 0 时执行循环。假设 i = 6,每执行一次循环体 i 就减 1,那么循环体就会被执行 6 次 ...

这个不行啊,输入出来没有打斜的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-25 11:03:55 | 显示全部楼层    本楼为最佳答案   
lzymm1 发表于 2020-1-25 11:02
这个不行啊,输入出来没有打斜的

看错了,加上 end=""(不换行)就可以了:

  1. temp = input("请输入一个整数")
  2. result = int(temp)
  3. while result > 0:
  4.     print(" " * result, end="")
  5.     print("*" * result)
  6.     result = result - 1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-25 11:20:54 | 显示全部楼层
其实,这段程序可以缩减成一行(看不懂没关系):

  1. for i in range(int(input("请输入一个整数:")), 0, -1): print(' ' * i + '*' * i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-25 12:08:47 | 显示全部楼层
zltzlt 发表于 2020-1-25 11:03
看错了,加上 end=""(不换行)就可以了:

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

使用道具 举报

 楼主| 发表于 2020-1-25 12:09:29 | 显示全部楼层
zltzlt 发表于 2020-1-25 11:20
其实,这段程序可以缩减成一行(看不懂没关系):

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

使用道具 举报

 楼主| 发表于 2020-1-30 14:57:35 | 显示全部楼层
本帖最后由 lzymm1 于 2020-1-30 15:03 编辑

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

使用道具 举报

 楼主| 发表于 2020-1-30 15:06:38 | 显示全部楼层
zltzlt 发表于 2020-1-25 10:57
while i 就是当 i 不为 0 时执行循环。假设 i = 6,每执行一次循环体 i 就减 1,那么循环体就会被执行 6 次 ...

为什么是当i不为0时执行循环?这个0有什么特殊意义吗?也就是说i=负数的时候它也会执行循环对吧?为什么是0而不是其他数?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-30 15:07:31 | 显示全部楼层
lzymm1 发表于 2020-1-30 15:06
为什么是当i不为0时执行循环?这个0有什么特殊意义吗?也就是说i=负数的时候它也会执行循环对吧?为什么 ...

这是规定,知道就好。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-30 15:08:22 | 显示全部楼层
zltzlt 发表于 2020-1-25 10:57
while i 就是当 i 不为 0 时执行循环。假设 i = 6,每执行一次循环体 i 就减 1,那么循环体就会被执行 6 次 ...

因为不是很懂,所以我一直把【while i】这类型的理解成【当 i 存在时:】
这样理解的话跟原来的意思会有什么差距吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-30 15:09:57 | 显示全部楼层
lzymm1 发表于 2020-1-30 15:08
因为不是很懂,所以我一直把【while i】这类型的理解成【当 i 存在时:】
这样理解的话跟原来的意思会有 ...

当然有差距,while i 不是当 i 存在时就执行循环体,while i 是当 i 存在并且它的值为真(即不为 0,在 Python 中 0、0.0、空字符串、None、False 都被视为假)才执行循环体。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-30 15:32:02 | 显示全部楼层
zltzlt 发表于 2020-1-30 15:09
当然有差距,while i 不是当 i 存在时就执行循环体,while i 是当 i 存在并且它的值为真(即不为 0,在 P ...

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

使用道具 举报

 楼主| 发表于 2020-1-30 15:47:34 | 显示全部楼层
zltzlt 发表于 2020-1-30 15:09
当然有差距,while i 不是当 i 存在时就执行循环体,while i 是当 i 存在并且它的值为真(即不为 0,在 P ...

还有一些像是 int() 我的理解是把括号内的字符串或其他数据作为整数提取,如果其中掺杂了其他非数字的数据,那就无法提取。这种理解对吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-30 15:48:41 | 显示全部楼层
lzymm1 发表于 2020-1-30 15:47
还有一些像是 int() 我的理解是把括号内的字符串或其他数据作为整数提取,如果其中掺杂了其他非数字的数 ...

int() 函数功能就是将括号内的字符串或数据转化成整数类型,你的理解基本是对的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-30 15:49:04 | 显示全部楼层
zltzlt 发表于 2020-1-30 15:48
int() 函数功能就是将括号内的字符串或数据转化成整数类型,你的理解基本是对的

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

使用道具 举报

 楼主| 发表于 2020-2-4 14:55:38 | 显示全部楼层
zltzlt 发表于 2020-1-30 15:48
int() 函数功能就是将括号内的字符串或数据转化成整数类型,你的理解基本是对的

  1. import random
  2. times = 3
  3. secret = random.randint(1,10)
  4. print('------------------我爱鱼C工作室------------------')
  5. # 这里先给guess赋值(赋一个绝对不等于secret的值)
  6. guess = 0
  7. # print()默认是打印完字符串会自动添加一个换行符,end=" "参数告诉print()用空格代替换行
  8. # 嗯,小甲鱼觉得富有创意的你应该会尝试用 end="JJ"?
  9. print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")
  10. while (guess != secret) and (times > 0):
  11.     temp = input()
  12.     guess = int(temp)
  13.     times = times - 1 # 用户每输入一次,可用机会就-1
  14.     if guess == secret:
  15.         print("我草,你是小甲鱼心里的蛔虫吗?!")
  16.         print("哼,猜中了也没有奖励!")
  17.     else:
  18.         if guess > secret:
  19.             print("哥,大了大了~~~")
  20.         else:
  21.             print("嘿,小了,小了~~~")
  22.         if times > 0:
  23.             print("再试一次吧:", end=" ")
  24.         else:
  25.             print("机会用光咯T_T")
  26. print("游戏结束,不玩啦^_^")
复制代码
为什么要在用户输入之前就给guess赋值?我尝试跳过了这一步,程序运行的结果没有任何改变。
  1. import random
  2. times = 3
  3. secret = random.randint(1,10)
  4. print('------------------我爱鱼C工作室------------------')
  5. print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")
  6. while times > 0:
  7.     temp = input()
  8.     guess = int(temp)
  9.     times = times - 1
  10.     if guess == secret:
  11.         print("我草,你是小甲鱼心里的蛔虫吗?!")
  12.         print("哼,猜中了也没有奖励!")
  13.     else:
  14.         if guess > secret:
  15.             print("哥,大了大了~~~")
  16.         else:
  17.             print("嘿,小了,小了~~~")
  18.         if times > 0:
  19.             print("再试一次吧:", end=" ")
  20.         else:
  21.             print("机会用光咯T_T")
  22. print("游戏结束,不玩啦^_^")
复制代码

是不是说明这一步是多余的?在用户输入前就给guess赋值的目的是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-4 14:59:41 | 显示全部楼层
lzymm1 发表于 2020-2-4 14:55
为什么要在用户输入之前就给guess赋值?我尝试跳过了这一步,程序运行的结果没有任何改变。

是不是 ...

第一段代码,如果不给 guess 赋值,程序执行到这一步:

while (guess != secret)

就会报错。

PS:以后提问请发提问帖,不要在这里回复。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-4 15:14:42 | 显示全部楼层
zltzlt 发表于 2020-2-4 14:59
第一段代码,如果不给 guess 赋值,程序执行到这一步:

while (guess != secret)

我把这个也删了,我主要是不知道为什么要加个给guess赋值,也就是说这一步是没有必要的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 00:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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