• Python经典练习题,闯关练习题


    Python练习题

    最近找到了一个python闯关游戏,写了第一关的几道题目

    Home - python coding challenges - Py.CheckiO

    得到一个正整数。试着找出它有多少位数?

    def num(int_num):
        return (len(str(int_num)))
    
    
    print(num(1))
    

    逆序输出字符串或者字符串

    def reversed(string):
        str1 = str(string)
        return str1[::-1]
    
    
    print(reversed(123))
    print(reversed("123"))
    print(reversed('i am yor dad'))
    
    

    321
    321
    dad roy ma i

    找到一个正整数的数字末尾有几个0

    def end_zeros(number):
        n = str(number)
        return len(n) - len(n.strip('0'))
    print(end_zeros(1000))
    print(end_zeros(1001))
    print(end_zeros(10001200))
    

    3
    0
    3

    输出一个列表中的众数

    from scipy import stats
    
    
    def mode(x):
        Mode = stats.mode(x, keepdims=False)
        return Mode[0], Mode[1]  # 分别是众数和出现的频率
    
    
    speed = [99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86]
    print(mode(speed))
    
    

    (86, 3)

    找出一个元组的第一个,第二个和倒数第二个数字

    def easy_unpack(elements):
        return (elements[0], elements[2], elements[-2])
    
    
    a = (1, 2, 34, 54, 6, 5, 2, 32)
    print(easy_unpack(a))
    
    

    (1, 34, 2)

    判断字符串是否全部大小写,或者是数字

    要求如下:

    assert is_all_upper("ALL UPPER") == True
    assert is_all_upper("all lower") == False
    assert is_all_upper("mixed UPPER and lower") == False
    assert is_all_upper("") == True
    assert is_all_upper("444") == True
    assert is_all_upper("55 55 5 ") == True
    
    def is_all_upper(x) :
        x=x.replace(" ",'')
        if  x.isupper()==True or x.isdigit()==True or x=="":
            return True
        else:
            return False
    

    在一个给定的列表中,第一个元素应该成为最后一个元素。空列表或只有一个元素的列表应该保持不变。

    def replace_first(x) :
         if len(x)>0:
           a=x[0]
           x.remove(x[0])
           x.append(a)
           return x
        else:
            return x
       
    

    找出字符串开头数字0的个数

    示例:

    assert beginning_zeros('100') == 0
    assert beginning_zeros('001') == 2
    assert beginning_zeros('100100') == 0
    assert beginning_zeros('001001') == 2
    

    解:

    def beginning_zeros(x) :
        y=str(x)
        if int(x)==0:
            return len(y)
        else:
            return len(y)-len(str(int(x)))
    

    将字符串拆分为两个字符对。如果字符串包含奇数个字符,那么最后一对中缺失的第二个字符应该用下划线(‘_’)替换。

    示例代码:

    assert list(split_pairs("abcd")) == ["ab", "cd"]
    assert list(split_pairs("abc")) == ["ab", "c_"]
    assert list(split_pairs("abcdf")) == ["ab", "cd", "f_"]
    assert list(split_pairs("a")) == ["a_"]
    

    解:

    def split_pairs(a):
        b=[]
        p=0
        if len(a)%2==0:
                for  i in range(len(a)//2):
                    b.append(a[p:p+2])
                    p=p+2
                return  b
        else:
            c=a[-1]+"_"
            for  i in range(len(a)//2):
                    b.append(a[p:p+2])
                    p=p+2
            b.append(c)
            return(b)
    

    对于函数的输入,你会得到一句话。你必须返回一个修正后的版本,以大写字母开始,以句号(点)结束。请注意,并非所有的修复都是必要的。如果一个句子已经以句号(点)结束,那么再加一个句点将是错误的。

    示例:

    assert correct_sentence("greetings, friends") == "Greetings, friends."
    assert correct_sentence("Greetings, friends") == "Greetings, friends."
    assert correct_sentence("Greetings, friends.") == "Greetings, friends."
    assert correct_sentence("greetings, friends.") == "Greetings, friends."
    

    找到列表中与给定数字最接近的数字

    这个代码我写的有点麻烦

    在这里插入图片描述

    def nearest_value(set, int):
        try:
            a=[]
            for i in set:
                a.append(int-i)
            positive=min([i for i in a if i>0])
            negative=max([i for i in a if i<=0])
            if positive>abs(negative):
                return int+abs(negative)
            else:
                return int-positive
        except ValueError  :
            list=[int-i for i in set]
            if min(list)<0:
                return int-max(list)
            else:
                return int-min(list)
    
    

    并不是所有的元素都很重要。这里需要做的是从列表中删除给定元素之前的所有元素。

    示例:

    assert remove_all_before([1, 2, 3, 4, 5], 3) == [3, 4, 5]
    assert remove_all_before([1, 1, 2, 2, 3, 3], 2) == [2, 2, 3, 3]
    assert remove_all_before([1, 1, 2, 4, 2, 3, 4], 2) == [2, 4, 2, 3, 4]
    assert remove_all_before([1, 1, 5, 6, 7], 2) == [1, 1, 5, 6, 7]
    

    给您一个字符串和两个标记(初始的和最终的)。您必须找到包含在这两个标记之间的子字符串。但有几个重要的条件如下。

    • The initial and final markers are always different.
    • The initial and final markers are always 1 char size.
    • The initial and final markers always exist in a string and go one after another.

    Example:

    assert between_markers('What is >apple<', '>', '<') == 'apple'
    assert between_markers('What is [apple]', '[', ']') == 'apple'
    assert between_markers('What is ><', '>', '<') == ''
    assert between_markers('[an apple]', '[', ']') == 'an apple'
    
    

    代码如下:正则表达式非常简单,注意这里用\防止转义

    import re
    def between_markers(text,start,end):
            print(start,end,text)
            a=re.findall(f"\{start}(.*?)\{end}",text)
            return  a[0]
    '
    运行
  • 相关阅读:
    webassembly学习-动态链接
    Docker实践经验:Docker 上部署 mysql8 主从复制
    自然语言处理应用(二):自然语言推断
    golang关于channel
    LeetCode116. Populating Next Right Pointers in Each Node
    Java设计模式
    使用 webpack 打包 express 应用
    直接插入排序
    vue 改变路由(URL)参数不刷新页面
    Android HAL 层
  • 原文地址:https://blog.csdn.net/qq_54423921/article/details/127110318