鱼C论坛

 找回密码
 立即注册
楼主: 冬雪雪冬

[技术交流] Python:每日一题 161

[复制链接]
发表于 2018-3-10 19:47:30 | 显示全部楼层
  1. def f(i):
  2.         a = ''
  3.         for j in range(1, i+1):
  4.                 a+=chr(64+j)
  5.         for k in range(i+1, 0, -1):
  6.                 a+=chr(64+k)
  7.         if i>25:
  8.                 a = a[:26]+f(i-26)+a[i*2-25:]
  9.         return a
  10. def s(num):
  11.         for i in range(num):
  12.                            print('  '*(num-i)+f(i))

  13. num = int(input())
  14. s(num)
复制代码

点评

没有居中  发表于 2018-3-12 21:56

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1

查看全部评分

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

使用道具 举报

发表于 2018-3-10 19:53:44 | 显示全部楼层
  1. def P_triangle(n):
  2.     aa = ""
  3.     for each in range(1,n+1):
  4.         if each > 26:
  5.             p = each -26
  6.         else:
  7.             p = each
  8.         aa = aa + chr(64 + p)
  9.         tem_1 = aa[::-1]
  10.         tem_2 = tem_1[1:]
  11.         tem = aa + tem_2
  12.         w = 2*n - 1
  13.         srt_1 = tem.center(w)
  14.         print(srt_1)

  15. P_triangle(n = int(input("请输入一个正整数:")))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-10 19:56:31 | 显示全部楼层
def fun(num):
    char1 = char2 = ''                #char1字符串前半段,char2字符串后半段
    for i in range(num):
        space = ''
        #字符串前的空格
        for j in range(num-1):
            space += ' '
        num -= 1   
        #字符串前半段
        x = i % 26
        char1 += chr(65+x)
        #字符串后半段
        if i:
            temp = len(char1)
            char2 = char1[temp-2::-1]
        #打印
        print(space+char1+char2)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-10 20:58:20 | 显示全部楼层
本帖最后由 8306最硬 于 2018-3-10 21:12 编辑
  1. def fun(n):
  2.     a = [''.join( chr(x%26+65) for x in range(i) ) for i in range(1, n + 1)]
  3.     b = [''.join( chr(x%26+65) for x in range(i) )[::-1] for i in range(n)]

  4.     print('\n'.join( (i+j).center(2*n-1) for i, j in zip(a, b) ))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-11 16:35:46 | 显示全部楼层
  1. def fun(num):
  2.     from string import ascii_uppercase

  3.     count = len(ascii_uppercase)
  4.     for index in range(1, num + 1):
  5.         index, remainder = divmod(index, count)
  6.         left = ascii_uppercase * index + ascii_uppercase[:remainder]
  7.         result = left + left[::-1][1:]
  8.         print(' ' * (num - len(left)) + result)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-11 17:57:20 | 显示全部楼层
本帖最后由 凌九霄 于 2018-3-11 17:58 编辑
  1. def chartriangle(x):
  2.     for i in range(1, x + 1):

  3.         char = ''

  4.         for j in range(1, i + 1):
  5.             num = 64 + j
  6.             if num > 90:
  7.                 num -= 26
  8.             char += chr(num)
  9.         char += char[::-1][1:]
  10.         print(char.center(2 * x))


  11. chartriangle(28)
复制代码

360截图20180311175701154.jpg

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-11 22:09:05 | 显示全部楼层
  1. def fun(n):
  2.     letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  3.     for i in range(n):
  4.         if i == 0:
  5.             print(letters[i].center(2*n-1))
  6.         else:
  7.             if i > 25:
  8.                 sub_str = letters + letters[:i-25]
  9.             else:
  10.                 sub_str = letters[:i+1]
  11.             sub_str_list = list(sub_str)
  12.             sub_str_list.reverse()
  13.             reversed_sub_str = ''.join(sub_str_list)
  14.             print((sub_str + reversed_sub_str[1:]).center(2 * n - 1))
  15. if __name__ == '__main__':
  16.     fun(30)
复制代码

点评

明天继续评分  发表于 2018-3-12 21:59

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-11 22:13:06 | 显示全部楼层
  1. world = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  2. def cal(x):
  3.     for a in range(x):
  4.         if a <= 26:
  5.             temp = world[0:a]
  6.         else:
  7.             temp = world + world[0:a-26]
  8.         print(' '*(x-a-1),end='')
  9.         for b in range(-a,a-1):
  10.             if b < 0:
  11.                 print(temp[b],end='')
  12.             elif b>= 0:
  13.                 print(temp[a - b - 2],end='')
  14.         print()

  15. num = int(input('请输入你要打印的行数:'))
  16. cal(num)
  17.         
复制代码

点评

最上多一个空行  发表于 2018-3-13 21:30

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-11 23:23:21 | 显示全部楼层
  1. #思路:
  2. #1、先生成一个正序的字母列表
  3. #2、再对应生成其倒序的列表,并将第一个元素剔除后的新列表
  4. #3、两个列表合并
  5. #Step1、因为这个列表可以是无限的,所以用生成器去实现
  6. def alphag():
  7.     ini_a='A'
  8.     yield ini_a
  9.     counter=0
  10.     while True:
  11.         counter=counter+1
  12.         if counter%26==0:
  13.             ini_a='A'
  14.         else:
  15.             #字母和ASCII码数值的转换函数
  16.             ini_a=chr(ord(ini_a)+1)
  17.         yield ini_a
  18. #实现一个提供参数的生成正序字母表的函数
  19. def alpha_z(n):
  20.     ax=alphag()
  21.     i=0
  22.     lista=[]
  23.     while i<n:
  24.         lista.append(next(ax))
  25.         i=i+1
  26.     return lista

  27. #实现一个合并正倒序字母列表的函数
  28. def addfun(n):
  29.     la=alpha_z(n)
  30.     return la+la[::-1][1:]

  31. #最终函数
  32. def fun(n):
  33.     i=1
  34.     while i<n+1:
  35.         for j in range(n-i):
  36.             print ('  ',end='')
  37.         for k in range(i*2-1):
  38.             print(addfun(i)[k],end='')
  39.         i=i+1
  40.         print()
  41.     return None
  42.         
  43. fun(28)
复制代码

点评

要求居中对齐  发表于 2018-3-13 21:31

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1

查看全部评分

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

使用道具 举报

发表于 2018-3-12 10:46:24 | 显示全部楼层
  1. import string

  2. case = string.uppercase
  3. c = 55
  4. l = 2 * c - 1
  5. for i in range(1, c + 1):
  6.     case = [case, case + case[:c - 26]][c > 26]
  7.     print ('{:^%s}' % (l)).format(case[:i] + case[:i][::-1][1:i])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-12 13:08:31 | 显示全部楼层
  1. def fun(n):
  2.     showstr = ''
  3.     for i in range(n):
  4.         showstr += ' ' * (n - i - 1)
  5.         if i > 0:
  6.             for j in range(i + 1):
  7.                 showstr += chr(65 + j % 26)
  8.             for k in range(i):
  9.                 showstr += showstr[-2*k-2]
  10.         else:
  11.             showstr += 'A'
  12.         showstr += '\n'
  13.     print(showstr)
  14. for i in range(1,29):
  15.     print('fun({})的输出为:'.format(i))
  16.     fun(i)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-12 13:09:31 | 显示全部楼层
本帖最后由 Ruicker 于 2018-3-12 13:11 编辑

感谢出题@shigure_takimi


我不会@的写法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-12 15:37:08 | 显示全部楼层
感觉自己不太擅长做这类题,老是弄得太复杂,等着看大神的答案~

  1. def fun(n):
  2.         list1 = []
  3.         for i in range(n):
  4.                 str1 = ''
  5.                 m = 1
  6.                 for j in range(2*i+1):
  7.                         if j<=(2*i+1)//2:
  8.                                 if (65+j) > 90:
  9.                                         character = 65+j-26
  10.                                 else:
  11.                                         character = 65+j
  12.                                 str1 += chr(character)
  13.                         else:
  14.                                 if (65+j-2*m) > 90:
  15.                                         character = 65+j-2*m-26
  16.                                 else:
  17.                                         character = 65+j-2*m
  18.                                 str1 += chr(character)
  19.                                 m += 1
  20.                 list1.append(str1)
  21.                
  22.         for k in range(len(list1)):
  23.                 print(' '*(n-k-1)+list1[k]+' '*(n-k-1))


  24. fun(35)
复制代码


结果:
字母金字塔.png

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-12 15:43:22 | 显示全部楼层
本帖最后由 guobingjie123 于 2018-3-12 15:52 编辑

list1=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
floor=int(input("请输入您想要的层数:"))
num=floor-1
if  floor>len(list1) or floor<0:
    print("您输入的数大于字母总数,请输入0到25之间的数字")
    quit()
for  i  in  range(floor):
     new=""
     if i==0:
         new=new+list1
         print(" "*(num)+new)
     else:
        num-=1
        for  j   in   range(0,i+1):
            new=new+list1[j]
        for  m  in   range(j-1,-1,-1):
            new=new+list1[m]
        print(" "*(num)+new)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-12 16:42:00 | 显示全部楼层
  1. zimu = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'*50)
  2. fan = list(reversed(zimu))

  3. def fun(x):
  4.         for i in range(x):
  5.                 if i == 0:
  6.                         print(" "*(x-1),'A')
  7.                         x -= 1
  8.                 else:
  9.                         st = ''.join(j for j in zimu[:i+1]) + ''.join(j for j in fan[-i:])
  10.                         print(" "*(x-1),st)
  11.                         x -= 1
  12.                
  13. if __name__ == '__main__':
  14.         fun(28)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-12 16:57:38 | 显示全部楼层
  1. def ff(n1):
  2.     s1, lst, n2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', [], n1
  3.     for i in range(n1):
  4.         s2 = s1[:n2-1]
  5.         s3 = s2[::-1]
  6.         md = s1[n2-1]
  7.         nb = s2 + md + s3
  8.         lst.append(nb)
  9.         n2 -= 1
  10.     lst = lst[::-1]
  11.     for x in lst:
  12.         print(x.center(n1 * 2 - 1, ' '))
复制代码

点评

参数超过26报错  发表于 2018-3-13 21:36

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
冬雪雪冬 + 1 + 1

查看全部评分

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

使用道具 举报

 楼主| 发表于 2018-3-12 21:58:46 | 显示全部楼层
到此评分结束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-12 22:02:01 | 显示全部楼层

点评

今天没功力了,明天吧  发表于 2018-3-12 22:46

评分

参与人数 1荣誉 +10 鱼币 +10 贡献 +10 收起 理由
冬雪雪冬 + 10 + 10 + 10

查看全部评分

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

使用道具 举报

发表于 2018-3-12 23:56:09 | 显示全部楼层
def fun(n):
   
    k = n//26
    start = [chr(i) for i in range(65,91)]*(k+1)
    for each in range(n):
        a = start[:each+1]
        c = start[:each]
        b = list(reversed(c))
        
        print(' '*(n-each-1)+''.join(a)+''.join(b)+' '*(n-each))

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

使用道具 举报

发表于 2018-3-13 01:40:28 From FishC Mobile | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-3-9 23:15

列表间隔为负数这个学习到了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 09:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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