1.基础概念
python就是将不同的数据划分成了不同的类型
就像我们生活中的数据有数字、字符等数据一样
小知识点:
注释:#
全体注释:Alt+F3
取消注释:Alt+F4
2.数值类型
数值类型概括
数值类型分为三种:整型int 浮点型 float 布尔型 bool
整型:1 2 3 4 5 6
浮点型: 1.1 3.1415926 5.20
布尔型:True False
我们在交互模式中输入type(数据)就能显示你所输入的数据的类型
type能够在交互模式查看数据类型
type在交互模式的用法:
123
type(123)
<class 'int'>
type(1.5)
<class 'float'>
type(True)
<class 'bool'>
在括号内输入你想判断的数据,直接回车就能返回这个数据的类型
对于交互模式中bool值的判断:
123
2>1
True
1<0.5
False
1>2
False
输入我们要判断的表达式,然后系统会对这个表达式进行判断,返回对应的bool值
注意我们这个的bool类型的两个值True和False 开头的字母一定要是大写的,否则是会报错的
为什么这个布尔值是属于数值类型呢?
#为什么这个布尔值是属于数值类型呢?
#我们在交互模式使用True+1就输出了一个2
#使用False+1就是输出的是1
True+1
2
False+1
1
实际上False表示的是0
True表示的是1
我们在交互模式利用上述的加法就能判断出这个结果
所以我们的True除了表示真,还能表示1
False除了表示假,还能表示0
算术运算符
在我们的python中,True和False同时也代表着1和0,我们可以直接进行运算
True+False=1
对于表中的两个操作符:/和//
一个/的话就是编译器会进行小数的保留
两个//的话就是编译器会将小数部分删除,仅仅只保留住整数部分
对于%这个运算符的话,10/3=3....1
那么这个1就是10%3的结果,就是余数
运算符使用方法:
2*3
6
10**2
100
10/3
3.3333333333333335
10//3
3
10%3
1
我们的所有运算符符号一定要用英文符号
我们在进行算术运算中,只要我们的连个数据中一个数据是浮点数的话,那么结果一定会是浮点数的
一个数据是浮点数,结果一定是浮点数的:
10//3.0
3.0
10//2.0
5.0
只要有浮点数参与运算,那么结果一定是浮点数
对于负数进行呢取整以及其他的操作:
-10//5
-2
-10/3
-3.3333333333333335
-10//3
-4
如果我们是对负数进行取整的话,假如-10//3=-4
因为我们进行取整的话就是比原先不取整的值小一些
不管是整数还是负数都一样,取整就直接将小数部分剔除了
取余%--两数相处,商为余数,取余数部分
幂运算 *就是几次方 *102=100
-10%3
2
-10//4
-3
为什么-10%3得到的是2呢,因为%是进行求余数的操作的
我们的-10//4=-3 我们这里是直接取整的,后面剩下的我们没要直接舍去
但是-4*3=-12
就是说明我们的余数是2,被丢弃的那一部分是2
那么我们的-12+2=-10
那么-10%3=2
所以说负数取余数的话是有技巧的
就是-12< -10的相隔是2
3.字符串
概念:
字符串有三种定义方式:
1.单引号
2.双引号
3.三引号(三对单引号和三对双引号)
单引号和双引号使用时注意事项
python
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
python
NameError: name 'python' is not defined
#如果不加引号就是会报错的
'python'
'python'
"python "
'python '
如果我们在交互模式直接输入python这串字符的话,那么是肯定会报错的
我们需要将这串字符用引号包裹起来
如果我们不用引号括起来的,那么编译器就会以为这个是一个名称,就会检查我们这个名字有没有定义过,没有定义是一定会报错的
如果是文本数据的话,我们一定要用引号括起来的,不然是会报错的
英文和中文的引号是不一样的
我们需要的是英文版本的引号
我们利用type()来进行数据类型的判断,这里编译器输出的是str就是字符串
字符串类型的判断:
type('python')
<class 'str'>
type("python")
<class 'str'>
type('123')
<class 'str'>
单引号和双引号本质上是没有多大的区别的
我们在交互模式输入"python"和'python' 输出的结果都是'python'
引号是对应匹配的
单引号对单引号
双引号对双引号
单引号带来的错误:
'I'am fine
SyntaxError: invalid syntax
#我们如果是这么写的话那么就会报错的
#因为单引号和双引号是成双成对的进行配对的
对于这个单引号带来的错误
如果我们的句子里面已经有单引号的话,那么我们是需要用双引号进行括起来的
如果我们还是用单引号的话,那么因为匹配的问题我们后面的那个单引号就没有配对成功了,就会报错
所以我们是需要进行一个双引号的包裹的
"I'am fine" #回车
"I'am fine"
双引号和双引号匹配成功,那么中间的内容就会被括起来的,那么我们编译器就将中间的内容进行输出
'this is "box"'
'this is "box"'
引号是成对出现的,就近匹配的
单包双,双包单
•单引号和双引号区分的原因:为了嵌套【引号里面还有引号】使用,如果有这种情况,需要使用两种不同的引号
三引号使用时注意事项
三引号 三对单引号 三对双引号
'''
dsad d
dfk
dsbfkj
dasdas
'''
"""
dsad d
dfk
dsbfkj
dasdas
"""
我们使用三对单引号的话我们是能够实现任意换行的
直接将大型的文本进行注释
包裹在三引号之内的我们能随意换行进行注释
只有三引号能实现换行的操作
单引号和双引号是不能实现这个操作的
字符串加号和星号
数字+数字---相加
字符串+字符串--拼接
字符串的+法使用:
#交互模式
'2'+'3'
'23'
2+3
5
字符1+字符1得到的就是11
就是相当于拼接
数字*数字---两个数字进行相乘
字符串*正整数---字符串重复多少次
字符串的*的使用:
'5201314'*6
'520131452013145201314520131452013145201314'
4.格式化
三种格式化
%格式化
语法:'格式化的字符串'%(填充的数据)
占位符:我们需要在字符串里面占一个位置,用于放后面填充的数据
三种占位符:%s字符串 %d整数 %f浮点数
print('你的成绩是%f'%(12.4))
通过字符串内的占位符,然后我们在字符串外面输入我们要填充的数字
对于%f的话我们这里默认是6位小数
如果我们是想进行小数位的控制的话,那么我们需要在%和f中间加上.n
保留几位小数,这个n就是几
设置小数位的方法:
#设置小数位
print('你的成绩是%f'%(12.4))#默认保留6位小数
print('你的成绩是%.2f'%(12.4))#我们将其设置为2位小数
设置长度,超过我们设置的长度我们就不进行处理
如果没有超过我们设置的长度的话,我们就进行填充处理
默认的话是填充空格的
我们可以使其填充的数字是0
一般是不填充符号类的
#编辑模式
print('%3d'%(1))
print('%d'%(1))
#交互模式
1
1
#可见的区别
如何将不足长度的地方设置为0呢?
我们在%3d前面加上0
那么不满足长度的地方就会自动填充为0了
只有长度不够的时候才会进行填充的
我们在表达num1+num2的结果的时候我们也是能用占位符的
输出 数字+数字=和 的格式:
#编辑模式
num1=eval(input("请输入数据1:"))
num2=eval(input("请输入数据2:"))
##print(num1+num2)
#我们使用格式化进行表示最终的结果
print('%d'%(num1+num2))
print('%f+%f=%f'%(num1,num2,num1+num2))
#每个占位符和数据进行对应的
#交互模式
请输入数据1:5
请输入数据2:6
11
5.000000+6.000000=11.000000
在这个表达式中对于%f那行代码的另一种写法
print('%s+%s=%s'%(num1,num2,num1+num2))
#我们直接将这个%f替换成%s就行了
#交互模式
5+6=11
为什么我们能进行代码中这么交换呢?
就是我们将这个代码中三个占位符对应的数据先转换为字符串
然后在打印的时候我们就能通过print将引号去掉了
但是还是不建议这种写法
如果是写%f的话,我们在前面加上.n进行小数位的控制
'%d'%(数据)
foramt占位符
语法:'格式化的字符串'.format(填充数据)
一定要看清楚
format前面有个小数点,别忘了加
占位符:{}
设置小数位数::.nf---保留n位小数 这里是冒号+点+nf 冒号的作用就是区分数据和格式的
format使用方法:
#编辑模式
print('你的大小是{:.2f}'.format(12.4))
print('你的大小是{:03d}'.format(1))
#交互模式
你的大小是12.40
你的大小是001
一定要在花括号里面写冒号
输出 数字+数字=和 的格式
#编辑模式
num1=eval(input("请输入数据1:"))
num2=eval(input("请输入数据2:"))
print('{}+{}={}'.format(num1,num2,num1+num2))
#交互模式
请输入数据1:5
请输入数据2:5
5+5=10
'{:,nf}.format()'
f表达式
这里的f是format的缩写
占位符:{}
语法格式:f'{格式化的数据}'
保留n个小数:
#编辑模式
print(f'{1:.2f}')#打印1保留两位小数
#冒号的作用是分割数据和格式
#交互模式
1.00
'f{格式化的数据:,nf}'
设置数据长度,不足填充数据,超过不做处理
#编辑模式
print(f'{1:05d}')
#交互模式
00001
输出 数字+数字=和 的格式
#编辑模式
num1=eval(input("请输入数据1:"))
num2=eval(input("请输入数据2:"))
print(f'{num1}+{num2}={num1+num2}')
print(f'{num1:03}+{num2:03}={num1+num2:03}')
#交互模式
请输入数据1:5
请输入数据2:6
5+6=11
005+006=011
对于花括号中的冒号的话,我们如果对数据有要求的话我们是能对其在冒号后面进行要求的
比如说在冒号后面加03d
如果没有要求的话我们是可以直接在花括号里面写个数据就行了
这三种方法中我感觉f表达式是最简单的格式化
小题目
1.键盘输入用户名,键盘输入密码,将用户名和密码信息进行格式化输出
格式为:'用户xxx你好,你的密码为xxx'
#编辑模式
name=input("请输入你的姓名")
code=input("请输入你的密码")
print('%s你好,你的密码是%s'%(name,code))
print('{}你好,你的密码是{}'.format(name ,code))
print(f'{name}你好,你的密码是{code}')
#交互模式
请输入你的姓名kyk
请输入你的密码666
kyk你好,你的密码是666
kyk你好,你的密码是666
kyk你好,你的密码是666
2.键盘输入用户电话,以及话费,用格式化进行输出了
tel=eval(input("请输入你的电话"))
money=eval(input("请输入话费"))
#因为我们这里输入的money是一个字符串,我们是不能对其小数位作调整的,不然是会报错的
#如果想要调整话费的小数点位的话,我们需要将我们输入的数据转换为浮点型
print(f'用户:{tel:013d},你这个月的话费为{money:.2f}')
#经过打印我们知道如果我们是字符串的话,长度不够的情况下,是在右边进行补空格的操作的
#那么我们将这个字符串类型进行改变,改成整形的话,那么填充的数字就是左边
#我们指定长度为13位,不满的话就填充0
关于不同类型对齐的知识
字符串在打印的时候长度不够的时候是在左边进行空格填充的操作的
整型就是在右边进行填充
那么我们如果进行数据在打印的时候的对齐方式呢?
我们可以在打印的时候使用对齐符
左对齐,右边填充<
右对齐,左边填充>
居中,两边填充^
那么是如何使用这三个符号呢?
字符串对齐符号的使用方式:
#字符串类型在右边填充,整形类型在左边填充
#设置填充数据的对齐方式----填充符 对齐方式 长度 -> 0<5 (长度为5,不足填充0,左对齐)
num=123
#左对齐<
print(f'{num:<5}') #长度为5不足填充空格
print(f'{num:0<5}')#长度为5不足填充0
#右对齐>
print(f'{num:>5}')
#居中^
print(f'{num:0^5}')
#左对齐就在右边填充0,右对齐就在左边填充0,数据居中对齐就是在两边填充0
填充符 对齐方式 长度 -> 0<5 (长度为5,不足填充0,左对齐)
这里是以f表达式为例子
5.变量
变量的命名以及赋值
变量是什么呢?
变量:可变的量,值是可以进行改变的
我们通过赋值符号"="进行赋值
我们可以保存任意类型的数据
这个变量就相当于一个容器,这个容器是可以进行数据的存放的
我们能通过这个这个容易的名字进行数据的调用
定义格式:变量名=值
变量名:自己定义,我们需要遵循命名规则
值:数据
命名规则
1.只能有数字、字符、下划线_
2.不能以数字开头
3.不能有特殊的字符,如标点符号等
定义一个变量来存放名字
这个名字是一个文本,算是字符串,我们用双引号或者单引号包裹
使用变量格式:变量名
#编辑模式
name='小明'
#交互模式
name 回车
'小明'
我们在编辑模式对这个name进行定义,然后运行进入到交互模式里面,然后直接输入name 回车,编译器输出的就是我们之前对name的定义的数据
通过变量名我们是可以获取对应的数据的
#编辑模式
print(name)
#交互模式
小明
变量名我们是需要先进行定义我们才能进行使用的
文本数据被定义的话我们一定要用引号进行括起来的
如果我们用print进行打印的话,编译器会直接过滤掉引号
但是我们直接将变量拿出来到交互模式的话那么就不会去引号的
变量的多重定义,那么最后一次定义的就是我们最终变量里面存储的
#编辑模式
name='小明'
print(name)
name =1
print(name)
name ='小妹'
print(name)
#交互模式
小明
1
小妹
每次定义都是重新定义的,不管之前这个变量名有没有被定义,都以最后一次为基准
最后一次被定义的是啥,这个变量里面存的就是啥
就是新的值会将旧的值进行替换
这个就是重新赋的概念
同时定义多个变量:左边变量名数量和右边的值数量一定要一致
#编辑模式
a,b,c=1,2,3
print(a)
print(b)
print(c)
#交互模式
1
2
3
多个变量进行命名,我们一定要数量对应好
姓名和数据要对应好
官方式命名法:用下划线连接两个英文组成的名称
'''
假设现在猪肉 15块钱一斤,西兰花 6块一斤,辣椒 12块钱一斤
现在买2斤猪肉,1斤西兰花,2斤辣椒需要多少钱?
'''
zhurou=15
xilanhua=6
lajiao=12
print(zhurou*2+xilanhua*1+lajiao*2)
然后编译器输出的就是60
'''
第二天猪肉涨价为18块钱一斤
买同样的材料需要多少钱?
那么我们现在只需要将这个猪肉的价格进行修改就行了
'''
zhurou=18
print(zhurou*2+xilanhua*1+lajiao*2)
编译出来的就是66
关键字和内置函数
我们在对变量进行命名的时候我们是不能用关键字进行命名的
那么我们是怎么进行关键字的查看呢?
查看关键字的方式:
#查看关键字
import keyword
print(keyword.kwlist)
'''
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await',
'break', 'class', 'continue', 'def', 'del', 'elif', 'else',
'except', 'finally', 'for', 'from', 'global', 'if', 'import',
'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise',
'return', 'try', 'while', 'with', 'yield']
关键字:保留字,回赋予一些特殊的含义
我们是不能用这些关键字进行变量名字的定义的
举例:我们之前学到的True就是真,表示的是1
但是现在我们将这个进行重新赋值,那么这个表示的大小就被重新替换掉了
那么这个就对代码产生了极大的危害
我们是没有这个权限对关键字进行重新赋值的
但是true和false是可以进行变量的命名的
因为开头字母是小写的,不是关键字
关键字的颜色一般是橙色的
我们的变量名一般就是黑色的
紫色的就是python里面的内置函数,也是不能用来对变量进行命名
查看内置函数的方式:
#编辑模式
print(dir(__builtins__))
#交互模式
'''
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BaseExceptionGroup', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EncodingWarning', 'EnvironmentError', 'Exception', 'ExceptionGroup', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'aiter', 'all', 'anext', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
'''
6.变量的输出与输入
输出print
输出我们用的是print函数
print(要输出的内容)
将括号内的内容进行一个打印,打印到交互面板
如果我们通过print函数来输出字符串的话那么编译器就是自动将引号省略
输出引号内的内容
我们的括号里面还能放表达式,编译器会在计算之后将其进行输出的
但是我们如果要输出多个数据应该怎么做呢?
多内容的打印方式:
#编辑模式
print('abcd',1+1,4**2)
#交互模式
abcd 2 16
我们在print的括号内用逗号将多个内容进行隔离
print(内容一,内容二,内容三)
打印出来的数据就是:内容一 内容二 内容三
分隔符---sep
换行是怎么操作的呢?我想要多个数据各为一行
设置多个数据时,数据之间的分隔符
sep是可以设置分隔符的,就是数据与数据之间用什么进行分开,我们是可以控制的
sep的位置通常在打印括号内的最后一个位置
sep来控制分隔符号:
#编辑模式
print('abcd',1+1,4**2,sep=";")#设置以分号进行分割
print('abcd',1+1,4**2,sep=":")#设置一冒号进行分割
print('abcd',1+1,4**2,sep="6")#设置一6进行分割
#交互模式
abcd;2;16
abcd:2:16
abcd62616
如果我们是不设置分隔符的话那么默认的分隔符就是一个空格
如果我们想换行,怎么用sep实现呢?
#编辑模式
print('abcd',1+1,4**2,sep="\n")
#交互模式
abcd
2
16
我们将分隔符设置为'\n'就行了
\n就是换行的操作,就是编译器帮我们进行回车的操作
想要被打印的数据之间用什么符号进行间隔,我们通过sep='分隔符'这个操作就能进行实现了
end的使用
为什么我们的每个单独的print函数的后面好像是有个换行符一样,我们不需要进行写sep就能换行
#编辑模式
print(1)
print(2)
print(3)
#交互模式
1
2
3
设置内容回输出完毕之后以什么内容结尾
end='结尾符',结尾默认是换行
我们这里的print的结尾符默认是换行\n
我们没有在括号内设置的,系统堆print是默认是换行的
一句print就是一行的
但是我们现在不想默认换行了怎么办,我么想用其他的符号进行运用
#编辑模式
print(1,end="+")
print(2)
print(3)
print(3,end="*")
print(4)
#交互模式
1+2
3
3*4
我们在这里没有以换行符进行结尾
我们以+和*进行结尾
那么我们输出的就是
1+2
3
3*4
我们将默认的换行符变为其他的符号进行结尾
end和sep的区别
区别:
#编辑模式
print(1,sep="!")
print(1,end="+")
#交互模式
1
1+
我们的sep只有在多个数据存在的时候才能发挥作用
只有一个数据的话是不会生效的,两个及以上的数据才会生效
但是我们的end就不一样,end是直接在结尾设置我们想要的符号,不管是几个数据
不管是end还是sep,前面的逗号一定要是英文逗号,不能是中文逗号
输入input
格式:input("提示内容")
我们能在交互模式通过键盘输入数据
作用:你想给计算机什么信息,则使用输入函数录用,通过排变量进行保存
注意:input接收到的所有数据都是字符串类型,可以通过类型转换为对应的数据类型
input返回的是字符串类型,所以我们需要进行类型转换,转换为对应的类型进行正确的操作
name=input("请输入你的名字:")#定义变量,存放输入的数据
print(name)
input括号内的是输入我们的提示信息,提醒用户输入
在输入数据之后,这个数据就被存放到了name里面了
然后我们将其进行打印,然后就得到了我们输入的东西了
我们需要按下回车键告诉编译器我们已经输入完了,然后由编译器进行后面的其他操作
我们一定是要在input后面的括号内输入提示信息,不然后面代码量提高了就很不方便的
一定要在交互模式进行键盘的输入数据,输入完数据需要回车才能结束等待输入的状态
#键盘输入两个数字,进行加法操作,并将值给他进行输出
#编辑模式
num1=input("请输入第一个数字")
num2=input("请输入第二个数字")
print(num1+num2)
#交互模式
请输入第一个数字12
请输入第二个数字12
1212
为什么我们最后的的结果是1212呢?
好像就是将我们输入的两个值进行了拼接一样
怎么和字符串的加法一样呢?
对于input来说,我们不管输入什么,系统都会将我们输入的看作是一个字符串
所以我们这里的结果就是和字符串拼接效果是一样的
为了能使用我们输入的数字进行加法操作,我们需要将我们输入的数据转换为整型类型的数据
然后就能进行整型的相加了
下面我们就介绍转换数据类型
转换数据类型
数据类型:整型(Int)浮点型(float)字符串(str)
如果我们需要将浮点型转换为整型该怎么操作呢?
int(我们写的浮点型)
int(12.4)
那么转换出来的就是12
只保留整数部分,舍去小数部分
将字符串转换为整型进行输出
print(int('123'))
输出123
str()将输入的数据转换为字符串
整形转换为为浮点型就是在后面添加小数部分
字符串转换为浮点型其实都差不多
对于字符串转换为整型的时候,我们字符串引号里面的字符只能够是数字
不能够是字母,因为我们字母是不能变成数字的
那么回到上面的题目我们就能将我们输入的进行相加
##键盘输入两个数字,进行加法操作,并将值给他进行输出
num1=input("请输入第一个数字")
num2=input("请输入第二个数字")
print(int(num1)+int(num2))
我们直接在打印的括号里面将我们输入的数字进行转换为整型
任何数据转换为字符串直接将数据用引号括起来
我们不仅可以在输入的时候进行转换,我们也可以在使用的时候进行打印的时候转换
##键盘输入两个数字,进行加法操作,并将值给他进行输出
num1=int(input("请输入第一个数字"))
num2=int(input("请输入第二个数字"))
print(num1+intnum2)
直接在我们输入完就进行转换为整型
然后两个整型的相加
eval--将字符串的引号去除
eval(字符串):将字符串的引号去除,只显示引号里面的数据
我们现在想实现输入的是什么数据就准确转换什么数据
eval的使用:
num=eval(input("请输入数据"))
print(type(num))
print(num)
我们直接利用eval在输入的时候将字符串的引号进行去除
我们输入的数据为字符串类型的话,那么我们就不能使用eval了
就会报错了