lzymm1 发表于 2020-1-25 10:30:10

【Python新手求助】星号递减程序

本帖最后由 lzymm1 于 2020-1-25 10:41 编辑

temp = input('请输入一个整数:')
number = int(temp)
while number:
    i = number - 1
    while i:
      print(' ', end = '')
      i = i - 1
    j = number
    while j:
      print('*', end = '')
      j = j - 1
    print()
    number = number - 1
它的输出结果是类似输入 6 就输出
   ******
    *****
   ****
***
**
*
这样的,但是为什么只需要写一个while i 就可以让它打印出 i 的次数,而不需要单独设置变量再乘上去?很不解。
这是我写的程序:
temp = input("请输入一个整数")
result = int(temp)
while result > 0:
    print(" "* result)
    print("*"* result)
    result = result - 1

卡在这里很久了,求大佬帮忙解答一下{:10_266:}

lzymm1 发表于 2020-1-25 10:32:03

本帖最后由 lzymm1 于 2020-1-25 10:35 编辑

倒数第二行的星号不整齐,应该是对齐下来的帖子里不知道为什么不整齐

zltzlt 发表于 2020-1-25 10:57:03

while i 就是当 i 不为 0 时执行循环。假设 i = 6,每执行一次循环体 i 就减 1,那么循环体就会被执行 6 次。

你写的程序也可以。

lzymm1 发表于 2020-1-25 11:02:40

zltzlt 发表于 2020-1-25 10:57
while i 就是当 i 不为 0 时执行循环。假设 i = 6,每执行一次循环体 i 就减 1,那么循环体就会被执行 6 次 ...

这个不行啊,输入出来没有打斜的{:10_266:}

zltzlt 发表于 2020-1-25 11:03:55

lzymm1 发表于 2020-1-25 11:02
这个不行啊,输入出来没有打斜的

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

temp = input("请输入一个整数")
result = int(temp)
while result > 0:
    print(" " * result, end="")
    print("*" * result)
    result = result - 1

zltzlt 发表于 2020-1-25 11:20:54

其实,这段程序可以缩减成一行(看不懂没关系):

for i in range(int(input("请输入一个整数:")), 0, -1): print(' ' * i + '*' * i)

lzymm1 发表于 2020-1-25 12:08:47

zltzlt 发表于 2020-1-25 11:03
看错了,加上 end=""(不换行)就可以了:

谢谢!

lzymm1 发表于 2020-1-25 12:09:29

zltzlt 发表于 2020-1-25 11:20
其实,这段程序可以缩减成一行(看不懂没关系):

好的{:10_298:}

lzymm1 发表于 2020-1-30 14:57:35

本帖最后由 lzymm1 于 2020-1-30 15:03 编辑

*******
      ******
       *****
      ****
   ***
    **
   *

lzymm1 发表于 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而不是其他数?

zltzlt 发表于 2020-1-30 15:07:31

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

这是规定,知道就好。。

lzymm1 发表于 2020-1-30 15:08:22

zltzlt 发表于 2020-1-25 10:57
while i 就是当 i 不为 0 时执行循环。假设 i = 6,每执行一次循环体 i 就减 1,那么循环体就会被执行 6 次 ...

因为不是很懂,所以我一直把【while i】这类型的理解成【当 i 存在时:】
这样理解的话跟原来的意思会有什么差距吗?

zltzlt 发表于 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 都被视为假)才执行循环体。

lzymm1 发表于 2020-1-30 15:32:02

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

噢好的

lzymm1 发表于 2020-1-30 15:47:34

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

还有一些像是 int() 我的理解是把括号内的字符串或其他数据作为整数提取,如果其中掺杂了其他非数字的数据,那就无法提取。这种理解对吗?

zltzlt 发表于 2020-1-30 15:48:41

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

int() 函数功能就是将括号内的字符串或数据转化成整数类型,你的理解基本是对的

lzymm1 发表于 2020-1-30 15:49:04

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

好的,谢谢。

lzymm1 发表于 2020-2-4 14:55:38

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

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

zltzlt 发表于 2020-2-4 14:59:41

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

是不是 ...

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

while (guess != secret)

就会报错。

PS:以后提问请发提问帖,不要在这里回复。

lzymm1 发表于 2020-2-4 15:14:42

zltzlt 发表于 2020-2-4 14:59
第一段代码,如果不给 guess 赋值,程序执行到这一步:

while (guess != secret)


我把这个也删了,我主要是不知道为什么要加个给guess赋值,也就是说这一步是没有必要的?
页: [1] 2
查看完整版本: 【Python新手求助】星号递减程序