python第一篇

# This is a sample Python script.

# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
# !/usr/bin/python

#list = ['abcd', 786, 3.1415, 'bunoob', 1.234]
#tinylist = [129, 'runoob']
#list[0] = 666
#print(list[-1::-1])
import math
import random

import capitalize as capitalize

name = 'runoob'
print(f'Hello {name}')
'''
w = {'name':'fuck', 'url':'www.baidu.com'}
x = 1
print(f'{x+1=}') #有等于号的时候,花括号中的表达式也会当作字符串输出来
'''
'''
str = 'this is a pen'
print(str.capitalize()) #首字母大写
'''
'''
str="www.runoouoooooooob.coum"
sub='o'
print ("str.count('o') : ", str.count(sub))

sub='u'
print ("str.count('run', 0, 10) : ", str.count(sub,0,10))
'''

'''
tup1 = (12, 34.56) #元组不允许修改,也不允许删除其中的某个元素,只能全部删除或者拼接
tup2 = ('abc', 'xyz')

# 以下修改元组元素操作是非法的。
# tup1[0] = 100

# 创建一个新的元组
tup3 = tup1 + tup2
print (tup3)

del tup3
'''
'''
tup = ('Google', 'Runoob', 'Taobao', 'Wiki', 'Weibo','Weixin')
tup = 1,2,3 #可以重新赋值
print(tup)
'''

'''
def printinfo(arg1, **vardict): #两个星号就是表示字典,传入的参数必须要有关键字
print(arg1)
print(vardict)
printinfo(1,a=2,b=3,c=4,d=5)
'''
'''
def f(a,b,*,d): #单独星号的参数传入可以没有,但是后面的参数必须要关键字传入
return a+b+d
h = f(1,2,d=3)
print(h)
'''
'''
from collections import deque #队列的方法 deque是一个方法
que = deque([1,2,3,4])
que.append(5)
print(que)
que.popleft()
print(que)
'''
'''
matrix = [[1,2,3,4],
[5,6,7,8],
[9,10,11,12]
]
print(matrix)
matrix1 =[[row[i] for row in matrix] for i in range(4)] #矩阵转置
print(matrix1)
'''
'''
tel = {'jack':4098, 'sape':1111} #遍历
tel['joe'] = 22
print(tel)

for k, v in tel.items():
print(k,v)
'''

'''
class Myclass:
age = 0
name = ''
__weight = 0
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w #私有属性
def speak(self):
print("%s 说:我%d岁" %(self.name, self.age))
def normal_func(self):
print("weight:%d" % self.__weight)

x = Myclass('root',10,30)
# print(x.__weight) #无法访问
# print(x._Myclass__weight) #可以访问
# print(x.normal_func()) #可以访问

'''
'''
a = 10
def test():
global a #通过global或者参数传递都可以,注意nonlocal是嵌套函数中,覆盖外面的做法
a = a + 1
print(a)
test()
'''
###############################[ Python实例练习 ]#############################
# 1.数字求和
# num1 = input('Input a:')
# num2 = input('Input b:')
# sum = float(num1) + float(num2)
# print('a{0}和b{1}相加等于:{2}'.format(num1,num2,sum))
##等同于print('两数之和为 %.1f' %(float(input('输入第一个数字:'))+float(input('输入第二个数字:'))))

# 2. python平方根
# num = float(input('please input a number:'))
# ans = num ** 0.5
# print(ans) #只适合正数
#---------
# import cmath
# num = int(input('input a number:')) #适合负数以及复数
# ans = cmath.sqrt(num)
#
# print('{0} 的平方根为 {1:0.3f}+{2:0.3f}j'.format(num ,ans.real,ans.imag))

# 3. 二次方程
# 二次方程式 ax**2 + bx + c = 0
# a、b、c 用户提供,为实数,a ≠ 0

# 导入 cmath(复杂数学运算) 模块
# import cmath
# a = float(input("Inut a:"))
# b = float(input("Input b:"))
# c = float(input("Input c:"))
# d = (b**2) - (4*a*c)
# sol1 = (-b-cmath.sqrt(d))/(2*a)
# sol2 = (-b+cmath.sqrt(d))/(2*a)
# print('ans is:{0} ans {1}'.format(sol1,sol2))

# # 4. 计算三角形面积
# a = float(input('Input a:'))
# b = float(input('Input b:'))
# c = float(input('Input c:'))
# s = (a+b+c)/2
# area = (s*(s-a)*(s-b)*(s-c))**0.5
# print('area = %0.2f' %area) #注意输出格式

# 5. 计算圆面积
# def findArea(r):
# PI = 3.1415
# return PI*r*r
# print('circle area: %.6f' %findArea(5)) #函数传参的格式

# 6. 随机数生成
# random.randint(1,10) #产生一个 1 到 10 的随机整数
# random.random() #产生一个 0 到 1 的随机浮点数
# random.uniform(1.1, 5.4) #产生一个 1.1 到 5.4 之间的随机浮点数
# random.randrange(1,100,2) #生成从 1 到 100 间隔为 2 的随机整数

# 7. 温度转换
# a = input("Input a temperature with signal:")
# if a[-1] in ['F','f']:
# C = (eval(a[0:-1]) - 32)/1.8
# print("转换后的温度是{:.1f}C".format(C))
# elif a[-1] in ['c', 'C']:
# F = 1.8 * eval(a[0:-1]) + 32
# print("转换后的温度是{:.1f}F".format(F))
# else:
# print('Input err!')

# 8. 交换变量
# x = input('输入 x 值: ')
# y = input('输入 y 值: ')

# 不使用临时变量
#x, y = y, x

# x = x ^ y
# y = x ^ y
# x = x ^ y

# x = x + y
# y = x - y
# x = x - y
#
# print('交换后 x 的值为: {0}'.format(x))
# print('交换后 y 的值为: {0}'.format(y))

# 9. if语句
# while True: #优化增加输入字符的判断以及异常输出
# try:
# num = float(input('Input a number:'))
# if num == 0:
# print('is 0')
# elif num > 0:
# print('is > 0')
# else:
# print('is < 0')
# break
# except ValueError:
# print('Input err!')

# 10. 判断字符串是否为数字
# def is_number(s):
# try: # 测试字符串和数字
# float(s)
# return True
# except ValueError:
# pass
# try: # 测试 Unicode
# import unicodedata
# unicodedata.numeric(s)
# return True
# except(TypeError,ValueError):
# pass
# return False

# 11. 判断奇偶数
#num = int(input('Input a number:'))
# if(num % 2) == 0: #取余操作很慢
# print('ou')
# else:
# print('ji')

# if (num & 1) == 0:
# print("{0}是偶数".format(num))
# else:
# print("{0} 是奇数".format(num))

# 12. 判断闰年
# year = int(input('Input a year number:'))
# if(year % 4 ) == 0:
# if(year % 100) == 0:
# if(year % 400) == 0:
# print('{0}是闰年'.format(year))
# else:
# print('{0}不是闰年'.format(year))
# else:
# print("{0} 是闰年".format(year)) # 非整百年能被4整除的为闰年
# else:
# print("{0} 不是闰年".format(year))
#--------
# if(year % 4) == 0 and (year % 100) !=0 or (year % 400) == 0:
# print("{0} 是闰年".format(year))
# else:
# print("{0} 不是闰年".format(year))
#-------
# import calendar
# print(calendar.isleap(year))

# 13. 获取最大值
#print(max(1,2,3,4,5,6,7,8,9))
# a=[]
# while True:
# # 输入q来结束输入数字
# c = input('Input number:')
# if c != 'q':
# try:
# i = int(c)
# a.append(i)
# except ValueError:
# print('not a number')
# else:
# break
# print('max number is:',max(a))

# 14.质数判断
# def IsPrime(num):
# if num > 1:
# for i in range(2, num//2+1): # == for i in range(2, int(sqrt(n) + 1)):
# if(num % i) == 0:
# print("not a Prime")
# break
# else:
# print("is prime")
# else:
# print('not a prime')
# print(IsPrime(34))
#------
# def isPrime(n):
# if n < 2: return False
# for i in range(2, int(math.sqrt(n)) + 1):
# if n % i == 0: return False
# return True
# print(isPrime(37))
#------
# 1-100之间的质数
# i = 2
# while i <= 100:
# j = 2
# flag = True
# while j < i:
# if i % j == 0:
# flag = False
# break
# j += 1
# if flag:
# print(i)
# i += 1
#-----这种方法最好
# num=[];
# i=2
# for i in range(2,100):
# j=2
# for j in range(2,i):
# if(i%j==0):
# break
# else:
# num.append(i)
# print(num)

# 15. 阶乘
# num = int(input('Input a number:'))
# fac = 1
#
# if num < 0:
# print('no output')
# elif num == 0:
# print('is 1')
# else:
# for i in range(1, num+1):
# fac = fac * i
# print("%d 的阶乘为 %d" %(num,fac))
# ----------------------------
# import math
# num = int(input("请输入一个数字:")) #自带阶乘库
# if num < 0:
# print("负数是没有阶乘的!")
# else:
# print("{0} 的阶乘为 {1}".format(num, math.factorial(num)))
# ----------------------------
# from functools import reduce
# sum = reduce(lambda x,y:x*y,range(1,5))
# print(sum)
# --------------------reduce函数的使用
# from functools import reduce
# def fuck(x,y):
# return x+y
# sum1 = reduce(fuck, (1, 2, 3))
# sum2 = reduce(lambda x, y: x+y, (1,2,3))
#
# print(sum1,sum2)

# 16. 九九乘法表
# for i in range(1, 10):
# for j in range(1, i+1):
# print('{}x{}={}\t'.format(j,i,i*j), end='')
# print()
# ---------------
# for 行 in range(1,10): #竟支持中文变量
# for 列 in range(1,行+1):
# print("{}*{}={}\t".format(列,行,列*行),end="")
# print()
# ---------------
#rint('\n'.join(' '.join("%dx%d=%-2d" % (x, y, x*y) for x in range(1, y+1)) for y in range(1, 10)))

# 17. 斐波那契
# def fib(n):
# a,b = 0,1
# while a < n:
# print(a, end=' ')
# a, b = b, a+b #经典
# print()
# fib(1000)

# 18. 阿姆斯特朗数
#例如1^3 + 5^3 + 3^3 = 153
# num = int(input('input a number:'))
# sum = 0
# n = len(str(num))
# tmp = num
# while tmp > 0:
# digit = tmp % 10
# sum += digit ** n
# tmp //= 10
# if num == sum:
# print('Yes')
# else:
# print('No')
# ------#获取指定期间内的阿姆斯特朗数
# lower = int(input('input lower number:'))
# upper = int(input('input upper number:'))
# sum = 0
# for num in range(lower,upper):
# lens = len(str(num))
# for n in str(num):
# sum += int(n)**lens
# if num == sum:
# print(num)
# sum = 0

# 19. 进制转换
# 获取用户输入十进制数
# dec = int(input("输入数字:"))
#
# print("十进制数为:", dec)
# print("转换为二进制为:", bin(dec))
# print("转换为八进制为:", oct(dec))
# print("转换为十六进制为:", hex(dec))

# 20. ASCII码与字符相互转换
# c = input('Input a char:')
# a = int(input('Input a ASCII:'))
# print(c + '的ASCII:', ord(c))
# print(a, '的字符为: ', chr(a))

# 21. 最大公约数
# import math
# a = 54
# b = 24
# print(math.gcd(a,b))
# print(math.lcm(a, b)) #最小公倍数

# 22. 简单计算器
# def divide(x,y):
# #相除
# if y ==0:
# print('0不能做为分母')
# return
# else:
# return x/y
#
# choice =int(input("请选择运算:\n1,相加\n2,相减\n3,相乘\n4,相除\n请输入运算(1/2/3/4):"))
# num1 = float(input("请输入第一个数:"))
# num2 = float(input("请输入第二个数:"))
# if choice ==1:
# print("{}+{}={}".format(num1,num2,num1+num2))
# elif choice ==2:
# print("{}-{}={}".format(num1,num2,num1-num2))
# elif choice ==3:
# print("{}x{}={}".format(num1,num2,num1*num2))
# elif choice ==4:
# print("{}/{}={}".format(num1,num2,divide(num1,num2)))
# else:
# print("选择的运算为非法输入")

# 22. 简单计算器
# import calendar
# yy = int(input('Input year:'))
# mm = int(input('Input month'))
# print(calendar.month(yy, mm))

# 22. 递归斐波那契
# def recur_fibo(n):
# """递归函数
# 输出斐波那契数列"""
# if n <= 1:
# return n
# else:
# return (recur_fibo(n - 1) + recur_fibo(n - 2))
#
# # 获取用户输入
# nterms = int(input("您要输出几项? "))
#
# # 检查输入的数字是否正确
# if nterms <= 0:
# print("输入正数")
# else:
# print("斐波那契数列:")
# for i in range(nterms):
# print(recur_fibo(i))

# 23. 文件IO
# #write
# with open('test.txt','wt') as outfile:
# outfile.write('this is a test file')
#
# #read
# with open('test.txt','rt') as in_file:
# text = in_file.read()
# print(text)

# 24. 字符串判断
# str = 'runoob.com'
# print(str.isalnum())
# print(str.isalpha())
# print(str.isdigit())
# print(str.islower())
# print(str.isupper())
# print(str.isspace())

# 25. 字符串大小写转换
# str = 'www.runOob.com'
# print(str.upper())
# print(str.lower())
# print(str.capitalize()) #首字母大写,其他小写
# print(str.title()) #每个单词的首字母转换为大写,其他小写

# 26. 计算每个月天数
# import calendar
# monthRange = calendar.monthrange(2021,2)
# #monthRange = calendar.monthrange(2016,2)[1] 注意这种写法
# print(monthRange)

# 27. 获取昨天日期
# import datetime
# def getYesterday():
# today = datetime.date.today()
# oneday = datetime.timedelta(days=1)
# yesterday = today - oneday
# return yesterday
# print(getYesterday())

# 28. list常用操作
# li = ['a','b','mpmpmp','z','example']
# # print( li[-1]) #单独的时候,-1表示最后一位数
# # print( li[1:-1]) #分片的时候,-1表示倒数第二个数
# # print( li[1:]) #到结尾
# li[0], li[-1] = li[-1], li[0]
# print(li[0],li[-1])

#------------list 过滤
# li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]
# ans = [elem for elem in li if len(elem) > 1]
# print(ans)

# 29. 约瑟夫环问题
'''
30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?'''
# def yuesefu():
# persons = [x for x in range(1, 31)]
# drop = 0
# while(drop < 15):
# print('下船的号数为:', persons[8])
# persons = persons[9:] + persons[0:8]
# drop += 1
# print('剩下的号码:{}'.format(persons))
# yuesefu()
# -----
# persons = list(range(1, 31))
# while len(persons) > 15:
# print('下船的号数为:{}'.format(persons.pop(8)))
# for i in range(8):
# persons.append(persons.pop(0))

# 30. 五人分鱼
# def main():
# fish = 1
# while True:
# total, enough = fish, True
# for _ in range(5):
# if (total - 1) % 5 == 0:
# total = (total - 1) // 5 * 4
# else:
# enough = False
# break
# if enough:
# print(f'总共有{fish}条鱼') #注意这种格式
# break
# fish += 1
#
# if __name__ == '__main__':
# main()

# 31. 计算n个自然数的立方和 计算公式 1^3 + 2^3 + 3^3 + 4^3 + …….+ n^3
# def calc(num):
# sum = 0
# while num > 0:
# sum += num*num*num
# num -= 1
# print(sum)
# calc(7)

# 32. 计算数组元素之和
# list = [1, 2, 3, 4, 5]
# sum = 0
# for ele in range(len(list)):
# sum += ele
# print(sum)

# 33. 数组翻转指定个数的元素
# def Funz(arr, d):
# n = len(arr)
# arr = arr[d:] + arr[:d] #列表截取非常简单
# return arr
# arr = [1,2,3,4,5,6,7]
# print(arr)
# print(Funz(arr,2))
# -------
# def Funz(arr, d):
# for i in range(d):
# arr.append(arr.pop(0)) #进来的元素是首部出来的元素
# return arr
#
# list = [1,2,3,4,5,6,7]
# print(Funz(list,3))

# 34. 列表翻转
# def Reverse(list):
# #list.reverse() 方法1:直接使用reverse函数
# #list = list[::-1] 方法2:切片的方法
# return list
# list = [1,2,3,4,5]
# print(Reverse(list))
# ----- 字符串反转有点点区别,方法2是一样的
# str = 'Helloworld'
# print(''.join(reversed(str)))

#补充切片的知识:
# 1. list[-1],此时只有一个参数,作用是通过下标访问数据,-1是倒数第一个
# 2. list[:-1],作用是返回从index = 0到index = -1的一串数据,这里的list[:-1]为左闭右开。
# 3. list[::-1],作用是返回倒序的原list,
# list[::-1]表示从右往左以步长为1进行切片
# list[::2]表示从左往右步长为2进行切片
# 4. list[1:0:-1],返回第0,1的倒序
# 5. list[:] 无参数,表示完整的整个列表内容


# 35. 判断元素是否在列表中
# Mylist = [1,2,3,4,5,6,7,8,9]
# for i in Mylist:
# if i == 4:
# print('True')
# else:
# print('False')
# list.clear() 清空列表

# 36. 复制列表
# aList = [123, 'xyz', 'zara', 'abc', 123]
# bList = [2009, 'manni']
# aList.extend(aList)
# print(aList)
# print(aList[:])
# print(aList + aList)
# print(aList + aList.copy())

# 37. 元素在列表中出现的次数
# def counts(list, x):
# count = 0
# for i in list:
# if(x == i):
# count += 1
# return count
# list = [1,2,4,4,6,6,6]
# x = 6
# print(counts(list,x))

# 38. 元素在列表中出现的次数
# total = 0
# list1 = [11, 5, 17, 18, 23]
# for ele in list1:
# total = total + ele
# 等价于
# for ele in range(0, len(list1)):
# total = total + list1[ele]
# print("列表元素之和为: ", total)

# ------使用reduce函数
# from functools import reduce
# list1 = [11, 5, 17, 18, 23]
# sum = reduce(lambda x,y:x+y,list1) #reduce函数的两种用法
# print(sum)
#注意:um1 = reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5

# -------直接使用sum函数即可
# list1 = [11, 5, 17, 18, 23]
# print("列表元素之和为: ", sum(list1))

# 39. 元素在列表中最大最小值
from functools import reduce
# list1 = [1,2,3,4,5,6,7]
# -----方法1
#sum = reduce(lambda x,y:x+y, list1)
# ------方法2
#sum = max(list1)
# ------方法3
# list1.sort()
# print(list1[-1]) #最大
# print(*list1[:1]) #最小
# print(sum)

# 40. 移除字符串中的指定位置字符
# test_str = 'helloworld'
# new_str = test_str.replace(test_str[2],'A',1) # 原字符,改后字符,修改次数
# print(new_str)

# 41. 判断字符串是否存在子串
# def check(str, substr):
# if(str.find(substr) == -1): #使用str.find()函数
# print('No')
# else:
# print('Yes')
# ----------
# if substr in str: #使用if in即可
# print('Yes')
# else:
# print('No')

# 42. 判断字符串长度
# str = 'runoob'
# print(len(str))
# -------
# def strlen(str):
# count = 0
# while str[count:]: #list[:] 无参数,表示完整的整个列表内容
# count += 1
# return count
# str = 'runoob'
# print(strlen(str))

# 43. 提取URL
# import re
# def FindURL(str):
# url = re.findall('https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+', str)
# return url
# str = 'Runoob 的网页地址为:https://www.runoob.com,Google 的网页地址为:https://www.google.com'
# print(FindURL(str))

# 44. 将字符串作为代码执行,exec的使用,注释里面一样可以执行
# def exec_code():
# LOC = """
# def factorial(num):
# fact=1
# for i in range(1,num+1):
# fact = fact*i
# return fact
# print(factorial(5))
# """
# exec(LOC) #exec可以改变变量的值,但是返回值一定是none
# exec_code()

# 45. 字典排序,分别按照键和值
# def DicSort():
# #声明字典
# dic = {}
#
# #初始化字典
# dic[1] = 2
# dic[2] = 56
# dic[3] = 323
# dic[4] = 24
# dic[5] = 12
# dic[6] = 18
# #按键排序:
# # for i in sorted(dic):
# # print((i, dic[i]), end=" ")
#
# #按值排序:
# print(sorted(dic.items(), key= lambda dic:dic[1], reverse=True)) #reverse不写默认升序,true降序
#
# def main():
# DicSort()
# if __name__ == "__main__":
# main()
#
# -----复杂一点的字典列表排序,即列表的元素是字典
# list = [{ "name" : "Taobao", "age" : 100},
# { "name" : "Runoob", "age" : 7 },
# { "name" : "Google", "age" : 100 },
# { "name" : "Wiki" , "age" : 200 }]
#按age升序
# print(sorted(list, key=lambda dic:dic['age']))

#先按age,再按name排序
# print(sorted(list, key=lambda dic:(dic['age'], dic['name'])) )

# 46. 字典值之和
#方法1:普通函数
# def DicSum(dic):
# sum = 0
# for i in dic:
# sum += dic[i]
# return sum
#
# dic = {'a':100, 'b':200, 'c':300}
# print('Sum:', DicSum(dic))

#方法2:reduce函数
# from functools import reduce
# dic = {'a':100, 'b':200, 'c':300}
# print(reduce(lambda x,y:x+y, dic.values()))

# 回顾reduce的用法:
# def add(x, y) : # 两数相加
# return x + y
# sum1 = reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5
# sum2 = reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
# print(sum1)
# print(sum2)

# 47. 字典键值移除
# dic = {"Runoob" : 1, "Google" : 2, "Taobao" : 3, "Zhihu" : 4}
#方法1:pop函数
# ans = dic.pop('Zhihu') #ans是过程量
# print(str(ans))
# print(dic)

#方法2:del函数
# del dic['zhihu']
# print(dic)

#方法3:items()函数
# ans = {key:val for key, val in dic.items() if key != 'Zhihu'}
# print(ans) #ans是结果量

# 48. 字典合并
#-----------方法1:update()函数-----------------
# def DicMerge(dic1, dic2):
# return dic2.update(dic1) #相当于在dict2的后面加上了dict1

# dict1 = {'a': 10, 'b': 8}
# dict2 = {'d': 6, 'c': 4}
# DicMerge(dict1, dict2)
# print(dict2)

#-------方法2:** 将参数以字典的形式导入-----------
# def DicMerge(dic1, dic2):
# return {**dic1, **dic2} #相当于在dic1的后面加上了dic2
#
# dict1 = {'a': 10, 'b': 8}
# dict2 = {'d': 6, 'c': 4}
# print(DicMerge(dict1, dict2))

# 49. 时间戳转换为日期
# import time
# # 指定的时间戳
# timeStap = 1557502800
# timeArray = time.localtime(timeStap)
# Result = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
# print(Result)
# -------
#没有指定时间戳,获取本地的时间戳
# import datetime
# now = datetime.datetime.now()
# Result = now.strftime("%Y-%m-%d %H:%M:%S")
# print(Result)

class Solution:
def Find(self, target, array):






posted @ 2021-03-26 09:41  楚天耀景  阅读(366)  评论(0)    收藏  举报