1,Python中的输入与输出
****输入****
python2中:raw_input()接受字符串的数据
name = raw_input("input name:") print name
input只能接受数值类型的数据
info = input("input:") print info
python3中:无raw_input,只有input,用input接受的数据为字符串类型
****输出****
python2: print "要打印的字符串"
python3: print("要打印的字符串")
%s字符串 %数值 %o八进制数 %x十六进制数 %f浮点数 %%显示百分数
2,Python中的数据类型
python中支持的数值类型: int,long,float, complex
a = 13 print(type(a))#查看数据类型
num1=28 num1=1L #转换数值类型为长整数型 print type(num1)
注: 数值类型可互相转换;
python中没有1L;
科学技术法(e)的数属于浮点数;
复杂数中:
num1 = 2+3j print type(num1) print num1.real #打印实部 print num1.imag #打印虚部 print num1.conjugate() #打印共轭复数
3,分支语句
if 条件表达式:
满足表达式执行的内容
elif 条件表达式
满足条件的内容
else:
不满足表达式执行的内容
a=4 b=3 if a>b: print(a) else: print(b) print(a if a>b else b) #三目运算
4,循环语句
****while条件表达式****
count = 0 while count < 3: print("hello world") count += 1
****while死循环****
# while True:
# print('hello')
# while 0<1:
# print("hello")
# while 1:
# print("hello")
****for循环****
for i in range(5): print(i) else: print("结束执行....")
# range(end): 0~end-1
# range(start, end): start~end-1# range(start, end, step): start~end-1, 步长为step
# range(1,10,2) # 1, 1+2, 1+2+2
****跳出循环****
# break(结束此循环)
# continue(跳出本次循环并继续)
注:#break 只能结束一个循环,嵌套时需要多次跳出
#getpass模块可以使输入不显示
5,变量名的命名规则
# 变量名可以由字母,数字或者下划线;
# 变量名只能以字母或者下划线组成;
# 变量名不能是python的关键字: if, else,while, for, break,continue,pass
6,字符串
****字符串常用转义符号****
# \n:换行# \t: 一个tab键
# \': '
# \": "
print('"hello"')
print("he's")
print("\"hello w\'s python\"")
****字符串的特性****
# 索引: 0,1,2,3,4, 索引值是从0开始的; s='hello' print(s[0]) print(s[4]) print(s[-1]) # 拿出字符串的最后一个子符; # 切片 # 切片时规则为s[start:end:step],从start开始,到end-1结束, 步长为step; print(s[0:4:2]) print(s[:]) # 显示所有子符 print(s[:3]) # 显示前3个子符 print(s[::-1]) # 对于字符串倒序输出; print(s[1:]) # 除了第一个子符之外, 其他全部显示; # 重复 print(s*10) # 连接 print("hello "+"world") # 成员操作符 s = "hello", in, not in print('he' in s) print('a' in s) print('he' not in s)
****字符串的开头和结尾****
s = "hello.python" print(s.endswith('thon'))#打印s是否以thon结尾 print(s.startswith('hel')#打印s是否以hel开头
****字符串的类型判断****
#"str".isdigit (是否全为数字)
#"str".isupper (是否全为大写字母)
#"str".isalpha (是否全为字母)
#"str".islower (是否全为小写字母)
#"str".islanum (是否全为数字和字母)
#"str".istitle (是否首字母为大写,其余全为小写)
****字符串的搜索与替换****
s = "hello world hello" print(s.find("hello")) print(s.find("world"))# find找到子串,并返回最小的索引值; print(s.rfind("hello"))# find找到子串,并返回最大的索引值; print(s.replace("hello", "westos"))# 替换字符串中所有的“hello”为"westos"
****删除不必要的空格****
str1="hello xiao peng you" print(str1.strip())#删除两边多余的空格 print(str1.lstrip())#删除左边多与的空格 print(str1.rstrip())#删除右边多余的空格 print(str1.replace(' ','')) #删除中间多余的空格
****对齐****
print('hello!python'.center(30,'*'))#居中对齐,用*补齐位置 print('hello!python'.ljust(30,'*'))#左对齐,用*补齐位置 print('hello!python'.rjust(30,'*'))#右对齐,用*补齐位置 print('{0} {1} {2} {1}'.format(3,2,3))#位置参数
****统计****
print("hello".count('l'))#打印hello中l的数量
****分离与连接****
str1='how are you' str2=str1.split(' ') print(str2)#用空格进行分离 print("/".join(str2))#用/进行连接
****内置方法****
#print(cmp('a', 'b'))#python2中比较大小,如果a<b,返回-1,如果a>b,返回1,如果a=b,返回0 for i,j in enumerate("hello"): print(i,j) s1 = "hello" s2 = "worldhs" for i in zip(s1, s2): print(i) print(len("hello"))
注:python3中没有cmp函数,要引入新的operator模块,返回的是bool值
operator.le(a,b) # a<b
operator.lt(a,b) # a<=b
operator.eq(a,b) # a=b
operator.ne(a,b)# a!=b
operator.gt(a,b) # a>b
operator.ge(a,b) # a>=b
作业题
********Test1********
第八题:
带循环和条件判断的给定一个数值num, 用户输入使用raw_input()函数来提示用户输入一个1和100之间的数,如果用户输入的数等于num, 显示成功并退出。否则显示一个错误信息然后再次提示用户输入数值,直到满足条件为止。
import random num = random.randint(1, 10)#随机生成一个1-10的数字(100基数太大,不好看到效果) while 1:#无限循环 num1 = int(raw_input('请输入一个1-10之内的数:')) if num1 == num: print '输入正确' break#正确,跳出循环 else: print '输入错误,重新输入'#错误,返回循环,直到正确后跳出
注:这里引入了一个生成随机数的random模块
第九题:
带文本菜单的程序写一个带文本菜单的程序,菜单项如下 (1) 取五个数的和 (2) 取五个数的平均 值 .... (X)退出。(exit()) 由用户做一个选择,然后执行相应的功能.当用户选择退出时程序结束。 这个程序的有用之处在于用户在功能之间切换不需要一遍一遍的重新启动你的脚本。
#输入数字 num1=float(input('请输入数字1:')) num2=float(input('请输入数字2:')) num3=float(input('请输入数字3:')) num4=float(input('请输入数字4:')) num5=float(input('请输入数字5:')) add=num1+num2+num3+num4+num5 avg=(num1+num2+num3+num4+num5)/5 mul=((num1-avg)**2+(num2-avg)**2+(num3-avg)**2+(num4-avg)**2+(num5-avg)**2)/5 #显示菜单 a='(1) 取五个数字的和' b='(2) 取五个数字的平均值' c='(3) 取五个数字的方差' d='(4) Exit' print('%s\n%s\n%s\n%s' %(a,b,c,d)) #用循环实现菜单切换 while 1: choose=int(input('请选择要执行的操作:')) if 0<choose<=4: if choose==1: print('结果:%d\n%s\n%s\n%s\n%s' %(add,a,b,c,d)) continue elif choose==2: print('结果:%d\n%s\n%s\n%s\n%s' % (avg,a,b,c, d)) continue elif choose==3: print('结果:%d\n%s\n%s\n%s\n%s' % (mul,a, b,c,d)) continue else: print('谢谢使用BYE!') break else: print('无该选择,请重新输入!')
第十题:
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
times = 0#计算次数 for i in range(1, 5):#第一个数循环 for j in range(1, 5):#第二个数循环 if j != i:#确保前两个数不一样 pass else: continue for k in range(1, 5):#第三个数循环 if k != j and k != i:#确保三个数都不一样 print('%d%d%d' % (i, j, k)) times += 1 else: continue print('总共有%s个不同的三位数' %(times))
必作第一题:
用户键盘输入一年份, 判断是否为闰年? - 如果是闰年, 则输出xxx是闰年; - 如果不是闰年, 则输出xxx不是闰年; 判断闰年的方法: 1). 能被4整除但不能被100整除; 2). 能被400整除;
year=int(input("请输入您要查询的年份:")) if (year%4==0 and year%100!=0) or year%400==0: print('%d年是闰年' %(year)) else: print ('%d年不是闰年' %(year))
必作第二题:
for循环嵌套:打印9*9乘法表
for i in range(1,10): for j in range(1,i+1): print("%d*%d=%d\t"%(j,i,i*j),end='') print()
注:print默认打印结束换行,python3中用end=''使其继续打印,python2中用 ,
必作第三题:
输入两个数,求这两个数的最大公约数和最小公倍数
num1=int(input("请输入\n数字1:")) num2=int(input('数字2:')) num3=min(num1,num2) for i in range(1,num3): if num1%i==0 and num2%i==0: comdivsor=i else: continue print('最大公约数为:%d' %(comdivsor)) commul=(num1*num2)/comdivsor print('最小公倍数为:%d' %(commul))
********Test2********
第一题:
企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
I = int(input('该员工当月营造利润:')) if I <= 100000: print('应得奖金:%.1f' % (I * 0.1)) elif 100000 < I <= 200000: print('应得奖金:%.1f' % ((I - 100000) * 0.075 + 10000)) elif 200000 < I <= 400000: print('应得奖金:%.1f' % ((I - 200000) * 0.05 + 17500)) elif 400000 < I <= 600000: print("应得奖金:%.1f" % ((I - 400000) * 0.03 + 27500)) elif 600000 < I <= 1000000: print("应得奖金:%.1f" % ((I - 600000) * 0.015 + 33500)) elif 1000000 < I: print("应得奖金:%.1f" % ((I - 400000) * 0.01 + 36500))
第二题:
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少
#假设出两个整数,在这里i,j的正负不影响结果 for i in range (9999): for j in range(9999): if j**2-i**2==168: print('这个数是:%d' %(i**2-100))
第三题:
> 给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格, 前后没有空格。 比如: (1) “hello xiao mi”-> “mi xiao hello” - 输入描述: > 输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符) - 输出描述: > 对于每个测试示例,要求输出句子中单词反转后形成的句子
print('输入GO开始翻译') print('请输入您想要翻译的句子:') str1 = [] while 1:#进行重复输入 user_in = input() if len(user_in) > 1000:#对每句进行字符数限制 print('输入格式错误') break else: if user_in != 'GO':#判断是否输出,若不是进行反转 user_in = user_in.strip()#删除左右多余空格 user_in = user_in.split(' ')#以空格为界线对句子进行分离 user_in = user_in[::-1]#反转 out = ' '.join(user_in)#用空格进行连接 str1.append(out)#将完成反转的句子保存到str1里 else: str1 = '\n'.join(str1)#用换行符对str1进行连接,保证每一个句子为一行 print('输出:\n%s' % (str1)) break
注:这里用到了.append(),它用于在列表末尾添加新的对象
第四题:
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。 例如,输入”They are students.”和”aeiou”, 则删除之后的第一个字符串变成”Thy r stdnts.” - 输入描述: 每个测试输入包含2个字符串 - 输出描述: 输出删除后的字符串
str1=input("请输入第一串字符:") str2=input('请输入第二串字符:') for i in str2: str1=str1.replace(i,'')#删除 print('结果:%s' %(str1))
第五题:
小易喜欢的单词具有以下特性: 1.单词每个字母都是大写字母 2.单词没有连续相等的字母 3.字符串中不包含AABB这样的子序列,子序列列可能不连续。 例如: 小易不喜欢"ABBA",因为这里有两个连续的'B' 小易不喜欢"THETXH",因为这里包含子序列"THTH" 小易喜欢"A","ABA"和"ABCBA"这些单词 给你一个单词,你要回答小易是否会喜欢这个单词。 - 输入描述: 输入为一个字符串,都由大写字母组成,长度小于100 - 输出描述: 如果小易喜欢输出"Likes",不喜欢输出"Dislikes"
str1 = input('输入:') l = len(str1) a = 0 #引入一个变量a if l > 100: print('输入格式错误')#判断字符数 elif str1.isupper():#判断是否为大写格式 for i in range(l - 1): if str1[i] == str1[i + 1]:#判断是否有相邻的字符相同 print("dislikes") break else: for j in range(i + 1, l - 1): if str1[i] == str1[j + 1]:#判断是否有不相邻的字符相同 for p in range(i + 1, l - 2): for k in range(i + 3, l - 1): if str1[p] == str1[k]:#判断不相邻的字符相同前提下,有没有别的字符相同 a = 1 print('dislikes') break else: pass if a == 1: break if a == 1: break if a == 1: break #连续跳出循环 else: print('likes') else: print('输入格式错误')