鱼C论坛

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

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

[复制链接]
发表于 2018-3-10 10:13:01 | 显示全部楼层
本帖最后由 塔利班 于 2018-3-12 21:54 编辑
  1. def fun(x):
  2.     a='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  3.     for i in range(1,x+1):
  4.         b=' '*(x-i)
  5.         c=a*(i//26)+a[:(i%26)]
  6.         tar=b+c[:-1]+c[::-1]
  7.         print(tar)
  8. fun(28)
复制代码

点评

range中有中文逗号  发表于 2018-3-12 21:44

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 10:23:19 | 显示全部楼层
def fun(x):
    lines = 1
    charrange = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    while lines <= x:
        if lines > len(charrange):
            charline = charrange * (lines//len(charrange))+ charrange[:lines % len(charrange)]
        else:
            charline = charrange[:lines]
        charline = charline + charline[-2::-1]
        print(charline.center(x * 2 - 1))
        lines += 1
        
i = int(input('输入行数:'))
fun(i)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 10:26:31 | 显示全部楼层
def fun(x):
    lines = 1
    charrange = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    while lines <= x:
        charline = charrange * (lines//len(charrange))+ charrange[:lines % len(charrange)]
        charline = charline + charline[-2::-1]
        print(charline.center(x * 2 - 1))
        lines += 1
        
i = int(input('输入行数:'))
fun(i)


改进一下

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

使用道具 举报

发表于 2018-3-10 12:35:30 | 显示全部楼层
def fun(x):
    p='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    s=''
    coun = 1
    p*=x%26+1
    for each in range(x):
        print(' '*(x-1)+p[0:coun]+p[0:coun-1][::-1])
        x=x-1
        coun+=1

fun(28)

比较简单粗暴。数据大了可能不太好

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 13:22:31 | 显示全部楼层
  1. source = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

  2. list_r = []
  3. list_r2 = []
  4. def fun(n):
  5.         global list_r
  6.         result = ''
  7.         if n == 1:
  8.                 list_r.insert(0,'A')
  9.                 #print('A')
  10.         else:
  11.                 for i in range(n):
  12.                         while i > 25:
  13.                                 i = i % 25 - 1
  14.                         result += source[i]
  15.                 result_r = result[::-1]
  16.                 result_r = result_r[1:]
  17.                 result = result + result_r
  18.                 list_r.insert(0,result)
  19.                 #print(result)
  20.                 fun(n-1)

  21.         return list_r
  22.        
  23. def add_space(list_r):
  24.         for each in list_r:
  25.                 while len(each) < len(list_r[-1]):
  26.                         each = ' ' + each + ' '
  27.                 list_r2.append(each)
  28.         return list_r2

  29. #fun(27)
  30. for each in add_space(fun(28)):
  31.         print(each)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 13:24:33 | 显示全部楼层
版主,你还没说通过什么途径可以提供题目给你。。。

点评

可以发私信,或者发帖并@我  发表于 2018-3-12 21:46
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-10 13:27:33 | 显示全部楼层
本帖最后由 nononoyes 于 2018-3-10 13:39 编辑

这是结果,代码见下面回答
QQ截图20180310133000.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-10 13:38:42 | 显示全部楼层
本帖最后由 nononoyes 于 2018-3-10 14:02 编辑

由于编辑后保存与自己编写的代码不一样,所以重新回复了本帖   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-10 13:46:59 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-10 14:00:51 | 显示全部楼层
本帖最后由 nononoyes 于 2018-3-10 14:01 编辑

发现了一个问题:
编辑后保存时,部分代码消失了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-10 14:04:50 | 显示全部楼层
import string   
def fun(n):
    wList = []
    for word in string.ascii_uppercase:
        wList.append(word)
    y = n//26
    s = n%26
    wList = wList*y
    for b in range(0,s):
        wList.append(wList[b])
    for i in range(n):
        if i ==0:
            rList = []
            for j in range(n-(i+1)):
                rList.append(' ')
            rList.append(wList[i])
            for j in range(n-(i+1)):
                rList.append(' ')
            for k in rList:
                print(k,end ='')
            print()
        else:
            m=0
            rList = []
            for j in range(n-(i+1)):
                rList.append(' ')
            while m<=i:
                rList.append(wList[m])
                m+=1
            m-=2
            while m>=0:
                rList.append(wList[m])
                m-=1
            for j in range(n-(i+1)):
                rList.append(' ')
            for k in rList:
                print(k,end ='')
            print()
fun(28)            
QQ截图20180310133000.png

点评

fun(1)报错  发表于 2018-3-12 21:48

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 14:10:36 | 显示全部楼层
本帖最后由 JessiFly 于 2018-3-10 22:04 编辑
  1. #从A开始顺序打印count个字母
  2. def printAZ(count):
  3.     list1 = []
  4.     temp = 65
  5.     for i in range(count):
  6.         list1.append(chr(temp))
  7.         temp += 1
  8.     for each in list1:
  9.         print(each,end = '')
  10.    
  11. #以A为结束(逆序)打印count个字母
  12. def printZA(count):
  13.     list1 = []
  14.     temp = 65
  15.     for i in range(count):
  16.         list1.append(chr(temp))
  17.         temp += 1
  18.     list1.reverse()
  19.     for each in list1:
  20.         print(each,end = '')

  21. #打印第n行的字母
  22. def printLine(n):
  23.     if n ==0:
  24.         pass
  25.     elif n == 1:
  26.         print('A',end = '')
  27.     elif n <= 26:
  28.         printAZ(n)
  29.         printZA(n-1)
  30.     else:
  31.         for i in range(n//26):
  32.             printAZ(26)
  33.         printLine(n%26)
  34.         for i in range(n//26):
  35.             printZA(26)

  36. def fun(n):
  37.     #打印前n-1行
  38.     for i in range(1,n):
  39.         #打印字母前的空格
  40.         print(' '*(n-i),end = '')
  41.         #打印第n行的字母
  42.         printLine(i)
  43.         #打印字母后的空格
  44.         print(' '*(n-i))
  45.     #打印最后一行
  46.     printLine(n)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 15:00:41 | 显示全部楼层
  1. def fun(n):
  2.     for i in range(n):
  3.         l = [chr(65+i%26) for i in range(i+1)]
  4.         ll =l[:]
  5.         ll.reverse()
  6.         l = l+ll[1:]
  7.         print(''.join(l).center(2*n))

  8. if __name__=="__main__":
  9.     fun(28)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 15:17:10 | 显示全部楼层
def fun(n,list_output):
    str_abc='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    turn=n//26
    num=n%26
    if n>1:
        str_num=str_abc[num-1]
        for y in range(1,num):
            str_num=str_abc[num-1-y]+str_num+str_abc[num-1-y]
        for x in range(turn):
            str_num=str_abc+str_num+str_abc[::-1]
        list_output.append(str_num)
        return fun(n-1,list_output)
    else:
        list_output.append('A')
list_output=[]
temp=input('请输入行数:')
n=int(temp)
fun(n,list_output)
for each in list_output[::-1]:
    print(each.center(n*2-1))

点评

26行出错  发表于 2018-3-12 21:51

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 15:59:02 | 显示全部楼层
本帖最后由 victor.xu 于 2018-3-10 16:00 编辑

终于做出来一个字符串相关的问题。
  1. def f(n):
  2.     lis1 = [i for i in range(65, 91)]
  3.     lis2 = []
  4.     for i in range(0, n):
  5.         if n <= 26:
  6.             lis2.append(lis1[i])
  7.         else:
  8.             lis2 = lis1 + lis1[0:n-26]        
  9.     lis = lis2 + lis2[-2::-1]
  10.     return tuple(lis)
  11. n = int(input('请输入自然数:\n'))
  12. for i in range(1,n+1):
  13.     result = f(i)
  14.     st = '%c'*(2*i-1) % result
  15.     print(st.center(2 * n - 1))
复制代码

  1. 请输入自然数:
  2. 28
  3.                            A                           
  4.                           ABA                          
  5.                          ABCBA                        
  6.                         ABCDCBA                        
  7.                        ABCDEDCBA                       
  8.                       ABCDEFEDCBA                     
  9.                      ABCDEFGFEDCBA                     
  10.                     ABCDEFGHGFEDCBA                    
  11.                    ABCDEFGHIHGFEDCBA                  
  12.                   ABCDEFGHIJIHGFEDCBA                  
  13.                  ABCDEFGHIJKJIHGFEDCBA                 
  14.                 ABCDEFGHIJKLKJIHGFEDCBA               
  15.                ABCDEFGHIJKLMLKJIHGFEDCBA               
  16.               ABCDEFGHIJKLMNMLKJIHGFEDCBA              
  17.              ABCDEFGHIJKLMNONMLKJIHGFEDCBA            
  18.             ABCDEFGHIJKLMNOPONMLKJIHGFEDCBA            
  19.            ABCDEFGHIJKLMNOPQPONMLKJIHGFEDCBA           
  20.           ABCDEFGHIJKLMNOPQRQPONMLKJIHGFEDCBA         
  21.          ABCDEFGHIJKLMNOPQRSRQPONMLKJIHGFEDCBA         
  22.         ABCDEFGHIJKLMNOPQRSTSRQPONMLKJIHGFEDCBA        
  23.        ABCDEFGHIJKLMNOPQRSTUTSRQPONMLKJIHGFEDCBA      
  24.       ABCDEFGHIJKLMNOPQRSTUVUTSRQPONMLKJIHGFEDCBA      
  25.      ABCDEFGHIJKLMNOPQRSTUVWVUTSRQPONMLKJIHGFEDCBA     
  26.     ABCDEFGHIJKLMNOPQRSTUVWXWVUTSRQPONMLKJIHGFEDCBA   
  27.    ABCDEFGHIJKLMNOPQRSTUVWXYXWVUTSRQPONMLKJIHGFEDCBA   
  28.   ABCDEFGHIJKLMNOPQRSTUVWXYZYXWVUTSRQPONMLKJIHGFEDCBA  
  29. ABCDEFGHIJKLMNOPQRSTUVWXYZAZYXWVUTSRQPONMLKJIHGFEDCBA
  30. ABCDEFGHIJKLMNOPQRSTUVWXYZABAZYXWVUTSRQPONMLKJIHGFEDCBA
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 16:12:24 | 显示全部楼层
如果n是26的若干倍时,把上面的答案做了点修改。
  1. def f(n):
  2.     lis1 = [i for i in range(65, 91)]
  3.     lis2 = []
  4.     for i in range(0, n):
  5.         if int(n / 26) < 1:
  6.             lis2.append(lis1[i])
  7.         else:
  8.             lis2 = lis1 * int(n / 26) + lis1[0:n-26  * int(n / 26)]        
  9.     lis = lis2 + lis2[-2::-1]
  10.     return tuple(lis)
  11. n = int(input('请输入自然数:\n'))
  12. for i in range(1,n+1):
  13.     result = f(i)
  14.     st = '%c'*(2*i-1) % result
  15.     print(st.center(2 * n - 1))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-10 16:28:10 | 显示全部楼层
订正
def fun(n,list_output):
    str_abc='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    turn=(n-1)//26
    num=(n-1)%26
    if n>1:
        str_num=str_abc[num]
        for y in range(num):
            str_num=str_abc[num-1-y]+str_num+str_abc[num-1-y]
        for x in range(turn):
            str_num=str_abc+str_num+str_abc[::-1]
        list_output.append(str_num)
        return fun(n-1,list_output)
    else:
        list_output.append('A')
list_output=[]
temp=input('请输入行数:')
n=int(temp)
fun(n,list_output)
for each in list_output[::-1]:
    print(each.center(n*2-1))

点评

补上2分  发表于 2018-3-12 21:53

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 16:43:36 | 显示全部楼层
本帖最后由 天圆突破 于 2018-3-10 18:13 编辑
  1. def fun(p):
  2.     lst = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
  3.     for n in range(1, p+1):
  4.         if n%26:print((p - n) * ' ' + ''.join(lst * ((n - 1) // 26)) + ''.join(lst[:n % 26]) + ''.join(
  5.                 list(reversed(lst[:n % 26 - 1]))) + ''.join(list(reversed(lst)) * ((n - 1) // 26)))
  6.         else:print((p-n)*' ' + ''.join(lst*((n-1)//26)) + ''.join(lst) + ''.join(list(reversed(lst[:n%26-1]))) + ''.join(list(reversed(lst))*((n-1)//26)))

  7. if __name__ == '__main__':
  8.     fun(28)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 16:51:41 | 显示全部楼层
本帖最后由 qwc3000 于 2018-3-10 17:30 编辑

def fun(num):
    str_tmp=''
    str_result=''
    for i in range(num):
        # 获取前num-1数据
        # 计算前num-i个空格
        for j in range(0,num-i):
            str_tmp+=' '
        # 计算num-i到num的字母
        for j in range(num-i,num):
            if(65+j-num+i)>90:
                str_tmp+=chr(65+j-num+i-26)
            else:
                str_tmp+=chr(65+j-num+i)
        if(65+i)>90:
            str_num=chr(65+i-26)
        else:
            str_num=chr(65+i)
        #反向前num-1个数据
        str_list=list(str_tmp)
        str_list.reverse()
        str_tmp2=''.join(str_list)
        #合并总数据
        str_tmp=str_tmp+str_num+str_tmp2+'\r\n'
        #结果值
        str_result+=str_tmp
        str_tmp=''
    return str_result

print(fun(28))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-10 19:34:31 | 显示全部楼层
  1. def fun(i):
  2.     str1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  3.     list1 = list(str1)
  4.     for n in range(1,i+1):
  5.         if n > len(str1):
  6.             list1.extend(list1[:n-len(str1)])
  7.         if n == 1:
  8.             print('A')
  9.         else:
  10.             print(''.join(list1[:n]+list1[n-2::-1]))
  11.             del list1[len(str1):]
  12. i = int(input('输入:'))
  13. fun(i)
复制代码

点评

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

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 17:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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