鱼C论坛

 找回密码
 立即注册
查看: 2511|回复: 5

[已解决]一道基础题 想不明白该咋做了

[复制链接]
发表于 2022-6-3 14:08:17 | 显示全部楼层 |阅读模式
10鱼币
fishc.png
这种类型的题一直不会做,烦请会做这道题的大佬能顺便给我讲一下这类题的解题思路,多谢
最佳答案
2022-6-3 14:08:18
本帖最后由 阿奇_o 于 2022-6-4 10:01 编辑

嗯,思路我想通常至少有两点吧:  
  1. 因为字符串是"不可变的"数据类型,所以字符串通常要结合列表来方便操作(如转为列表,或用另一个列表来做临时存储或中间变量)
  2. m行n列,或N行N列,这些矩阵,基本上都要遍历,所以通常 就是两个for循环进行遍历。
      其次,就是具体看题目怎么要求,注意 观察下标和元素的变化规律,以及下标之间的关系;注意+1还是-1 ;注意边界(走到最后下标是否越界)
      比如,这里的"对角线",其实就是每行的"列号/下标"有着这样的固定关系: row[ i ] = row[len(s)-1-i] = '*'   (你直接试算一下就知道了,第一行是0,4,第二行是1,3,。。)
所以,
  1. def func(s):
  2.     for i in range(len(s)):  # 作为行号,也作为 字符串的下标
  3.         for j in range(len(s)):  # 作为列号
  4.             row = [s[i],] * len(s)   # 先全部设为
  5.             row[i] = row[len(s)-i-1] = '*'   # 再修改(隐去)指定位置的字符
  6.         print(''.join(row))

  7.         
  8. func(s='12Aab')
  9. *111*
  10. 2*2*2
  11. AA*AA
  12. a*a*a
  13. *bbb*

  14. ---------------
  15. #复盘: 这里嵌套的for j in ... 其实是多余的(会在相同位置上"修改"),所以 最终应该是:
  16. def f(s):
  17.     for i in range(len(s)):
  18.         row = [s[i],] * len(s)
  19.         row[i] = row[len(s)-1-i] = '*'
  20.         print(''.join(row))

  21.         
复制代码

最佳答案

查看完整内容

嗯,思路我想通常至少有两点吧: 1. 因为字符串是"不可变的"数据类型,所以字符串通常要结合列表来方便操作(如转为列表,或用另一个列表来做临时存储或中间变量) 2. m行n列,或N行N列,这些矩阵,基本上都要遍历,所以通常 就是两个for循环进行遍历。 其次,就是具体看题目怎么要求,注意 观察下标和元素的变化规律,以及下标之间的关系;注意+1还是-1 ;注意边界(走到最后下标是否越界) 比如,这里 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-6-3 14:08:18 | 显示全部楼层    本楼为最佳答案   
本帖最后由 阿奇_o 于 2022-6-4 10:01 编辑

嗯,思路我想通常至少有两点吧:  
  1. 因为字符串是"不可变的"数据类型,所以字符串通常要结合列表来方便操作(如转为列表,或用另一个列表来做临时存储或中间变量)
  2. m行n列,或N行N列,这些矩阵,基本上都要遍历,所以通常 就是两个for循环进行遍历。
      其次,就是具体看题目怎么要求,注意 观察下标和元素的变化规律,以及下标之间的关系;注意+1还是-1 ;注意边界(走到最后下标是否越界)
      比如,这里的"对角线",其实就是每行的"列号/下标"有着这样的固定关系: row[ i ] = row[len(s)-1-i] = '*'   (你直接试算一下就知道了,第一行是0,4,第二行是1,3,。。)
所以,
  1. def func(s):
  2.     for i in range(len(s)):  # 作为行号,也作为 字符串的下标
  3.         for j in range(len(s)):  # 作为列号
  4.             row = [s[i],] * len(s)   # 先全部设为
  5.             row[i] = row[len(s)-i-1] = '*'   # 再修改(隐去)指定位置的字符
  6.         print(''.join(row))

  7.         
  8. func(s='12Aab')
  9. *111*
  10. 2*2*2
  11. AA*AA
  12. a*a*a
  13. *bbb*

  14. ---------------
  15. #复盘: 这里嵌套的for j in ... 其实是多余的(会在相同位置上"修改"),所以 最终应该是:
  16. def f(s):
  17.     for i in range(len(s)):
  18.         row = [s[i],] * len(s)
  19.         row[i] = row[len(s)-1-i] = '*'
  20.         print(''.join(row))

  21.         
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-6-3 14:28:34 | 显示全部楼层
一步一步来

  1. #!/usr/bin/env python
  2. #coding=utf-8

  3. def replace(string, index, ch):
  4.     temp = list(string)
  5.     temp[index] = ch
  6.     return ''.join(temp)

  7. def output(s):
  8.     for i in s: print(i)

  9. string = input()
  10. length = len(string)

  11. result = []
  12. for i in range(0, length):
  13.     result.append(string[i] * length)

  14. #print(result)

  15. # 左上角到右下角
  16. for i in range(0, length):
  17.     result[i] = replace(result[i], i, '*')

  18. #print(result)

  19. # 左下角到右上角
  20. for i in range(0, length):
  21.     result[i] = replace(result[i], length - i - 1, '*')

  22. #print(result)
  23. output(result)
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
于熙顿 + 1 + 1 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-6-3 14:31:43 | 显示全部楼层
本帖最后由 森亦简 于 2022-6-3 14:46 编辑
  1. string = input("请输入字符串:")
  2. lenth = len(string)
  3. picture = []
  4. picture_list=[]
  5. picture_str=[]
  6. m = ""
  7. for i in range(lenth):                     
  8.     picture.append(string[i]*lenth)         ##先创建一个列表picture,里面的元素为:单个字符串*行数
  9.     picture_list.append(list(picture[i]))   ##再创建一个列表picture_list,将单个字符串*行数转换成列表的形式作为picture_list的元素
  10.     picture_list[i][lenth-i-1] = "*"        ##用"*"替换左对角线的字符,替换后返回picture_list
  11.     picture_list[i][i] = "*"                ##用"*"替换右对角线的字符,替换后返回picture_list
  12.    
  13. for each in picture_list:
  14.     for i in range(lenth):
  15.         m = m + each[i]                     ##将picture_list中的元素转化为连续的字符串   
  16.     picture_str.append(m)                   ##将转换后连续的字符串存入picture_str
  17.     m = ""

  18. for each in picture_str:                    ##打印picture_str中连续的字符串
  19.     print(each)
  20.    
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
于熙顿 + 1 + 1 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-6-3 16:49:50 | 显示全部楼层
本帖最后由 allen-xy 于 2022-6-3 16:53 编辑
  1. # 思路:
  2. # 1、首先,字符串长度=输出行数。
  3. # 2、其次,每行的第(行数)个和第(字符串长度-行数)个字符是特殊称号。
  4. # 3、最后,每行的其他位置是字符串的第(行数)个字符。
  5. # 4、最最后,利用列表将每行写入子列表中,再使用join方法输出。

  6. def formated(s):
  7.     lens = len(s)
  8.     l = []

  9.     for i in range(lens):       # 输出每一行。
  10.         l.append([])
  11.         ss = s[i]               # ss是每一行的主要字符
  12.         a = lens - i - 1        # a是每一行第i个字符的对称位置
  13.         for j in range(lens):   # 输出每一行中的第j个字符。
  14.             if j == i or j == a:    # 第i个和第lens-i-1个字符为特殊符号。
  15.                 l[i].append('*')
  16.             else:
  17.                 l[i].append(ss)
  18.     # print(l)

  19.     for i in range(len(l)):
  20.         print(''.join(l[i]))

  21. formated(s=input("请输入字符串:"))
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
于熙顿 + 1 + 1 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-6-3 20:42:28 | 显示全部楼层
感谢各位大佬的帮助,终于弄明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-22 16:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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