鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 冬雪雪冬

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

[复制链接]
发表于 2018-8-31 23:50:37 | 显示全部楼层
import string

STRING = list(string.ascii_uppercase + string.ascii_lowercase)
def strrange(*args):
    try:
        if args.__len__() == 3:
            if type(args[0]) == str and type(args[1]) == str and type(args[2]) == int:
                start = STRING.index(args[0])
                end = STRING.index(args[1])
                bc = args[2]
                for i in range(start, end, bc):
                    print(STRING[i], end='')
            else:
                print('请输入正确的格式,参数必须为str类型的英文(不区分大小写),步长必须是int类型的整数'.center(50, '-'))
        elif args.__len__() == 2:
            if type(args[0]) == str and type(args[1]) == str:
                start = STRING.index(args[0])
                end = STRING.index(args[1])
                for i in range(start, end):
                    print(STRING[i], end='')
            else:
                print('请输入正确的格式,参数必须为str类型的英文(不区分大小写)'.center(50, '-'))
        else:
            if type(args[0]) == str:
                start = STRING.index(args[0])
                for i in range(start):
                    print(STRING[i], end='')
            else:
                print('请输入正确的格式,参数必须为str类型的英文(不区分大小写)'.center(50, '-'))
    except:
        print('请输入正确的格式,参数必须为str类型的英文(不区分大小写)'.center(50,'-'))

strrange()

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-9-1 09:09:49 | 显示全部楼层
本帖最后由 xyl20180824 于 2018-9-1 09:40 编辑
  1. def strrange(a):
  2.     str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
  3.     res = str.split(a)
  4.     print(res[0])

  5. strrange('z')
  6. strrange('e')
复制代码


  1. import re
  2. def strrange(a,b):
  3.     str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
  4.     parameter = a+'(.*?)'+b
  5.     res1 = re.search(parameter,str).group(0)
  6.     res = res1.strip(b)
  7.     print(res)


  8. strrange('Z','g')
复制代码

结果

结果

结果

结果

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-9-1 09:45:48 | 显示全部楼层
  1. def f2(start,end,length):
  2.         total = [chr(i) for i in range(65,91)] + [chr(i) for i in range(97,123)]
  3.         begin = total.index(start)
  4.         stop = total.index(end) - 1
  5.         string = start
  6.         if (ord(start) > ord(end)) and length >= 0:
  7.                 return ''
  8.         elif ((ord(start) > ord(end)) and length <= -1) or ((ord(start) < ord(end)) and length >= 1):
  9.                 while abs(stop - begin) >= abs(length):
  10.                         begin += length
  11.                         string += total[begin]
  12.                 return string
  13.         
  14. def f(end,start='A',length=1):
  15.         if start == 'A':
  16.                 return f2(start,end,length)
  17.         else:
  18.                 return f2(end,start,length)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-9-1 10:35:50 | 显示全部楼层
  1. def strrange(start,end=None,step=1):
  2.     if end==None:
  3.         end=start
  4.         start='A'
  5.     letter=['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',
  6.             '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']
  7.     fin=''
  8.     for i in range(letter.index(start),letter.index(end),step):
  9.         fin+=letter[i]
  10.     print("'%s'"%(fin))
  11.    
  12. strrange('z')
  13. strrange('Z', 'g')
  14. strrange('m', 'M', -5)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-9-1 15:28:39 | 显示全部楼层
  1. def strrange(s,end = None,step = None):
  2.     if end is None:
  3.         end = s
  4.         s = 'A'
  5.     start = 0
  6.     e = 0;
  7.     if ord('z')>= ord(s) >= ord('a'):
  8.         start = 26 + ord(s) - 97
  9.     elif ord('Z') >= ord(s) >= ord('A'):
  10.         start = ord(s) - 65
  11.     if ord('z') >= ord(end) >= ord('a'):
  12.         e = 26 + ord(end) - 97
  13.     elif ord('Z') >= ord(end) >= ord('A'):
  14.         e = ord(end) - 65
  15.     string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
  16.     print(string[start:e:step])
复制代码
2.png

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-9-1 17:05:37 | 显示全部楼层
temp = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
list1 = []

def strrange(*args):
    if len(args)==2:
        if args[0] in temp:
            if args[1] in temp:
                if temp.index(args[0])<temp.index(args[1]):
                    for i in range(temp.index(args[0]),temp.index(args[1])):
                        list1.append(temp[i])
                        str1=''.join(list1)
                    return str1
                else:
                    return ''
   
    if len(args)==1:
        if args[0] in temp:
            for i in range (0,temp.index(args[0])):
                            list1.append(temp[i])
                            str1=''.join(list1)
    return str1
   
    if len(args)==3:
        if args[0] in temp and args[1] in temp  :
            for i in range(temp.index(args[0]),temp.index(args[1]),args[2]):
                list1.append(temp[i])
                str1=''.join(list1)
    return str1

点评

list1 = []放在外面,再次调用函数时出错  发表于 2018-9-3 20:25

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-9-1 21:46:47 | 显示全部楼层
  1. def strrange(*x):
  2.     if len(x)==3:
  3.         start,end,step=x
  4.     elif len(x)==2:
  5.         start=x[0]
  6.         end=x[1]
  7.         step=1
  8.     else:
  9.         start='A'
  10.         end=x[0]
  11.         step=1
  12.     total='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
  13.     begin=total.index(start)
  14.     stop=total.index(end)
  15.     return total[begin:stop:step]
  16. print(strrange('z'))
  17. print(strrange('e'))
  18. print(strrange('Z', 'g'))
  19. print(strrange('A', 'Z', 3))
  20. print(strrange('m', 'M', -5))
  21. print(strrange('m', 'M'))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-9-2 21:53:13 | 显示全部楼层
def strrange(start,end=None,num=1):
    max_=122
    min_=65
    result=""
    numadd=-1
    start=ord(start)

    if not end:
        end,start=start,min_
    else:
        end=ord(end)
        
    i=max(start,end)
    if num>0:
        numadd=1
        i=min(start,end)
    z=i
    if not (start>=min_ and start<=max_) and (end>=min_ and end<=max_):
        return "不是字母"
    else:
        if (end>start and num>0) or (start>end and num<0):
            add=0
            while i<=max(start,end) and i>=min(start,end):
                if i<97 and i>90:
                    i+=numadd
                    continue
                if add%num==0:
                    if i==end:
                        return result
                    result+=chr(i)
                add+=numadd
                i+=numadd

            return result
        else:
            return ".."

print(strrange('z'))
print(strrange('e'))
print(strrange('Z', 'g'))
print(strrange('A', 'Z', 3))
print(strrange('m', 'M', -5))
print(strrange('m', 'M'))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-9-3 13:05:28 | 显示全部楼层
'''strrange('z')
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxy'
strrange('e')
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcd'
strrange('Z', 'g')
'Zabcdef'
strrange('A', 'Z', 3)
'ADGJMPSVY'
strrange('m', 'M', -5)
'mhcXSN'
strrange('m', 'M')
'''
def strrange(*args):
    lens = 0
    for i in args:
        lens += 1
    if lens == 1:
        str1 = args[0]
        if ord(str1)<65 or ord(str1)>122:
            print('error')
        else:
            end = ord(str1)
            for i in range(65, end):
                if i >90 and i <97:
                    i += 6
                    if i==end:
                        break
                    else:
                        print(chr(i))
                else:
                    print(chr(i))
    elif lens == 2:
        start, end = args[0], args[1]
        if ord(start)<65 or ord(end)>122:
            print('error')
        else:
            start = ord(start)
            end = ord(end)
            for i in range(start, end):
                if i >90 and i <97:
                    i += 6
                    if i==end:
                        break
                    else:
                        print(chr(i))
                else:
                    print(chr(i))
    elif lens == 3:
        start, end, step = args[0], args[1], args[2]
        if ord(start) < 65 or ord(end) > 122:
            print('error')
        else:
            start = ord(start)
            end = ord(end)
            for i in range(start, end, step):
                if i > 90 and i < 97:
                    i += 6
                    if i == end:
                        break
                    else:
                        print(chr(i))
                else:
                    print(chr(i))


评分

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

查看全部评分

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

使用道具 举报

发表于 2018-9-3 15:53:21 | 显示全部楼层
  1. # -*- coding: utf-8 -*-

  2. letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'

  3. def char2index(a):
  4.     return (ord(a) - ord('a')) + 26 if a >= 'a' else ord(a) - ord('A')

  5. def strrange(a, b=None, step=1):
  6.     if b==None:
  7.         start = 0
  8.         stop = char2index(a)
  9.     else:
  10.         start = char2index(a)
  11.         stop = char2index(b)

  12.     result = ''
  13.     if step < 0:
  14.         while(start > stop):
  15.             result+=letters[start]
  16.             start += step
  17.     elif step > 0:
  18.         while(start < stop):
  19.             result+=letters[start]
  20.             start += step
  21.     return result
  22. assert strrange('z')=='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxy'
  23. assert strrange('e')=='ABCDEFGHIJKLMNOPQRSTUVWXYZabcd'
  24. assert strrange('Z', 'g')=='Zabcdef'
  25. assert strrange('A', 'Z', 3)=='ADGJMPSVY'
  26. assert strrange('m', 'M', -5)=='mhcXSN'
  27. assert strrange('m', 'M')==''
  28. print('OK')
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-9-4 11:52:28 | 显示全部楼层
  1. def strrange(a,b=None,c=None):
  2.     letter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
  3.     gap = c if not c is None else 1
  4.     start = letter.index(a) if not b is None else 0
  5.     end = letter.index(b) if not b is None else letter.index(a)  
  6.     result = ''
  7.     while start < end:
  8.         result += letter[start]
  9.         start += gap
  10.     return result
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-6 09:02:09 | 显示全部楼层
  1. def word_ord_new_a(word_num):
  2.     if ord(word_num)<=90:
  3.         return ord(word_num)-65
  4.     if ord(word_num)>=97:
  5.         return ord(word_num)-71


  6. def word_ord_new_b(num):
  7.     if num <= 25:
  8.         return chr(num+65)
  9.     if num >= 26:
  10.         return chr(num+71)
  11.    
  12. def strrange(m, n = None, o = 1):
  13.     if n == None:
  14.         m,n = 'A',m
  15.     list_a = ''
  16.     a = word_ord_new_a(m)
  17.     b = word_ord_new_a(n)
  18.     for i in range(a,b,o):
  19.         list_a = list_a + word_ord_new_b(i)
  20.     return list_a
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-24 14:12:09 | 显示全部楼层
刚开始写的时候,不知道怎么处理第一个参数有默认值的情况,所以就用不定长参数写了。
  1. def Strrange(arg, *vartuple):
  2.         start='A'
  3.         step=1
  4.         if len(vartuple)>1:
  5.                 start=arg
  6.                 stop=vartuple[0]
  7.                 step=vartuple[1]
  8.         elif len(vartuple)>0:
  9.                 start=arg
  10.                 stop=vartuple[0]
  11.         else:
  12.                 stop=arg
  13.         result=''
  14.         alstr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
  15.         temp=start
  16.         i=0
  17.         k=alstr.index(start)
  18.         while temp<stop and step>0 or temp>stop and step<0:
  19.                 result+=temp
  20.                 i+=step
  21.                 temp=alstr[alstr.index(start)+i]
  22.         if result=='':
  23.                 return None
  24.         return result
复制代码

看了各位大佬的程序之后,又写了一个版本,精简了不少
  1. def Strrange(start,stop=None,step=1):
  2.         if stop==None:
  3.                 start,stop='A',start
  4.         alstr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
  5.         result=alstr[alstr.index(start):alstr.index(stop):step]
  6.         if result=='':
  7.                 return None
  8.         return result
复制代码

多写代码,进步快~~各位加油~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-5 16:30:28 | 显示全部楼层
def test204(start, end=None, step=1):
    strlist = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
    if not end:
        end = start
        start = 'A'
    a, b = strlist.index(start), strlist.index(end)
    print(''.join(strlist[a:b:step]))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-12 14:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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