吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1377|回复: 14
收起左侧

[已解决] 奇怪的方式和思路解决问题

[复制链接]
甜萝 发表于 2022-5-25 19:22
本帖最后由 paypojie 于 2022-5-25 20:35 编辑

题目如下
打印出如下图案(菱形):
    *
  ***
*****
*******
*****
  ***
   *
原文地址  https://www.runoob.com/python/python-exercise-example23.html

刚开始分析这道题目的时候 想到了直接通过print函数输出那个图案 如下

[Python] 纯文本查看 复制代码
print("""   *
  ***
 *****
*******
 *****
  ***
   *""")


但是想了一下不能直接这样写 这样体现不出我的智慧 这样写也没啥意义(表情)

于是我想用其他思路来写这道题
分析 这个图形由*和空白组成 而且看起来也有规律可言 于是我定义了两个变量i和s 这两个变量分别代表*和' ' 第一行只有一个* 第二行有三个* 第三行有五个*第
一行*前面的空格是三 第二行前面两个空格 第三行是一个空格 这样看起来是有规律的 从第五行开始 逐渐递减 但是我们先不管后面倒数三行 先把前四行给打印出来
定义一个while循环 行数只要小于七 就执行循环体 也就是if和while子句 用if进行条件判断 l小于等于三 就执行if语句下面的代码 先输出三个空格和一个* 这样
第一行就出来了由于空格和*是由变量控制的我们只要改*和空格的变量 就可以顺利输出第二行到第四行 每进入新的一行 两个相关的变量就发生改变 控制*的变量自增
控制空格的变量自减 然后控制行数的变量自增 这样前四行成功输出

[Python] 纯文本查看 复制代码
i = '*' # 组成菱形的元素之一
s = ' ' # 也是组成菱形的元素之一
u = 1 # 控制*
k = 3 # 控制空格
l = 0 # 控制行数
while l <= 7:
    if l <= 3:
        print(k * s + u * i)
        k -= 1
        u += 2
        l += 1

什么是前面的部分代码 运行结果如下

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

接下来输出后面三行 因为后面和前面的情况相同所以使用逆向思维

[Python] 纯文本查看 复制代码
i = '*'
s = ' '
u = 1
k = 3
l = 0
while l <= 7:
    if l <= 3:
        print(k * s + u * i)
        k -= 1
        u += 2
        l += 1

# 下面是后面部分 但是输出之后发现不对

    else:
        k += 1
        u -= 2
        l += 1
        print(k * s + u * i)


输出结果如下

   *
  ***
*****
*******
******* # 多输出的一行
*****
  ***
   *

我测试了代码 发现问题出在变量k和变量u上 执行else区域的代码时 k的初始值为-1 u为9 于是 我将代码写成下面的样子

[Python] 纯文本查看 复制代码
i = '*'
s = ' '
u = 1
k = 3
l = 0
while l <= 7:
    if l <= 3:
        print(k * s + u * i)
        k -= 1
        u += 2
        l += 1
        # print(k)
        # print(u)
        # 检查程序运行的中间状态
    else:
        # k的初始值和u的初始值发生改变 看看会发生什么
        if k == -1:
            k == 0
            u -= 2
        k += 1
        u -= 2
        l += 1
        print(k * s + u * i)


输出结果如下 最后三行*的数量是正确的 所有 我们只要把后三行的每一行在多添加一个空格就可以了

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

将代码稍微修改一下

[Python] 纯文本查看 复制代码
i = '*'
s = ' '
u = 1
k = 3
l = 0
while l <= 7:
    if l <= 3:
        print(k * s + u * i)
        k -= 1
        u += 2
        l += 1
    else:
        if k == -1:
            k == 0
            u -= 2
        k += 1
        u -= 2
        l += 1
        print(' ' + k * s + u * i)

输出如下

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

可以看到已经符号题目要求了
  
# 这是之后的帖子 https://www.52pojie.cn/thread-1641023-1-1.html

免费评分

参与人数 1热心值 +1 收起 理由
taxuewuhen + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

reetin 发表于 2022-5-25 19:51
[[空格,空格,空格,*,空格,空格,空格],[空格,空格,*,*,*,空格,空格],[空格,*,*,*,*,*,空格],[*,*,*,*,*,*,*],[空格,*,*,*,*,*,空格],[空格,空格,*,*,*,空格,空格],[空格,空格,空格,*,空格,空格,空格]]
 楼主| 甜萝 发表于 2022-5-25 19:59
reetin 发表于 2022-5-25 19:51
[[空格,空格,空格,*,空格,空格,空格],[空格,空格,*,*,*,空格,空格],[空格,*,*,*,*,*, ...

也可以这么理解
Cool_Breeze 发表于 2022-5-25 20:49
[Python] 纯文本查看 复制代码
def test(line):
	tmp = '*'
	row = line-1
	for n in range(row):
		print(' '*(row-n) + tmp)
		tmp += '*'*2
	for n in range(line):
		print(' '*n + tmp)
		tmp = tmp[0: -2]


[Asm] 纯文本查看 复制代码
>>> test(10)
         *
        ***
       *****
      *******
     *********
    ***********
   *************
  ***************
 *****************
*******************
 *****************
  ***************
   *************
    ***********
     *********
      *******
       *****
        ***
         *
>>> test(8)
       *
      ***
     *****
    *******
   *********
  ***********
 *************
***************
 *************
  ***********
   *********
    *******
     *****
      ***
       *

>>> test(2)
 *
***
 *
 楼主| 甜萝 发表于 2022-5-25 21:10
Cool_Breeze 发表于 2022-5-25 20:49
[mw_shl_code=python,true]def test(line):
        tmp = '*'
        row = line-1

这个就很厉害
znc940210 发表于 2022-5-25 21:34
膜拜大佬
 楼主| 甜萝 发表于 2022-5-25 21:50

评论区有个大佬
不知道改成啥 发表于 2022-5-25 22:21
我觉得第一个就挺好的实现了功能,效率最高。
taxuewuhen 发表于 2022-5-25 22:50
感谢分析过程
 楼主| 甜萝 发表于 2022-5-25 23:03

不用谢 嘿嘿
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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