?1.如何一行中输入多个数据
????????input()是 Python内置函数,功能是接受标准的输入数据。无论用户输入什么内容,input()函数都以字符串类型返回结果。
例如输入1 2 或者 3,4
c = eval(input())
#一开始我只会一行输入一个...
a,b = input().split()
d,e = input().split(',')
#利用字符串中的split方法,填入分隔符(默认为空格)即可
print(a, b, d, e)
输出如下:
?2.如何按照各种输出格式要求进行输出
????????print()也是Python内置函数,功能是输出运算结果。print()函数的语法格式如下:
????????print(*objects, sep='', end='\n', file=sys.stdout)
????????其中,objects表示输出的对象,输出多个时用逗号分隔;sep 用来分隔多个输出对象,默认为一个空格(输出显示时候用空格分开的,比如输入了1,2,3,输出是1 2 3); end 用来设定本次输出以什么结尾,默认是换行符\n;file表示想要写入的文件对象,默认是标准输入输出。
a,b,c,d = 1, 2, 3, 4
print(a)
#输出一个
print(a,b,c,d)
#输出多个
print(a,b,c,d,sep=',',end='!')
#输出时的分隔符从空格改为逗号,且以感叹号结尾
print("\n本答案的输出分别是{},{},{},{}".format(a,b,c,d))
#也可以采用格式化输出方法format
?3.标识符与关键字的区分
????????标识符:就是名称,就像我们每个人都有属于自己的姓名一样,标识符的作用就是作为变量、函数、类、模块和文件等对象的名称,以方便程序调用。
命名规则:由字母、数字、下划线3种字符组成,①不能以数字开头;②严格区分大小写;③不能和python种的关键字重名;④标识符不能是标准函数已经使用的名称,如print
合格标识符: a, abc123, abc_123,___,_ab_cd_12cc,myName,while_
非法标识符: 123, 123a,abc_,while,a.2,my-Name
? ? ? ? 关键字:又称保留字,它们是Python语言中的一些已经被赋予特定意义的单词。如False,True,if,else等
? ? ? ? 此外还有很多关键字,如图:
import keyword
print(keyword.kwlist)
?4.Python的变量(与C不同之处)
首先,Python语言使用等号作为赋值运算符,具体格式为: 变量名?= 要存储的数据
①变量名是标志符的一种,因而也要遵守标识符的命名规则。
②C语言中,对于不同类型的数据,要声明不同的变量类型如int a,double b,等。但python中的变量不需要声明,但每个变量在使用前必须先赋值,赋值完之后变量才会被创建。值存放在内存中的某个位置,变量只是用于引用而已。
为了证明上面这句话,进行简单的代码实验:
x=3
print(id(x))
#注意,id(x)是返回地址的函数
x=7
print(id(x))
?输出地址为:
从图中可以看出他们俩返回的地址不同,这是为什么?
实质上,例如程序在执行语句x = 3时, Python要做以下三个事情。
①创建一个对象,即分配一块内存以存储数据3
②创建一个变量x,如果它还没有创建的话。
③将变量名x与对象关联起来,创建变量并使用变量引用对象。
那这次剖析一下代码就明白为什么了,代码如下:
x=3
print(id(x))
''' 注意!这里的id(x)返回的是对象3的地址。'''
x=7
print(id(x))
''' 注意!这里的id(x)返回的是对象7的地址。'''
P.s.:在Python中,当一个变量名被赋予新的对象时, 之前赋予的那个对象(如果此时没有被其他的变量名或对象引用的话)占用的内存空间就会被回收。这种自动的内存管理过程被称为“垃圾收集”。
?5.int()函数补充
class int(object)
| int([x]) -> integer
| int(x, base=10) -> integer
① int(x)是将符合数学格式的数字型字符串x转换成整数,获将浮点数转换成整数,取整。
例如:int(6.5) 返回 6;int("123") 返回 123;int() 返回 0 (无参数时返回0)
② int(x, base = 10) 则是 将 base进制的x字符串 转换成对应的十进制整数
例如:int("aa",16) 返回 170(aa是十六进制数,转换成十进制通过公式就是 10*16^1 + 10*16^0 = 170); int("1100",2) 返回 12 (1100是二进制数,转换成十进制通过公式就是1*2^3 + 1*2^2 + 0*2^1 + 0*2^0 = 12。
其他例子:
print(int())
print(int(3.6))
print(int("12", 16))
print(int("1010", 2))
print(int("aa",16))
print(int("1100", 2))
?详细内容可以通过help(int())查看:
class int(object)
| int([x]) -> integer
| int(x, base=10) -> integer
|
| Convert a number or string to an integer, or return 0 if no arguments
| are given. If x is a number, return x.__int__(). For floating point
| numbers, this truncates towards zero.
|
| If x is not a number or if base is given, then x must be a string,
| bytes, or bytearray instance representing an integer literal in the
| given base. The literal can be preceded by '+' or '-' and be surrounded
| by whitespace. The base defaults to 10. Valid bases are 0 and 2-36.
| Base 0 means to interpret the base from the string as an integer literal.
| >>> int('0b100', base=0)
| 4
?1.TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
译:类型错误:int()参数必须是字符串、对象或数字之类的字节,而不是“list”
问题代码示例(运行将会报错):
n,m=int(input().split())
print(n+m)
原因:假如输入30 50, 首先input()传入字符串"30 50",再通过split 默认以空格为分隔符分割成了['30','50']的字符串list,但是int()参数不能是list,所以导致了报错。
可以修改为:
n,m=input().split()
n = int(n)
m = int(m)
print(n+m)
或
str = input()
n = int(str.split()[0])
m = int(str.split()[1])
print(n + m)
?2.ValueError: invalid literal for int() with base 10
问题代码示例(运行将会报错):
''' 错误样例1'''
y = int("10.0")
print(y)
''' 错误样例2 , 当用户输入 10.0 时将报错! '''
x = int(input())
print(x)
原因:根据现有语法规定,int(x), x如果为字符串,当从字符串转整数时,要为整数才可以直接转。解决方法就是先转成float, 再从float转成int。
样例1修改:
''' 修改样例1'''
y = int(10.0)
print(y)
(因为int函数中的x为10.0的float类型,可以强转成int类型,但只是简单地取整而非四舍五入。)
样例2修改:
''' 修改样例2 , 当用户输入 10.0 时输出10 '''
x = int(float(input()))
print(x)
?3.TypeError: 'float' object cannot be interpreted as an integer
译:类型错误:“float”对象不能解释为整数
问题代码示例(运行将会报错):
print(bin(12.5))
print(oct(12.5))
print(hex(12.5))
'''以上三个输出都会导致报错'''
原因:可以利用help()函数查阅bin(),oct(),hex()函数的使用方法,这些Python内置函数要求参数为整数, 所以当出现此类型报错时,多关注是否是由于参数不符合要求。
P.s.:除上述问题外呢,也有可能是因为python3不向后兼容python2导致的,因为在python2中的 /(除符号) 只留整数部分,去掉小数;而python3中的/是真正意义上的除法,结果是float型浮点数,python3中的//等价于python2中的/。