于熙顿 发表于 2022-6-3 14:08:17

一道基础题 想不明白该咋做了


这种类型的题一直不会做,烦请会做这道题的大佬能顺便给我讲一下这类题的解题思路,多谢{:9_228:}

阿奇_o 发表于 2022-6-3 14:08:18

本帖最后由 阿奇_o 于 2022-6-4 10:01 编辑

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

      
func(s='12Aab')
*111*
2*2*2
AA*AA
a*a*a
*bbb*

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

      

人造人 发表于 2022-6-3 14:28:34

一步一步来

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

def replace(string, index, ch):
    temp = list(string)
    temp = ch
    return ''.join(temp)

def output(s):
    for i in s: print(i)

string = input()
length = len(string)

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

#print(result)

# 左上角到右下角
for i in range(0, length):
    result = replace(result, i, '*')

#print(result)

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

#print(result)
output(result)

森亦简 发表于 2022-6-3 14:31:43

本帖最后由 森亦简 于 2022-6-3 14:46 编辑

string = input("请输入字符串:")
lenth = len(string)
picture = []
picture_list=[]
picture_str=[]
m = ""
for i in range(lenth):                     
    picture.append(string*lenth)         ##先创建一个列表picture,里面的元素为:单个字符串*行数
    picture_list.append(list(picture))   ##再创建一个列表picture_list,将单个字符串*行数转换成列表的形式作为picture_list的元素
    picture_list = "*"      ##用"*"替换左对角线的字符,替换后返回picture_list
    picture_list = "*"                ##用"*"替换右对角线的字符,替换后返回picture_list
   
for each in picture_list:
    for i in range(lenth):
      m = m + each                     ##将picture_list中的元素转化为连续的字符串   
    picture_str.append(m)                   ##将转换后连续的字符串存入picture_str
    m = ""

for each in picture_str:                  ##打印picture_str中连续的字符串
    print(each)
   

allen-xy 发表于 2022-6-3 16:49:50

本帖最后由 allen-xy 于 2022-6-3 16:53 编辑

# 思路:
# 1、首先,字符串长度=输出行数。
# 2、其次,每行的第(行数)个和第(字符串长度-行数)个字符是特殊称号。
# 3、最后,每行的其他位置是字符串的第(行数)个字符。
# 4、最最后,利用列表将每行写入子列表中,再使用join方法输出。

def formated(s):
    lens = len(s)
    l = []

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

    for i in range(len(l)):
      print(''.join(l))

formated(s=input("请输入字符串:"))

于熙顿 发表于 2022-6-3 20:42:28

感谢各位大佬的帮助,终于弄明白了{:10_281:}{:10_281:}{:10_281:}
页: [1]
查看完整版本: 一道基础题 想不明白该咋做了