计算两点间距离
# -*- coding:utf-8 -*-
'''
This is a python123.io file.
'''
ntxt = input("") #从键盘上接受输入1 1 2 2,返回字符串"1 1 2 2"赋值给ntxt
nls = ntxt.split(" ")
#使用split(" ")函数分割字符串内容," "中包含了一个英文空格,并返回了一个列表给nls
x1 = eval(nls[0]) #将列表nls中第一个元素被eval函数识别为数字:1
y1 = eval(nls[1]) #将列表nls中第二个元素被eval函数识别为数字:1
x2 = eval(nls[2]) #将列表nls中第三个元素被eval函数识别为数字:2
y2 = eval(nls[3]) #将列表中第四个元素被eval函数识别为数字:2
r = pow(pow(x2-x1, 2) + pow(y2-y1, 2), 0.5) #根据两点间距离的数学公式求出距离
print("{:.2f}".format(r)) #保留2位小数输出距离1.41
#特别注释:如果输入不符合要求,例如1 1,则会出现SyntaxError: unexpected EOF while parsing
#如果输入的包含字符,例如1 1 a b,则会出现NameError: name 'a' is not defined
#同学们可以考虑一下:如果改进代码,避免出现这样的错误。
计算球体表面积和体积
PI = 3.14
r = eval(input())
S = 4 * PI * pow(r,2)
V = (4/3) * PI * pow(r,3)
print("{:.2f} {:.2f}".format(S,V))
Unicode字符
x = eval(input()) #输入为"65",由eval函数转变为数值65
print("{:c}".format(x)) #输出Unicode编码为65,对应的字符为"A"
# 如果输入的是"a",会出现如下错误提示:
# File "<string>", line 1, in <module>
# NameError: name 'a' is not defined
# 原因:eval函数只能识别数字字符串,对于输入"a",只能被识别为一个变量名称为a,
# a 这个变量是不存在的,从而出现错误。
# 如果要避免这样的意外出现,请尝试使用try-catch语句完善代码。
# 本题目的考察点在于format函数的格式输出规则。
字符串逆序
s = input() #从键盘获取输入,返回字符串
print(s[::-1],end="") #字符串逆序输出,详见代码后说明
print(len(s)) #输出字符串长度
本题考查的是字符串的一些基本知识。
反序字符串的写法是s[::-1]。
[x:y:z]切片索引,x是左端,y是右端,z是步长,在p[x,y)区间从左到右每隔z取值,默认z是1,可以省略参数z,步长为负号就是反向,从右到左取值。
就业人数统计
#从键盘上获取字符串,按回车键结束输入。形如:计算机 金融 计算机 建筑 土木 土木 计算机
names = input("请输入各个同学行业名称,行业名称之间用英文空格间隔(回车结束输入):")
#str.split()函数可分割从键盘上获取的字符串,返回一个列表,默认缺省分隔符为英文空格。
'''
| split(self, /, sep=None, maxsplit=-1)
| Return a list of the words in the string, using sep as the delimiter string.
|
| sep
| The delimiter according which to split the string.
| None (the default value) means split according to any whitespace,
| and discard empty strings from the result.
| maxsplit
| Maximum number of splits to do.
| -1 (the default value) means no limit.
'''
t = names.split()
d = {} #定义一个字典
for c in range(len(t)): #对列表t中每一个元素统计出现次数
d[t[c]] = d.get(t[c],0)+1 #要掌握字典get方法的具体使用,详见代码后面。
ls = list(d.items()) #将字典的items()转换为列表,形如[("计算机",3),...]
ls.sort(key=lambda x:x[1], reverse=True) # 按照数量排序
for k in range(len(ls)): #输出排序后的统计结果
zy,num = ls[k]
#例如:ls[0]=("计算机",3),执行完该语句后,zy="计算机",num = 3
print("{}:{}".format(zy,num))#按照格式输出结果
创建字典变量 d,可以利用 “d[键]=值” 方式作为字典在增加新的键值对变量。如下代码格式是最常用的对元素统计的语句:d[w]=d.get(w,0)+1
其作用是增加一次元素 w 出现的次数。使用 .get() 方法获得当前字典 d 中 w 作为键对应的值,即 w 已经出现的次数。如果 w 不存在,则返回 0,反之,则返回值。
key=lambda x: x[1] 为对前面的对象中的第二维数据(即value)的值进行排序。 key=lambda 变量:变量[维数] 。维数可以按照自己的需要进行设置。
参见:对键值进行输出和排序
十六进制转换
s = input()
print("{:\"^30x}".format(eval(s)))
# 错误写法:print("{:\"30x^}".format(eval(s)))
# 从键盘上输入:63
# 输出为:""""""""""""""3f""""""""""""""
# \" 表示 在""字符串内部显示一个英文单引号的方式,本题中如果没有增加\,显示出错
# ^ 表示s处于输出字符串的中间位置
# 30指字符串设定格式化输出总长度为30
# x表示小写十六进制输出,X表示大写十六进制输出
# 如果换成b,表示二进制方式输出;如果换成o,表示八进制方式输出;
# 如果换成d,表示十进制方式输出。
“实现了在字符串”"中显示一个 " 双引号的功能 ,特殊格式控制字符使用反斜杠(\)开头,例如\r表示回车,光标移动到本行首,\n表示换行,光标移动到下行行首。
^ 表示居中对齐,^前面的内容表示使用"填充字符串。
30 是宽度,指当前槽的设定输出字符宽度为30
信息输出
ls= input().split(',') #将从键盘上输入的用逗号隔开的字符串转换为列表
#例如输入:10,@
#ls为['10', '@']
#ls[0]为'10' ,eval(ls[0])*2+len(ls[0])表达式值为22
#ls[1]为'@'
print(ls[0].center(eval(ls[0])*2+len(ls[0]),ls[1]))
#'10'.center(22,"@")即为输出结果,考察字符串的center方法
#str.center(x,y) 会用字符串str构造一个新的字符串,
#新的字符串长度是x, 两边填充y。此处的x是数字,y是填充字符
# str:'10'
# x:22
# y:"@"
#输出结果为"@@@@@@@@@@10@@@@@@@@@@"
- 理解 input 的结果是返回一个字符串
- split 是字符串的方法,能够以逗号把字符串分割成列表,但列表的元素都是字符串
- 用 ls[0] 和 ls[1] 分别取得输入的数字和后面的符号
- 题目要求用一行表达式来解决这个问题,所以增加了难度
- 此时要想起来用字符串的操作方法 center,问题就迎刃而解了,这个方法 str.center(x,y) 会用字符串 str 构造一个新的字符串,新的字符串长度是 x , 两边填充 y。此处的 x 是数字,y 是字符
- 要记得 ls[0] 里的 10 是一个字符串,所以要记得用 eval 把它变成数字,乘 2,加上 10 自己的长度,就得到了所需的 x;y 就是 ls[1] 里的字符
- 这道题关键是深入理解,并灵活运用 center
进制转换
#请输入一个十进制整数
Tempstr = eval(input())
print("0x{0:x},0o{0:o},0b{0:b}".format(Tempstr))
字符串输出
#"请输入一个字符串,由逗号隔开每个字符:"
ls= input().split(',')
print(''.join(ls))
- 用 split(’,’) 来从字符串里提取所输入的字符,split() 函数返回列表
- 字符串方法 str.join(ls) ,把列表里的各个元素,用 str 的内容连接起来。利用了空字符串‘ ’,来调用这个函数,将带有逗号的字符串变换成了没有逗号的字符串
八进制转换
s = input() # 请输入一个由1和0组成的二进制数字串
d = 0
while s:
d = d*2 + (ord(s[0]) -ord('0'))
s = s[1:]
print("转换成八进制数是:{:o}".format(d))
英文单引号统计
st = input()
pair = 0
count = 0
for s in st:
if s == "'":
pair += 1
if pair % 2 == 0:
count += 1
if pair == 0:
pro = "没有单引号"
elif pair % 2 == 0:
pro = "有{}对单引号".format(count)
else:
pro = "有{}对配对单引号,存在没有配对的单引号".format(count)
print(pro)
多分支结构,分支语句的嵌套
利用对2求模运算,来判断单引号是否配对
利用pro变量来记录不同情况下的输出内容,最后只用一个print来输出显示
利用字符串的format操作,把合成要输出的变量和提示字符串
首字母大写
ls = eval(input())
for i in range(len(ls)):
ls[i] = ls[i].capitalize() #将所有的字符串首字母转换成大写capitalize()函数
print(ls)
字符串填充
a = input() # 请输入填充符号
c = input() # 请输入要显示的字符串
flag = 1
while flag:
try:
b = eval(input()) # 请输入字符串总长度
except:
flag = 1
print("请输入一个正整数")
else:
if type(b)== int and b>0:
flag = 0
else:
flag = 1
print("请输入一个正整数")
print('{0:{1}^{2}}'.format(c,a,b))
数字求和
n = input() #1,2,3,4
nums = n.split(",") #["1","2","3","4"]
s = 0
for i in nums:
s += eval(i)
print(s)
十进制转换
s = input() # 请输入一个由1和0组成的二进制数字串:
d = 0
while s:
d = d*2 + (ord(s[0]) -ord('0'))
s = s[1:]
print("转换成十进制数是:{}".format(d))
字符串长度对比
def Percentage(str1,str2):
n = 0
for s1,s2 in zip(str1,str2):
if s1 == s2:
n += 1
return n/len(str1)
s1 = "我爱你中国"
print(s1)
s2 = input()
if len(s1) != len(s2):
print("输入字符串长度不一致,请重新运行本程序!")
else:
print("{:.2%}".format(Percentage(s1,s2)))