python学习笔记


使用的是anaconda带的spyder,一体化做的很方便。课程是南大等的笔记

python笔记

1.0 输入输出

  • input 输入
    eval() 函数用来执行一个字符串表达式,并返回表达式的值。此处转换为int或元组,好处显而易见,当你只输入34时,eval帮你转化为整型,当你输入3,4时,eval把它转化为元组。就不用int或者tuple强制转换了,因为不确定你输入的是什么
In [13]type(eval(input()))
"string","34"
Out[13]: tuple

In [15]type(eval(input()))
"laove"
Out[15]: str

In [11]type(eval(input()))
3
Out[11]: int

price = input('input the stock price of Apple: ')
input the stock price of Apple: 109
>>> price
'109'
>>> type(price)
<class 'str'>
>>> price = int(input('input the stock price of Apple: '))
>>> price = eval(input('input the stock price of Apple: '))

#input的输入是一个字符串。
#注意,利用input输入多个数时整数时,前面需要添加eval函数,参数直接用','分开。
y,z=eval(input("请输入2个整数,中间用逗号分开:"))

请输入2个整数,中间用逗号分开:123, 222

n,m=input("请输入2个字符串,中间用逗号分开:").split(',')

请输入2个字符串,中间用逗号分开:asf, fsf

print(n, m)
asf  fsf
  • print 输出
>>> myString = 'Hello, World!'
>>> print(myString)
Hello, World!

>>> # variable
>>> p = 3.14159
>>> myString = 'is a mathematic circular constant'
>>> print(p, myString)
3.14159 is a mathematic circular constant

# print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    

默认用“ ”连接输出,也可以更改print中的sep,用其他连接方式
print(变量)
print(字符串)
在这里插入图片描述
在这里插入图片描述

1.1 字符串

python中定义变量接收字符串,可以用单引号’,双引号“,当字符串中出现单引号,可以在前面加转义字符” \ “,或者字符串用三引号接受

>>> message = "Meet me tonight"
>>> print(message)
Meet me tonight
>>> message = 'The clock strikes at midnight'
>>> print(message)
The clock strikes at midnight
>>> message = " I'm looking for someone to share in an adventure"
>>> print(message)
 I'm looking for someone to share in an adventure
>>> message  = ''' That's too bad'''
>>> print(message);
 That's too bad
>>> movie_quote = """ One of my favorite lines from Godfather is :
... " I'm going to make him an offer he can't refuse. "
... Do you know who said this? """
>>> print(movie_quote)
 One of my favorite lines from Godfather is :
" I'm going to make him an offer he can't refuse. "
Do you know who said this?

字符串的format输出和,字符串前用的r,u, f,等

sumA = 0
i = 1
while True:
sumA += i
i += 1
if sumA > 10:
break
print('i={},sum={}'.format(i, sumA))
print(f'i={i},sum={sumA}')

1.2 基本数据类型

  • 不可变类型,内存中的数据不允许被修改:
    • 数字类型 int, bool, float, complex, long(2.x)
    • 字符串 str
    • 元组 tuple
  • 可变类型,内存中的数据可以被修改:
    • 列表 list
    • 字典 dict
  • Python 中数据类型还可以分为 数字型和非数字型
    • 数字型
      • 整型 (int)
      • 浮点型(float)
      • 布尔型(bool) 真 True 假 False 0—— 非零即真
      • 复数型 (complex) 主要用于科学计算,例如:平面场问题、波动问题、电感电容等问题
    • 非数字型
      • 字符串 列表 元组 字典
  • 在 Python 中,所有非数字型变量都支持以下特点:
  1. 都是一个序列 sequence,也可以理解为容器
  2. 取值 []
  3. 遍历 for in
  4. 计算长度、最大/最小值、 比较、删除
  5. 链接 + 和 重复 *
  6. 切片

1.2.1 python2

  • types of numbers: int , long, float, complex
  • type() 可以用来查看变量类型
  • #用来表示注释
  • python会自动转型,int->long->float->complex
>>> # everything after a hash tag is a comment and is ignored by the interpreter
>>> a = 28
>>> type(a)
<type 'int'>
>>> a
28
>>> print(a)
28
>>>	# c = 10l
>>> c = 10L 
>>> type(c)
<type 'long'>
>>> e = 2.71821828
>>> type(e)
<type 'float'>
>>> # complex包括实部和虚部,real表示实部,imaginary表示虚部属性
>>> z = 3 + 5.7j
>>> type(z)
<type 'complex'>
>>> z.real
3.0
>>> z.imag
5.7

1.2.2 python3 关键字和表达式

  • Types of numbers: int, float, numbers
  • 不用担心溢出问题,python也会自动转型
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

1.3 算术运算符

1.3.1 Arithmetic in python2

  • Numbers: int, long, float, complex
  • Four operations: add subtract multiply and divide (+,-,*,/)
  • The idea of narrower and wider types
>>> x = 5 # int
>>> y = 5L # long
>>> y
5L
>>> long(5)
5L
>>> z = long(y)
>>> z
5L
>>> z = long(x)
>>> z
5L
>>> x
5
>>> # ints are narrower than longs
... # longs are wider than ints
...
>>> # To convert a long to float just add a point 0 at the end
...
>>> x = 28L
>>> y = 28.0 # float
>>> z = float(28)

>>> x = 1.732
>>> 1.732 + 0j
(1.732+0j)
>>> complex(1.732)
(1.732+0j)
>>> float(1.732+0j)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't convert complex to float

>>> a = 2 # int
>>> b = 3L # long
>>> c = 6.0 # float
>>> d = 12 + 0j #complex
>>> # Rule : Widen numbers so they're the same type
...
>>> #Addition
... a + b # int + long
5L
>>> # Subtraction
... c - b # float - long
3.0
>>> # Multiplication
... a * c # int * float
12.0
>>> # Division
... d / c # complex / float
(2+0j)

>>> 16/5
3
>>> 16%5
1
>>> # 在python2中16/5 得到 Quotient ,  16%5 得到Remainder  ,0不能为除数
... # 在python3中16/5 得到3.2,转型为float类型

1.3.2 Arthmetic in python3

  • types of numbers: int, float, complex
  • Operations: Addition Subtraction Multiplication Division
>>> x = 28
>>> x = 28 # int
>>> y = 28.0 # float
>>> float(28)
28.0
>>> z = float(x)
>>> z
28.0
>>> x #并没有改变x本身的类型
28
>>> 3.14 # float
3.14
>>> int(3.14) # 四舍五入成整数
3

>>> a = 2 # int
>>> b = 6.0 # float
>>> c = 12 +0j #complex number
>>> # Rule : Widen numbers so they're the same type
...
>>> # Addition
... a + b # int + float
8.0
>>> # Subtraction
... b - a # float - int
4.0
>>> # Multiplication
... a * 7 # int * int
14
>>> # Division
... c / b # complex / float
(2+0j)
>>> # 都是向更高范围转型
>>> 16/3 # 返回浮点型数据
5.333333333333333
>>> 16//3 # Quotient
5
>>> 16%3 # Remainder
1

1.4 Pythons interactive help features (dir and help)

>>> dir() # Short for "directory", Python displays a list of available objects When you press Enter
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
>>> dir(__builtins__)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', '...]
>>> help(pow)
# the first line confirms it is a function in the __builtin__ module
Help on built-in function pow in module builtins:

# the following lines show how to use the funtion, there are 3 inputs listed x, y, z
pow(x, y, z=None, /)
    Equivalent to x**y (with two arguments) or x**y % z (with three arguments)

    Some types, such as ints, are able to use a more efficient algorithm when
    invoked using the three argument form.

>>> pow(2,10)
1024
>>> pow(2,10,3)
1
>>> 2**10
1024
>>> 2**10%3
1


  • 用dir()显示的模块都是默认不需要导入的,如__builtins__,模块,可以用help查看其中的函数使用,用help还可以查找其他模块,help(‘modules’)
>>> help('modules')

Please wait a moment while I gather a list of all available modules...

__future__          _tkinter            glob                runpy
_abc                _tracemalloc        grp                 sched
_ast                _uuid               gzip                secrets
_asyncio            _warnings           hashlib             select
_bisect             _weakref            heapq               selectors
_blake2             _weakrefset         hello               setuptools
_bootlocale         _xxtestfuzz         hmac                shelve
_bz2 ...               
>>> import math
>>> dir() # 确定库,是否导入成功
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'math']
>>> dir(math)
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
>>> math.sin(3.1415926/3)
0.8660253948528064
>>> math.sin(1)
0.8414709848078965
>>> help(radians)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'radians' is not defined
>>> help(math.radians)
Help on built-in function radians in module math:

radians(x, /)
    Convert angle x from degrees to radians.

>>> math.sin(math.radians(60)) #角度转化为弧度值
0.8660254037844386
>>> math.sin(math.radians(30))
0.49999999999999994


1.5 True or False

0 is False while 1 is True

>>> True
True
>>> true
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'true' is not defined
>>> False
False
>>> 3 == 5
False


>>> str(True) # convert it to string
'True'
>>> int(True)
1
>>> 5 + True
6


1.6 datetime 操练

>>> dir() # 先看没有datetime模块
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'math']
>>> help('modules') # 查看所有模块

Please wait a moment while I gather a list of all available modules...
x
__future__          _tkinter            glob                runpy
_abc                _tracemalloc        grp                 sched
_ast ...          

>>> import datetime  # 导入datetime模块
>>> dir() # 查看是否导入成功
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'datetime', 'math']

>>> dir(datetime)  # 查看datetime模块中类、属性等,包含date,time,datetime等类
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'timezone', 'tzinfo']

>>> gvr = datetime.date(1956,1, 31)
>>> gvr
datetime.date(1956, 1, 31)
>>> print(gvr)
1956-01-31
>>> print(gvr.year)
1956
>>> print(gvr.month)
1
>>> print(gvr.max)
9999-12-31
>>> print(gvr.day)
31


>>> dt = datetime.timedelta(100) # timedelta类可用来修改日期的,正数代表加100天,负数(-100)代表减100天
>>> dt
datetime.timedelta(days=100)
>>> print(dt)
100 days, 0:00:00
>>> mill = datetime.date(2000,1,1)
>>> print(mill+dt)
2000-04-10

>>> #python Default format: yyyy-mm-dd,but you can specify a different format if you like

>>> print(gvr.strftime("%A, %B, %d, %Y")) # %A is the full name of the day(周几),%B month,%d, is the day of the month and %Y is the four-digit year
Tuesday, January, 31, 1956

>>> message  =  "GVR was born on {:%A, %B, %d, %Y}."
>>> print(message.format(gvr))
GVR was born on Tuesday, January, 31, 1956.

>>> launch_date = datetime.date(2017,3,30)
>>> launch_time = datetime.time(22,27,0)
>>> launch_datetime = datetime.datetime(2017,3,20,22,27,0)
>>> print(launch_date)
2017-03-30
>>> print(launch_time)
22:27:00
>>> print(launch_datetime)
2017-03-20 22:27:00
>>> print(launch_datetime.hour)
22

# 获取当前时间
>>> now  = datetime.datetime.today()
>>> print(now)
2020-01-20 18:20:55.425133
>>> print(now.microsecond)
425133



# 把时间字符串转换为时间对象
>>> moon_landing  = "7/20/1969"
>>> moon_landing_datetime = datetime.datetime.strptime(moon_landing,"%m/%d/%Y")
>>> print(moon_landing)
7/20/1969
>>> print(moon_landing_datetime)
1969-07-20 00:00:00
>>> print(type(moon_landing_datetime))
<class 'datetime.datetime'>

在这里插入图片描述

1.7 条件、循环和函数

1.7.1 小练习:输出2-100直接的素数

  • for循环格式

iterable_object为可迭代对象
判断是否为迭代器(Iterator)和可迭代对象(Iterable)

from collections.abc import Iterator, Iterable

isinstance(range(10), Iterator)
Out[14]: False

isinstance(iter(range(10)), Iterator)
Out[15]: True

isinstance(range(10), Iterable)
Out[17]: True

# 迭代器用next访问下一个元素
x = iter(range(3))

next(x)
Out[24]: 0

next(x)
Out[25]: 1

next(x)
Out[26]: 2

next(x)
Traceback (most recent call last):

  File "<ipython-input-27-92de4e9f6b1e>", line 1, in <module>
    next(x)

StopIteration
  • String, List, Tuple,Dictionary, File
for iter_var in iterable_object:
	suite_to repeat
# 直接访问字符串
s = "Python"

for x in s:
    print(x, end=" ")
    
P y t h o n 
# 索引方式访问字符串
for x in range(len(s)):
    print(s[x], end=" ")
    
P y t h o n 
  • for循环判断素数
import math
def isPrime():
    primeList = []
    for item in range (2,101):
        for x in range(2, int(math.sqrt(item))+1):
            if item%x == 0 and item != x:
                print(f"{item} is not prime")
                break
        else:
            primeList.append(item)
            print(f"{item} is prime")
    print(primeList)
isPrime()

输出:[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

  • while循环格式
j = 1
sum = 0
while j<10:
	sum += j
	j+=1

1.7.2 条件语句缩减

x>0 则 t=1 否则 t=0

t = 1 if x> 0 else 0

1.7.3 一些函数的使用

1.7.3.1 range()

返回的是a 到 b-1的列表对象,c是步长

# 默认start也是0
range(start, end , step=1)
range(start, end)
range(end)

>>> list(range(3, 11, 2))
[3, 5, 7, 9]
#一共11-3 = 8 个元素的列表
list(range(3, 11))
Out[1]: [3, 4, 5, 6, 7, 8, 9, 10]
#一共11-0 = 11 个元素的列表
list(range(11))
Out[2]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1.7.3.2 enumerate()

1.8 异常

在这里插入图片描述
在这里插入图片描述

—小例子

# 保留字符串中的字母
coffeeList = ["32Latte", "_Americano30", "/34Cappuccino", "Mocha35"]
def cleanList(lst):
    cleanedList = []
    for item in lst:
        for u in item:
            if u.isalpha() != True:
                item = item.replace(u,"")
        cleanedList.append(item)
    return cleanedList
print(cleanList(coffeeList))

# 这里是出错代码
def cleanList(lst):
    cleanedList = []
    for item in lst:
        itemCopy = item[:]
        for u in item:
            if u.isalpha() != True:
                itemCopy = itemCopy.strip(u) #删除会引起item的改变,需要再次循环多一个item【】副本
        cleanedList.append(itemCopy)
    return cleanedList
### Shohag Loves Greatest Common Divisor (GCD) In both programming and mathematics contexts, the concept of the greatest common divisor (GCD) plays a crucial role. The GCD is defined as the largest positive integer that divides each of the integers without leaving a remainder. #### Mathematical Definition Mathematically speaking, given two non-zero integers \(a\) and \(b\), their greatest common divisor can be denoted by \(\gcd(a, b)\). This value represents the highest number which evenly divides both numbers[^1]. #### Recursive Implementation in C Language A recursive approach to computing the GCD involves repeatedly applying Euclid's algorithm until reaching a base case where one parameter becomes zero: ```c int gcd(int m, int n) { if (n == 0) return m; else return gcd(n, m % n); } ``` This implementation efficiently reduces the problem size at every step through modulo operations while ensuring correctness via recursion. An alternative version ensures larger values are always passed first before performing division checks: ```c int gcd(int n, int m) { int temp; if (n < m) { // Ensure n >= m temp = n; n = m; m = temp; } if (n % m == 0) return m; else return gcd(m, n % m); } ``` Such adjustments improve performance when dealing with specific input ranges but maintain fundamental logic based on modular arithmetic principles[^2]. #### Application Example: String Division Problem An interesting application appears within LeetCode challenge **1071**, concerning strings rather than numeric types directly. Here, determining whether string `s` consists entirely of repeated instances of another substring `t`, effectively translates into checking divisibility properties between lengths |s| and |t|. If such conditions hold true, then further analysis applies similar concepts seen earlier regarding numerical factors and multiples[^3]: Given this background information about how GCD operates across different domains—from basic mathematical theory down to practical coding exercises—one gains deeper insight into its versatile utility beyond mere factorization tasks alone.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值