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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值