鱼C论坛

 找回密码
 立即注册
查看: 6282|回复: 85

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

[复制链接]
发表于 2018-3-9 21:05:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2018-3-12 21:19 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考”,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
实现打印字母三角形,如:
fun(1)输出:
A
fun(2)输出
A
ABA
fun(3)输出:
  A
ABA
ABCBA
fun(28)最底层应为:
ABCDEFGHIJKLMNOPQRSTUVWXYZABAZYXWVUTSRQPONMLKJIHGFEDCBA
即当达到字母Z以后再从A开始。

1.jpg

感谢 @shigure_takimi 提供题目,也希望大家有适宜的题目提供给我们,共同把每日一题这个项目做好。@shigure_takimi 回一帖,给予出题奖励。
要求:
题目难易适度,以python语言的运用为主,算法为辅。
对于提供优质题目的鱼油给予鱼币奖励。

评分

参与人数 3荣誉 +11 鱼币 +11 贡献 +4 收起 理由
shigure_takimi + 1 + 1 支持楼主!已再次跟帖。
Andy0214 + 5 + 5 + 1 感谢楼主无私奉献!
8306最硬 + 5 + 5 + 3 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2018-3-9 21:49:40 From FishC Mobile | 显示全部楼层
本帖最后由 Chase_Kas 于 2018-3-10 11:52 编辑
  1. def fun(n):
  2.     def alpha(m):
  3.         asc = 64
  4.         str1 = ''
  5.         for i in range(m+1):
  6.             if asc == 90:
  7.                 asc = 64
  8.             asc += 1
  9.             str1 += chr(asc)
  10.         for i in range(m):
  11.             if asc == 65:
  12.                 asc = 91
  13.             asc -= 1
  14.             str1 += chr(asc)
  15.         return str1
  16.     for i in range(n):
  17.         print(alpha(i).center(n*2 -1))
  18. fun(30)
复制代码

仔细分析三角形后发现下一行仅仅是比上一行多了两个字符,重写了后效率高出了一大截
  1. def fun(n):
  2.     asc, asc1 = 66, 65
  3.     str1 = 'A'
  4.     for i in range(n):
  5.         if i == 0:
  6.             print(str1.center(n*2 -1))
  7.             continue
  8.         str1 = str1[:i] + chr(asc) + chr(asc1) + str1[i:]
  9.         asc += 1
  10.         asc1 += 1
  11.         if asc > 90:
  12.             asc = 65
  13.         if asc1 > 90:
  14.             asc1 = 65
  15.         print(str1.center(n*2 - 1))
  16. fun(135)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-9 22:19:07 | 显示全部楼层
本帖最后由 t6am3 于 2018-3-9 22:36 编辑

#第一种:
def triangle(n, N):
    base = 65
    print(' '*(N-n), end='');
    stack = []
    for i in range(n):
        t = base+(i%26)
        print('%c'% t, end='')
        if i != n-1:
            stack.append('%c'%t)
    stack.reverse()
    for eachletter in stack:
        print(eachletter, end='')
    print('')
   
def fun(n):
    for i in range(1, n+1):
        triangle(i, n)

#第二种好像简单一点点?……:
def triangle(n, N):
    print(' '*(N-n), end='')
    Stack = list((range(n)))
    for i in Stack:
        print('%c'%(65+i%26), end='')
    Stack.pop()
    Stack.reverse()
    for i in Stack:
        print('%c'%(65+i%26), end='')
    print('')
   
def fun(n):
    for i in range(1, n+1):
        triangle(i, n)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-9 23:05:55 | 显示全部楼层
  1. def fun(number):
  2.         str1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  3.         for i in range(number):
  4.                 for j in range(0,number-i-1):
  5.                         print(' ',end = '')
  6.                 for j in range(i+1):
  7.                         print(str1[j%26],end = '')
  8.                        
  9.                 for j in range(i):
  10.                         print(str1[(i-j-1)%26],end = '')
  11.                 print('')#换行


  12. if __name__ == '__main__':
  13.         number = int(input('请输入数字:'))
  14.         fun(number)
复制代码

结果1:
请输入数字:3
  A
ABA
ABCBA

***Repl Closed***
结果2:
  1. 请输入数字:26
  2.                          A
  3.                         ABA
  4.                        ABCBA
  5.                       ABCDCBA
  6.                      ABCDEDCBA
  7.                     ABCDEFEDCBA
  8.                    ABCDEFGFEDCBA
  9.                   ABCDEFGHGFEDCBA
  10.                  ABCDEFGHIHGFEDCBA
  11.                 ABCDEFGHIJIHGFEDCBA
  12.                ABCDEFGHIJKJIHGFEDCBA
  13.               ABCDEFGHIJKLKJIHGFEDCBA
  14.              ABCDEFGHIJKLMLKJIHGFEDCBA
  15.             ABCDEFGHIJKLMNMLKJIHGFEDCBA
  16.            ABCDEFGHIJKLMNONMLKJIHGFEDCBA
  17.           ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
  18.          ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
  19.         ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
  20.        ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
  21.       ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
  22.      ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
  23.     ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
  24.    ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
  25.   ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
  26. ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
  27. ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA

  28. ***Repl Closed***
复制代码

结果3:
请输入数字:27
                          A
                         ABA
                        ABCBA
                       ABCDCBA
                      ABCDEDCBA
                     ABCDEFEDCBA
                    ABCDEFGFEDCBA
                   ABCDEFGHGFEDCBA
                  ABCDEFGHIHGFEDCBA
                 ABCDEFGHIJIHGFEDCBA
                ABCDEFGHIJKJIHGFEDCBA
               ABCDEFGHIJKLKJIHGFEDCBA
              ABCDEFGHIJKLMLKJIHGFEDCBA
             ABCDEFGHIJKLMNMLKJIHGFEDCBA
            ABCDEFGHIJKLMNONMLKJIHGFEDCBA
           ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
          ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
         ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
        ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
       ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
      ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
     ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
    ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
   ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
  ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZAZYXWVUTSRQPONMLKJIHGFEDCBA

***Repl Closed***
结果4:
请输入数字:28
                           A
                          ABA
                         ABCBA
                        ABCDCBA
                       ABCDEDCBA
                      ABCDEFEDCBA
                     ABCDEFGFEDCBA
                    ABCDEFGHGFEDCBA
                   ABCDEFGHIHGFEDCBA
                  ABCDEFGHIJIHGFEDCBA
                 ABCDEFGHIJKJIHGFEDCBA
                ABCDEFGHIJKLKJIHGFEDCBA
               ABCDEFGHIJKLMLKJIHGFEDCBA
              ABCDEFGHIJKLMNMLKJIHGFEDCBA
             ABCDEFGHIJKLMNONMLKJIHGFEDCBA
            ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA
           ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA
          ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA
         ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA
        ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA
       ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA
      ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA
     ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA
    ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA
   ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA
  ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZAZYXWVUTSRQPONMLKJIHGFEDCBA
ABCDEFGHIJKLMNOPQRSTUVWXYZABAZYXWVUTSRQPONMLKJIHGFEDCBA

***Repl Closed***

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-9 23:08:39 | 显示全部楼层

答案在上面显示的排版好像有问题,上一张qq截图

file:///C:/Users/pc/Desktop/QQ%E5%9B%BE%E7%89%8720180309230728.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-9 23:15:38 | 显示全部楼层
本帖最后由 °蓝鲤歌蓝 于 2018-3-9 23:24 编辑

  1. def fun(num):
  2.     eng = ''.join(chr(i) for i in range(65, 91))
  3.     if num > 26:
  4.         eng = eng*(num//26)
  5.         eng += eng[:num-26]
  6.     n = 1
  7.     while n <= num:
  8.         print(' ' * (num - n), end='')
  9.         result = eng[:int(n-0.5)+1] + eng[:int(n-0.5)][::-1]
  10.         print(result)
  11.         n += 1

  12. fun(4)
  13. fun(26)
  14. fun(28)
  15. fun(53)
复制代码

评分

参与人数 2荣誉 +4 鱼币 +4 收起 理由
shigure_takimi + 1 + 1 感谢楼主无私奉献!已再次跟帖。
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-9 23:19:27 | 显示全部楼层
本帖最后由 雪人爱晒大太阳 于 2018-3-9 23:21 编辑

想了好久。。。终于想到了。。
  1. #Define the each_line_print function
  2. def each_line_print(n,n_sum):
  3.     #list_alphabet = [chr(i).upper() for i in range(97,123)]
  4.     list_alphabet = ''.join([chr(i).upper() for i in range(97,123)])
  5.     recycle = n//26 #how many times will the n goes for the recycle of the alphabet
  6.     flag = n%26 #how will the n last on which alpha
  7.     r = recycle
  8.     f = flag
  9.     list_print = ' '*(n_sum-n)#identify the numbers of space each line '*'
  10.     while r > 0:
  11.         list_print += list_alphabet
  12.         r -= 1
  13.     list_print += list_alphabet[0:f]
  14.     list_print_reverse = list_print[::-1]
  15.     list_print += list_print_reverse[1:]
  16.     return list_print

  17. def fun(n):
  18.     k = 0
  19.     while k < n:
  20.         print(each_line_print(k+1,n))
  21.         k += 1


  22. 在程序中是对称的,但是不知道为什么在这个帖子里面显示的会是这么不对称。。。
  23. >>> fun(1)
  24. A
  25. >>> fun(2)
  26. A
  27. ABA
  28. >>> fun(3)
  29.   A  
  30. ABA
  31. ABCBA
  32. >>> fun(4)
  33.    A   
  34.   ABA  
  35. ABCBA
  36. ABCDCBA
  37. >>> fun(5)
  38.     A   
  39.    ABA   
  40.   ABCBA  
  41. ABCDCBA
  42. ABCDEDCBA
  43. >>> fun(28)
  44.                            A                           
  45.                           ABA                          
  46.                          ABCBA                        
  47.                         ABCDCBA                        
  48.                        ABCDEDCBA                       
  49.                       ABCDEFEDCBA                     
  50.                      ABCDEFGFEDCBA                     
  51.                     ABCDEFGHGFEDCBA                    
  52.                    ABCDEFGHIHGFEDCBA                  
  53.                   ABCDEFGHIJIHGFEDCBA                  
  54.                  ABCDEFGHIJKJIHGFEDCBA                 
  55.                 ABCDEFGHIJKLKJIHGFEDCBA               
  56.                ABCDEFGHIJKLMLKJIHGFEDCBA               
  57.               ABCDEFGHIJKLMNMLKJIHGFEDCBA              
  58.              ABCDEFGHIJKLMNONMLKJIHGFEDCBA            
  59.             ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA            
  60.            ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA           
  61.           ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA         
  62.          ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA         
  63.         ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA        
  64.        ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA      
  65.       ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA      
  66.      ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA     
  67.     ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA   
  68.    ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA   
  69.   ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA  
  70. ABCDEFGHIJKLMNOPQRSTUVWXYZAZYXWVUTSRQPONMLKJIHGFEDCBA
  71. ABCDEFGHIJKLMNOPQRSTUVWXYZABAZYXWVUTSRQPONMLKJIHGFEDCBA
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-9 23:23:11 From FishC Mobile | 显示全部楼层
  1. #  我的代码。
  2. def f(n):
  3.         s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  4.         width = 2 * n- 1
  5.         for i in range(n):
  6.                 a = (i//26)*s+s[:i%26+1]
  7.                 a = a + a[::-1][1:]
  8.                 print(a.center(width))
  9. f(3)
  10. f(5)
  11. f(28)
复制代码


1520591921737.png

点评

请再跟一帖,给予出题奖励。  发表于 2018-3-12 21:42

评分

参与人数 2荣誉 +8 鱼币 +8 贡献 +3 收起 理由
8306最硬 + 5 + 5 + 3 支持楼主!
冬雪雪冬 + 3 + 3

查看全部评分

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

使用道具 举报

发表于 2018-3-9 23:29:27 | 显示全部楼层
def fun(num):
    str1 = ''
    count1 = 0
    count2 = 0
    for i in range(num):
        if i > 25:
            str1 += chr(65+count2)
            count2 += 1
        else:
            str1 += chr(65 + i)
        for x in range(len(str1)):
            str2 = reversed(str1)
            str3 = str1 + ''.join(list(str2))
            str3 = str3[:count1] + str3[count1 + 1:]
            print(' '*(num-(i-1))+str3)
            count1 += 1
            break
fun(28)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-9 23:38:11 | 显示全部楼层
A=[chr(i) for i in range(65,91)]
def fun1(x):
    B=A[:x-1]
    if x<=26:
        return A[:x]+B[::-1]
    else:
        B=A[:x-1-26]
        return A+A[:x-26]+B[::-1]+A[::-1]

def fun(n):
    m=1
    while n:
        print(' '*n,end='')
        for i in fun1(m):
            print(i,end='')
        m=m+1
        n=n-1
        print('')

if __name__ == '__main__':
    fun(eval(input('请输入阶数:')))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-9 23:38:58 | 显示全部楼层
本帖最后由 坑得飞起 于 2018-3-9 23:44 编辑

n=int(input())
str1="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i in range(1, n+1):
    j = " " * ( n - i )
    str2=''
    #print(i)
    while i>26 :
        str2+=str1
        i-=26
    str2+=str1[0:i]
    k=len(str2)
    str3=''
    for cc in range(0,k):
        str3+=str2[k-cc-1]
    print(j+str2+str3[1:])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-9 23:43:47 | 显示全部楼层
n=int(input())
str1="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i in range(1, n+1):
    j = " " * ( n - i )
    str2=''
    while i>26 :
        str2+=str1
        i-=26
    str2+=str1[0:i]
    k=len(str2)
    str3=''
    for cc in range(0,k):
        str3+=str2[k-cc-1]
    print(j+str2+str3[1:])

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 00:50:36 | 显示全部楼层
  1. def fun(n):
  2.     for i in range(1, n+1):
  3.         str1 = ''
  4.         for j in range(1, i+1):
  5.             if j <= 26:
  6.                 str1 += chr(64 + j)
  7.             else:
  8.                 char = j % 26
  9.                 if char == 0:
  10.                     str1 += 'Z'
  11.                 else:
  12.                     str1 += chr(64 + char)
  13.         print(' ' * (n - i) + str1 + str1[::-1][1:] + ' ' * (n - i))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 01:23:04 | 显示全部楼层
  1. def fun(n):
  2.     if not isinstance(n,int) or n<1: return
  3.     begin=''
  4.     end=''
  5.     n-=1
  6.     for i in range(n+1):
  7.         c='%c' %((i)%26+65)
  8.         print(' '*(n-i),begin,c,end,sep='')
  9.         begin+=c
  10.         end=c+end
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 02:40:44 | 显示全部楼层
def fun(n):
    for i in range(n):
        if n <= 100:
            str_n = ''
            s = 0
            t = 0
            for j in range(2 * n + 1):
                if j >= n - i and j <= n:
                    if ord('A') + j - n + i - s > ord('Z'):
                        s += 26
                    if ord('A') + j - n + i - s < ord('A'):
                        s -= 26
                    str_n += chr(ord('A') + j - n + i - s)
                elif j > n and j <= n + i:
                    if ord('A') + i - j + n - t - s > ord('Z'):
                        t += 26
                    if ord('A') + i - j + n - t -s < ord('A'):
                        t -= 26
                    str_n += chr(ord('A') + i - j + n - s - t)
                else:
                    str_n += ' '               
            print(str_n)
n = int(input('请输入一个正整数:'))
fun(n)


评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 04:07:43 | 显示全部楼层
  1. def traigle(number):
  2.     lineChar = ['A','B','A']
  3.     lineString = ['A','ABA']
  4.     if number == 1:
  5.         print 'A'
  6.         return
  7.     elif number == 2:
  8.         for i in lineString:
  9.             print i.center(2 * number - 1)
  10.         return
  11.     for i in range(3,number + 1):
  12.         if lineChar[(len(lineChar) - 1) / 2] != 'Z':
  13.             lineChar.insert((len(lineChar) + 1) / 2,chr(ord(lineChar[(len(lineChar) + 1) / 2 - 1])))
  14.             lineChar.insert((len(lineChar) + 1) / 2,chr(ord(lineChar[(len(lineChar) + 1) / 2 - 1]) + 1))
  15.         else:
  16.             lineChar.insert((len(lineChar) + 1) / 2,'A')
  17.             lineChar.insert((len(lineChar) + 1) / 2 + 1,'Z')
  18.             
  19.         a = ''
  20.         for i in lineChar:
  21.             a += i
  22.         lineString.append(a)
  23.             
  24.     for i in lineString:
  25.             print i.center(2 * number - 1)
  26.    
  27.    

  28. number = input('Please input a number:')
  29. traigle(number)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 05:07:00 | 显示全部楼层
重新用了最直白的方法:

  1. def traigle(number):
  2.     for i in range(1,number+1):
  3.             line = ''
  4.             t = 0
  5.             for j in range(1,2 * i):
  6.                 if j < (i + 1) :
  7.                     line += chr(ord('A') + t)
  8.                 else:
  9.                     line += line[2 * i - 1 - j]
  10.                 if chr(ord('A') + t) == 'Z':
  11.                        t -= 26      
  12.                 t += 1
  13.             print line.center(2 * number - 1)

  14. number = input('please input a number:')
  15. traigle(number)
  16.         
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-10 08:24:58 | 显示全部楼层
本帖最后由 solomonxian 于 2018-3-10 08:30 编辑

用chr()函数找
  1. def fun(n):
  2.     return '\n'.join("".join(chr((i - abs(j)-1) % 26 + 65)
  3.                              for j in range(-i+1, i)).center(2*n-1)
  4.                      for i in range(1, n+1))
复制代码

感觉可能直接索引会比较快
  1. def fun2(n):
  2.     string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  3.     result = []
  4.     for i in range(n):
  5.         temp = ''
  6.         num = i
  7.         while len(temp) <= i:
  8.             temp += string[:num+1]
  9.             num -= 26
  10.         result.append((temp[:] + temp[-2::-1]).center(2*n - 1))
  11.     return "\n".join(result)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 09:47:34 | 显示全部楼层
本帖最后由 LargeCat 于 2018-3-10 09:49 编辑
  1. def Convert(n):
  2.     C=lambda x: chr(x%26+64) if x%26 else 'Z'
  3.     string=''
  4.     string1=''
  5.     for i1 in range(1, n+1):
  6.         string=string+C(i1)
  7.     for i2 in string[::-1][1:]:
  8.         string1=string1+i2
  9.     return string+string1

  10. def Run(n):
  11.     for i in range(1, n+1):
  12.         print(Convert(i))

  13. Run(5)  #以输入5进行测试
复制代码


结果:
  1. A
  2. ABA
  3. ABCBA
  4. ABCDCBA
  5. ABCDEDCBA
复制代码

点评

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

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 10:01:42 | 显示全部楼层
number = input()
temp = 'A'
i = 0
while i < int(number):
    j = int(number)-i
    #print(ord(temp)+1)
    d=0
    while d < j-1:
        print(" ",end='')
        d = d + 1
    d=0
    while d <= i:
        if ord(temp)+ d  > ord('Z'):
            print(chr((ord(temp)+d-ord('A'))%26+ord('A')),end = '')
        else :
            print(chr((ord(temp)+d)),end='')
        d=d+1
    d=i-1
    while d>=0:
         if ord(temp)+ d  > ord('Z'):
             print(chr((ord(temp) + d - ord('A')) % 26 + ord('A')), end='')
         else:
          print(chr((ord(temp)+d)),end = '')
         d=d-1
    print('\n',end='')
    i=i+1


评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 18:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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