py刷题(二)

# 3 - 7
n = int(input())
lst = list(map(int,input().split()))
max = lst[0]
index = 0
for i in range (1,len(lst)):
    if (max < lst[i]):
        max = lst[i]
        index = i
print('{} {}'.format(max,index))



#  3 - 9
"""
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,
然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。

silu :读取整行字符串,然后到“#”截止,取出十六进制部分,用flag标记是否为负数。
"""
"""
class int(x, base=10) 默认十进制
int() 函数用于将一个字符串或数字转换为整型。
"""
# 法一:
s = input()
fig = 'abcdefABCDEF'
sum = 0
lis1=''
for i in s:
    if (i in fig)or(i.isdigit())or(i=='-'):
        lis1=lis1+i
    if i=='#':
        break
    if (lis1[0]=='-'):
            lis1='-'+lis1.replace('-','')
    else:
        lis1=lis1.replace('-','')
print(int(lis1,16))



# s=input()
# st=""
# for i in s:
#     if(i=='#'):
#         break
#     st=st+i
# t=""
# flag=0
# f=0
# sum=0
# for i in st:
#     if(i=='-' and flag==0):
#         f=1
#     if(i>='0' and i<='9')or(i>='a' and i<='f')or(i>='A' and i<='F'):
#         t=t+i
#         flag=1
# if(f): # 是不是负数
#     for i in t:
#         if (i >= '0' and i <= '9'):
#             sum = sum * 16 + ord(i) - 48 # ord() 返回ASCII值
#         elif (i >= 'a' and i <= 'f'):
#             sum=sum * 16+ord(i)-97
#         elif (i>= 'A' and i <= 'F'):
#             sum=sum * 16+ord(i)-65
#     print(sum*-1)
# else:
#     for i in t:
#         if (i >= '0' and i <= '9'):
#             sum = sum * 16 + ord(i) - 48
#         elif (i >= 'a' and i <= 'f'):
#             sum=sum * 16+ord(i)-97
#         elif (i>= 'A' and i <= 'F'):
#             sum=sum * 16+ord(i)-65
#     print(sum)







# 3 - 10
cnt = 0
a = 'AEIOU'
lst = input()
for i in lst :
    if ( i>='A' and i<='Z' and i not in a  ):
        cnt += 1
print(cnt)






# 3 - 11

lst = list(map(str,input().split()))
lst.sort()
print("After sorted:")
for i in range(0,len(lst)):
    print(lst[i])

"""
改进:一行
print("After sorted:", *sorted(list(input().split())), sep="\n")

"""



# 3 -13
a = input()
b = []
for n in a :
   if "A" <= n <= "Z" :
      b.append(chr(155-ord(n)))
   else:
      b.append(n)
print("".join(b))




# 3 -14
s = input()
s=s.replace('#','')
t=""
for n in s:
    if(n.islower()):
        t=t+n.upper()
    elif(n.isupper()):
        t=t+n.lower()
    else:
        t=t+n
print(t)



# 3 -15
# 统计单词个数  这可比c简单多了...
cnt=0
for i in input().split():
    cnt=cnt+1
print(cnt)









# replace方法用来删除字符
#  3 - 17
s1 = input().strip()
s2 = input().strip()
s1 = s1.replace(s2.upper(), '').replace(s2.lower(), '')
print("result: {}".format(s1))




# 3 - 18
s=input()
new=""
count=0
for i in s:
    if(i.islower() or i.isupper()):
        if(i.upper() not in new) and (i.lower() not in new):
            new+=i
            count+=1
if count<10:
    print("not found")
else:
    print(new[ :10])

"""
法二:
a=input()
c=''
b=[]
for i in a:
    if i.isupper() or i.islower():
        c+=i
for i in c:
    if b.count(i.lower())==0 and b.count(i.upper())==0:
         b.append(i)
print(''.join(b[:10]) if len(b)>=10 else  'not found')
"""



# 3 - 19
# 最长字符串
n=int(input())
max=0
maxstr=""
for i in range(0,n):
    s=input()
    if(max<len(s)):
        max=len(s)
        maxstr=s
print('The longest is: {:s}'.format(maxstr))






# 3 - 20 逆序三位很简单  多位的话就除去前面的0即可(切片操作)
n=input()
a=int(n[0])
b=int(n[1])
c=int(n[2])
print(a+b*10+c*100)




# 3 - 21 回文数
s = input()
a = reversed(list(s))  # 返回一个迭代器
if list(a) == list(s):
    print(s)
    print("Yes")
else:
    print(s)
    print("No")







# 3 - 22
s = input()
t=""
flag=0
for i in s:
    if(i.isupper()):
        t=t+i
        flag=1
if(flag==0):
    print("Not Found")
else:
    lst=list(t)
    res=list(set(lst))
    res.sort(key=lst.index)
    # 因为set是一种会自动排序的数据结构,会打乱原来的顺序,需要用res.sort(key=lst.index)去恢复原来的顺序
    print("".join(res))









# 4 - 4
import math
def isPrime(n):
  if n <= 1:
    return False
  for i in range(2, int(math.sqrt(n)) + 1): # 根号范围足够判断 防止超时
    if n % i == 0:
        return False
  return True
x=int(input())
for y in range(2,x//2+1):
    z = x - y
    if (isPrime(y) == 1 and isPrime(z) == 1):
        print('{:d} = {:d} + {:d}'.format(x, y, z))
        break








# 4 - 6
# 求前n个斐波那契数
def fib(n):
  a, b = 0, 1
  for i in range(n + 1):
    a, b = b, a + b
  return a
n=int(input())
if(n>0):
    for i in range(0,n):
        print('{:11d}'.format(fib(i)),end="")
        if((i+1)%5==0):
            print("")
else:
    print("Invalid.")







# 4 - 7 注意考虑0
n=int(input())
if(n==0):
    print('average = 0.0')
    print('count = 0')
    exit(0)
lst = list(map(int,input().split()))
sum = sum(lst)
aver=sum/n
new_lst = [x for x in lst if x >= 60]
cnt = len(new_lst)
print('average = {:.1f}'.format(aver))
print('count = {:d}'.format(cnt))







# 4 - 10
def gcd(a,b):
    if a%b == 0:
        return b
    else :
        return gcd(b,a%b)
n , m = input().split()
n = int(n)
m = int(m)
print('{:d} {:d}'.format(gcd(n,m),n*m//gcd(n,m)))
# print('{:d} {:.0f}'.format(gcd(n,m),n*m/gcd(n,m)))
""" 注意除法是带小数的,可以做上述两种处理  """








# 输出小于n的最大斐波那契数
n = int(input())
a,b = 1,1
while b<=n:
    a,b = b,a + b
print(b)








# 4 - 13
error = float(input())
sum1  = 1
sum2 = 2
n = 1
term  = 1
while (sum2 - sum1) >= error:
    term *= 1/n
    sum1 += term
    sum2 += term * 1/(n+1)
    n = n + 1

print('{:.6f}'.format(sum2))













# 4 - 14
""" 循环输入的方式解决了input遇到回车的问题   """
s=[]
count=0;letters=0;space=0;digit=0;others=0
while True:
    b=list(input())
    count=count+1
    s.extend(b)
    if len(s)+count>10:
        count=count-1
        break
for c in s:
    if c.isalpha():
        letters+=1
    elif c.isspace():
        space+=1
    elif c.isdigit():
        digit+=1
    else:
        others+=1
print("letter = {}, blank = {}, digit = {}, other = {}".format(letters,space+count,digit,others))




# 4 - 15 换硬币
n=int(input())
cnt=0
for fen5 in range(n//5,0,-1):
    for fen2 in range(n//2,0,-1):
        for fen1 in range(n,0,-1):
            if (fen5 * 5+fen2 * 2+fen1 == n):
                print('fen5:{:d}, fen2:{:d}, fen1:{:d}, total:{:d}'.format(fen5, fen2, fen1, fen1+fen2+fen5))
                cnt=cnt+1
print('count = {:d}'.format(cnt))




# 4 - 17 水仙花数

import math
n=int(input())
for i in range(int(math.pow(10,n-1)),int(math.pow(10,n))):
    sum=0
    j=i
    while(j>=1):
        sum=sum+math.pow(j%10,n)
        j=j//10
    if(sum==i):
        print('{:d}'.format(i))




# 4 - 18 猴子选大王 约瑟夫环问题
n=int(input())
if n == 1:
    print(1)
else:
    monkey=[i for i in range(1,n+1)]
    while len(monkey) >= 3:
        monkey.pop(2)
        monkey.append(monkey.pop(0))
        monkey.append(monkey.pop(0))
    print(monkey[1]) # 最后剩下的两者中后报数的

"""
法二:
def yuesefu(nums, step, stay):
    #参数 nums:人数,step: 数到几的步数,stay: 最后留下多少人
    lists = list(range(1, nums+1))
    check = 0
    while len(lists) > stay:
        for i in lists[:]:
            check += 1
            if check == step:
                check = 0
                lists.remove(i)
                print("{}号下船了".format(i))
    return lists
stays = yuesefu(11, 3, 1)
print("最后留下的人:", stays)

"""


# 4 - 19 矩阵运算
"""
给定一个n×n的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线
输入第一行给出正整数n(1<n≤10);随后n行,每行给出n个整数,其间以空格分隔。

思路:
副对角线为j+k=n-1。二维呈现是一维,因为python没有数组,只有列表 所以索引应该是
这种结构:list = [ [],[],[],]

"""
n=int(input())
a=[]
sum=0
for i in range(n):
    s=input()
    a.append([int(n) for n in s.split()])
for j in range(n):  # 循环遍历
    for k in range(n):
        if j!=n-1 and k!=n-1 and j+k!=n-1:
            sum+=a[j][k]
print(sum)

"""
法二:
n=int(input())
s=0
for i in range(1,n+1):
    m=list(map(int,input().split())) # m 每次用完就废了
    if i==1:
        m.pop(-i)
        s=s+sum(m)
    elif i==n:
        s=s  # break    
    else:
        m.pop(-i)
        m.pop(-1)
        s=s+sum(m)
print(s)

"""




# 4 - 20
m,n=map(int,input().split())
a=[]
for i in range(m):
    s=input()
    a.append([int(n) for n in s.split()])
    # 每次加一个列表 记住需要【】或者list() 否则列表生成式返回的是generator object
for j in range(m):
    sum=0
    for k in range(n):
        sum+=a[j][k]
    print(sum)





# 4 - 21  判断上三角矩阵
T = int(input())
for i in range(T):
    a = []
    flag = 0
    n = int(input())
    for j in range(n):
        s = input()
        a.append([int(n) for n in s.split()])
        #上式另一种写法可以是
        # s=list(map(int,input().split()))
        # a.append(s)
    for j in range(n):
        for k in range(n):
            if j > k:
                if a[j][k] != 0:
                    flag = 1
    if flag == 0:
        print('YES')
    else:
        print('NO')











# 4 - 22 找鞍点
n =  int(input())
a = []
f = 0
def choice(a,i,j,n):
    flag = 0
    s = sorted(a[i])
    m = [a[k][j] for k in range(n) ]
    m = sorted(m)
    if(a[i][j] == s[n-1] and a[i][j] == m[0]):
        flag = 1
    return flag

for i in range(n):
    s = [int(j) for j in input().split()]
    a.append(s)
for i in range (n):
    for j in range(n):
        if(choice(a,i,j,n) == 1):
            print('{} {}'.format(i,j))
            f = 1
            break
    if (f == 1):
        break
if (f == 0):
    print('NONE')

""" 法二:
n = int(input())
a = []
count = 0
count1 = 0
for i in range(n):
    s = input()
    a.append([int(n) for n in s.split()])
for j in range(n):
    if count1 == n and count == n:
        break
    for k in range(n):
        for k1 in range(n):
            if a[j][k] >= a[j][k1]:
                count += 1
        if count == n:  # 如果是行最大再判断列
            for j1 in range(n):
                if a[j][k] <= a[j1][k]:
                    count1 += 1
            if count1 == n: # 如果是列最小就输出
                print("{} {}".format(j, k))
                break
        count1 = 0
        count = 0
if count1 != n and count != n:
    print("NONE")

"""









# 4 - 23
#  矩阵局部最大值
n, m= input().split()
n, m = int(n), int(m)
a = []
sum = 0
count=0
r=0
# sum = 0;count=0;r=0  可以用分号去分割
for i in range(n):
    s = input()
    a.append([int(n) for n in s.split()])
for i in range(1,n-1):
	for j in range(1,m-1):
		if(a[i][j]>a[i-1][j] and a[i][j]>a[i][j-1] and a[i][j]>a[i+1][j] and a[i][j]>a[i][j+1]):
				r=1
				print('{:d} {:d} {:d}'.format(a[i][j],i+1,j+1))
if(r==0):
	print('None {:d} {:d}'.format(i+2,j+2))








# 4 - 24  九九乘法
n=int(input())
for i in range(1,n+1):
    for j in range(1,i+1):
        print('{:d}*{:d}={:<4d}'.format(j,i,i*j),end="")
    print("")

"""
一句话:
print('\n'.join([' '.join('%sx%s=%-2s'%(x,y,x*y) for x in xrange(1,y+1)) for y in xrange(1,10)]))
"""






# 4 - 25
n = int(input())
cnt = 65
for i in range (n):
    for k in range(n):
        print('{:c} '.format(cnt),end="")
        cnt += 1
    n = n-1
    print("")






# 4 - 26     Q: 1!+3!+5!...n!
n = int(input())
s = 0
for i in range(1,n+1,2):
    k = 1
    for j in range(1,i+1):
        k *= j
    s += k
print('n={},s={}'.format(n,s))








# 4 - 28
s=list(map(int,input().split()))
for i in range(0,3):
    print("{:>4} {:>4} {:>4}".format(s[i],s[i+3],s[i+6]))











# 4 - 29 找出不是两个数组共有的元素 (20 分)
# 关键问题其实在于如何从输入中读取数据
c=[]
k = 0
flag = 1
a = list(map(int, input().split()))
b = list(map(int, input().split()))
m = a[0]
n = b[0]
a = a[1:]
b = b[1:]
for i in range(0, m):
    for j in range(0,n):
        if (int(a[i]) == int(b[j])):
            flag=0
            break
    if (flag==1):
        c.append(a[i])
        k=k+1
    flag=1

for i in range(0,n):
    for j in range(0,m):
        if (int(b[i]) == int(a[j])):
            flag=0
            break
    if (flag==1):
        c.append(b[i])
        k=k+1
    flag=1
res = list(set(c))
res.sort(key = c.index)
print(res[0],end="")
for i in range(1,len(res)):
    print(' {:d}'.format(res[i]),end="")

""" 利用python特性
s=list(map(int,input().split()))
t=list(map(int,input().split()))
lens=s.pop(0) # len 没用上
lent=t.pop(0)
l=[]
for i in s:
    if i not in t and i not in l:
        l.append(i)
for i in t:
    if i not in s and i not in l:
        l.append(i)
print(*l,sep=' ')

# 也可以用
temp = [str(i) for i in temp]
temp = ' '.join(temp)
print(temp)
"""














# 4 - 30 找完数
"""
这个是自己的方法,但是运行超时,注意是因为分解因数到根号i即可

"""
m,n = input().split()
m,n = eval(m),eval(n)
a =  []
for i in range(m,n+1):
    for j in range(2,i):
        if(i % j == 0):
            a.append(j)
    if (i == sum(a)+1):
        print('{} = 1 '.format(i),end="")
        for k in a:
            print('+ {} '.format(k),end="")
        print("")
    a=[]


"""
不超时的:
import math
l = [1]
flag = 0
m,n=input().split()
m=int(m)
n=int(n)
for i in range (m,n+1):
    # l.append(1)
    for a in range (2,int(math.sqrt(i)+1)):
        if i%a ==0:
            l.append(a)
            if a*a!=i:
                l.append(i//a)
    if sum(l)==i:
        print ('{:d} = '.format(i),end="")
        l.sort()
        print(" + ".join(['%s' %id for id in l]))
        # %d也行 不加【】也行 但是不能直接写l 即不能直接是数字列表
        flag=1
    l = [1]
if(flag == 0):
    print("None")"""







# 5 - 1 字典代替if else判断
days = {1:"Mon",2:"Tue",3:"Wed",4:"Thu",5:"Fri",6:"Sat",7:"Sun"}
num = int(input())
print(days[num])







# 5 - 3  实现四则运算
dict = {"+":"x+y","-":"x-y","*":"x*y","/":"x/y"}
x = float(input())
op = input()
y = float(input())
try:
    print("{:.2f}".format(eval(dict[op])))
except: # 0用异常处理
    print("divided by zero")

"""
字典+eval()的妙用!
res={"+":"x+y","-":"x-y","*":"x*y","/":"x/y if y!=0  else 'divided by zero'"}
# 除法部分为三元表达式
x = int(input())
operation = input()
y = int(input())
# print(res[operation]) 除零返回字符串,其余返回数字类型
r = eval(res[operation])
if type(r)!=str:
    print(format(r,'.2f')) # format使用 
else:
    print(r)
    
"""







# 5 - 4
l=list(map(int,input().split(',')))
s=[i for i in range(6,11) if i not in l]
print(*s,sep=' ')

"""
这种写法还是想强调join是对于字符串列表的
str1 = set(input().split(","))
ls = []
for i in range(6,11):
    if str(i) not in str1:
        ls.append(str(i)) # str不可少  
ll = ' '.join(ls)
print(ll)

"""

# 5 - 5:
s=list(input())
dic={}
for i in s:
    dic[i]=dic.get(i,0)+1
try:
    m=input()
    print(dic[m])
except:
    print(0)

"""
查数的都可以尝试用count
str1 = input()
char1 = input()
print(str1.count(char1))
"""






# 5  - 6
dic  = {}
n = int(input())
lst = list(map(int,input().split()))
for i in lst :
    dic[i] = dic.get(i,0) + 1   # 善用字典的get方法!
for j in sorted(dic):   # 排序
    print("{}:{}".format(j, dic[j]))

"""  法二:未使用get方法就显得比较繁琐
n=int(input())
lst = list(map(int,input().split()))
d = {}
for x in range(0,n):
    if not lst[x] in d:
        d[lst[x]] = 1
    else:
        d[lst[x]] = d[lst[x]] + 1
for k in sorted(d.keys()):
    print(k,end=':')
    print(d[k])

"""








发布了13 篇原创文章 · 获赞 2 · 访问量 231

猜你喜欢

转载自blog.csdn.net/qq_25871537/article/details/105188649