Python练习题
最近找到了一个python闯关游戏,写了第一关的几道题目
得到一个正整数。试着找出它有多少位数?
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]