如果下面代码有问题或者你有更好的实现方法欢迎与我私信~
1、输入一个字符串,内容是带小数的实数,例如"123.45",输出是两个整数变量x和y,x是整数部分123,y是小数部分45。你可以用split函数完成。
str =input()
L=str.split(".") #此函数可以将输入的小数部分的.符号最后消除,并用,号代替分割整数和小数
L=[int(e) for e in L] #分割后依旧是字符串形式,需要将字符串转化为数值
print(L[0])
print(L[1])
2、写Python程序find(s,x)来完成s.find()函数的基本功能。计算x字符串在s字符串中出现的开始位置。x没有在s出现的话,传回-1。
def find(s,x):
L=list(s)#将字符串转化为列表
i=0
for a in L:#遍历在列表L中的元素
if(a==x): #寻找有没有在列表元素中出现的元素x
return i #如果存在,就返回位置i,这里的位置i是从0计数
i=i+1 #如果不存在相当于else,继续循环下去
return -1 #for循环结束后,如果不满足条件,最后返回-1
print(find("hello",'e'))
运行结果
1
一定注意,同一层次的语句必须要有相同的缩进,一点都不能不同!!
3、在find()的基础上,写Python程序来完成replace(s,old,new)函数的功能,将所有在s中出现的old字符串转换成new字符串。
4、在find()的基础上,写Python程序来完成count(s,x)函数的基本功能,计算所有在s中出现的x字符串的个数。注意:计算出现的个数每一个字符不能重复计算。例如:s=“222222”,count(s,“222”)是2,不是4。
def count(s,x): #定义函数
if s.find(x) == -1: #寻找s字符串中是否存在x,若果没有没有存在,函数返回-1的值
return 0 #不存在x的字符串,则count函数返回0,即x出现次数为0
L = s.split(x) #如果存在,则用split函数将分割x,然后以字符串形式用逗号隔开以列表形式存在
#这里L=["222","222"]
return len(L)-1 #
i = count("222222","222")
print(i)
显示IndentationError:unindent dose not match any outer indentation level
出现这种问题,一般都是因为没有缩进导致的问题。使用文本编辑器notepad++显示代码或者打开脚本文件,在菜单栏中选择视图->显示符号->显示空格与制表符。可以查看问题所在,是不是制表符tab与空格space混用导致运行出现的问题
5、给出一个python程序片段,用for循环,用print语句输出1到100的奇数
for i in range(101):
if i%2!=0:
print(i)
或者
n=0
while n<100:
n=n+1
if n%2==0:
continue #continue语句会直接继续下一轮循环,后面的print()语句不会执行
print(n)
6、编写Python程序,求出10到100之间不能被3整除,又不能被7整除的所有整数
n=9
while n>=9 and n<100:
n=n+1
if n%3==0 or n%7==0:
continue
print(n)
7、编写Python程序,计算一个任意位数的整数的各位数字之和。例如,输入12345,程序计算显示1+2+3+4+5的值
num=int(input())
sum=0
while num>0:
m=num%10
sum=sum+m
num=num//10
print(sum)
这段正确代码之前,编译出现问题,num=input()
当我输入数字时,报错:TypeError:’>'not supported between instances of ‘str’ and ‘int’ ,报错原因:input()
输入的内容是一个字符串,字符串跟整数型值比较,类型不匹配,故要输入数字时,应该改为int(input())
注意还有个问题,这里数字整除的符号用的//
这里与传统的C语言、Java、C++方法不一样,它们的整除符号是/
,我在Python的运行环境里面,使用/
得出来的结果是小数,比如4.5/2
结果是2.25而不是我想象中的2。在Python的环境中/
保留了小数,无论操作数是整数还是浮点数,结果总是浮点数,所以在Python3.0环境中,整除的符号用//
8、设sum=0!+1!+…+n!,编写Python程序,求当n为何值时,sum的十进制表示超过20位
def jie(n): #计算阶乘和函数
x=1
sum=1
for i in range(1,n+1): #注意这里的范围是从1到n,左闭右开
x=x*i
sum=sum+x #sum初始值是1,因为0的阶乘是1,若在range里面一开始左范围是0会导致0的阶乘计算结果是0,错误
return sum
def wei(sum):#计算位数个数的函数
cnt=0
while sum>0:
sum=sum//10 #整除运算,得到整数结果
cnt=cnt+1
return cnt
n=0
sum=0
while n>=0:
sum=jie(n)
count=wei(sum)
if(count>=20):
print(n)
break
n=n+1
21
9、编写Python程序,根据用户的输入的整数n,列出斐波拉契数列的前n项,并求出前n项的和。其中,斐波拉契数列的前n项通项为Fn=Fn+1+Fn+2(n>=2),其中F0=0,F1=1;
要求:程序能够判定n的合法性(n应该是一个正整数),否则,提示用户重新输入
提示:尽量避免使用递归实现,若无法避免,建议测试时选择n<30
这里补充斐波拉契数列的两种写法
循环写法
#循环写法
a,b=0,1
list1=[0,1]#这里是第一项和第二项
n=int(input())#输入需要添加的项数
for i in range(n):
a,b=b,a+b
list1.append(b)#在列表后面添加n个元素,则新列表有n+2个元素在内
print(list1)
或
def Fib(n):
f,f1,f2=0,0,1
for i in range(0,n-1):
f=f1+f2
f1=f2
f2=f
return f2
num=int(input())
print(Fib(num))
递归写法
#递归写法,从第0项开始
def Fib(n):
if n==0:
return 0
if n==1:
return 1
if n>1:
return Fib(n-1)+Fib(n-2)
num=int(input())
print(Fib(num))
循环写法与递归写法比较,递归写法时间复杂度是2^n,循环写法时间复杂度n-1,循环写法的效率更高
程序源代码
f0,f1=0,1
sum=0
list1=[0,1]#这里是第一项和第二项
n=int(input())#输入需要添加的项数
for i in range(n-2):
f0,f1=f1,f0+f1
list1.append(f1)#在列表后面添加n-2个元素,则新列表有n个元素在内
print(list1)
for i in list1:
sum=sum+i
print("Sum of Fib=",sum)
10、猜数字游戏。预设一个0~9之间的整数,让用户猜一猜并输入所猜的数字,如果大于预设的数,显示“太大”;小于预设的数字,显示“太小”,如此循环,直至猜中该数,显示“恭喜!你猜中了!”
num=7
while True:
guess=int(input("请输入你猜的数字(0~9):"))
if guess==num:
print("恭喜!你猜中了!")
break
elif guess>num:
print("太大")
else:
print("太小")
while True 语句的核心思想:如果出现错误的话,可以继续循环
12、编写Python程序,实现摄氏温度与华氏温度的相互转换,并根据输入判断人体的舒适度。其中。摄氏温度C与华氏温度F的转换公式为:F=1.8C+32;人体舒适度的判断标准为:
Temperature |
C<18oC |
18oC<=C<=25oC |
C>25cC |
Human Feel |
cold |
nice |
hot |
要求:①程序既能接受摄氏温度的摄入,也能接受华氏温度的输入,且对大小写不敏感(如18C,86f);
②程序能够判断输入温度的合法性(通常介于-30oC至50oC之间),否则,提示用户重新输入;
③温度转化后的结果保留一位小数(round(x,n)可以返回浮点数x的四舍五入的值,n为精度)。
测试样例
输入 |
-17C |
66f |
55c |
a9C |
输出 |
Fahrenheit temp is 1.4F Human feels cold |
Celsius temp is 18.9C Human feels nice |
Abnormal temperature! please try again |
Invalid input! Please try again |
问题解决分析
先来写一段温度转换代码
while True:
temp=input("请输入温度:")
#使用保留字判断一个元素是否在列表中
if temp[-1] in ['F','f']: #temp[-1]字符串索引,获取temp字符串倒数第一个字符,即判断输入是华氏还是摄氏
C=(eval(temp[0:-1])-32)/1.8 #temp[0:-1]字符串切片,获取temp字符串从0但不到倒数第一个字符的字符串,相当于把字符串最后一个字符串去掉
print("华氏温度转换摄氏温度后的温度是{:.2f}C".format(C))
break
elif temp[-1] in ['C','c']:
F=1.8*eval(temp[0:-1])+32
print("摄氏温度转换华氏温度后的温度是{:.2f}F".format(F))
break
else :
print("输入有问题!")
这里print("华氏温度转换摄氏温度后的温度是{:.2f}C".format(C))
, { }
表示槽,后续变量填充到槽中,{:.2f}
表示将变量C填充到这个位置时取小数点后2位(注意这里不是四舍五入,是舍弃后面的小数)
评估函数eval() 去掉参数最外侧引号并执行余下语句的函数
这几段代码有点运行问题
>>>eval("1")
1
>>>eval("1+2")
2
>>>eval('"1+2"')
1+2
>>>eval('print("hello")')
hello
对于输入字符串处理,要求输入合法数据,由数字+字母组成,这里讨论在关键字母前数字输入问题。函数str.isdigit()
无参数,判断字符串str是否是数字,但在运行过程中,发现输入正整数的结果是True,但是若输入负数、小数就不行。使用函数isinstance(a,int)
,用法是判断一个量是否是相应的类型,比如
a=1
print(isinstance(a,int))
print(isinstance(a,float))
返回 True False
def func(z):
try:
z=float(z) #强制将传入的参数(数字字符串)转换成float类型
return isinstance(z,float)
except ValueError:
return False
temp=input("请输入温度:")
p=func(temp[0:-1])
print(p)
程序源代码,这里我采用的是循环输入数据进行测试,但是还有个细节问题,我是想实现错误的时候继续重新输入,但输入正确时有了结果不会继续接下来的输入了,这里还未解决,有时间好好想想。
def func(z):
try:
z=float(z) #强制将传入的参数(数字字符串)转换成float类型
return isinstance(z,float)
except ValueError:
return False
while True:
temp=input("请输入温度:")
p=func(temp[0:-1])
#使用保留字判断一个元素是否在列表中
if temp[-1] in ['F','f'] and p: #temp[-1]字符串索引,获取temp字符串倒数第一个字符,即判断输入是华氏还是摄氏
C=(eval(temp[0:-1])-32)/1.8 #temp[0:-1]字符串切片,获取temp字符串从0但不到倒数第一个字符的字符串,相当于把字符串最后一个字符串去掉
print("华氏转摄氏后的温度是{:.1f}C".format(C))
if C<18:
print("Human feels cold")
elif C>=18 and C<=25:
print("Human feels nice")
else:
print("Human feels hot")
elif temp[-1] in ['C','c'] and p:
while True:
if eval(temp[0:-1])>=-30 and eval(temp[0:-1])<=50:
F=1.8*eval(temp[0:-1])+32
print("摄氏转华氏后的温度是{:.1f}F".format(F))
if eval(temp[0:-1])<18:
print("Human feels cold")
elif eval(temp[0:-1])>=18 and eval(temp[0:-1])<=25:
print("Human feels nice")
else:
print("Human feels hot")
break
else :
print("Abnormal temperature! Please try again.")
break
else:
print("Invalid input! Please try again.")
2019年9月1日更新算法
def func(z):
try:
z=float(z) #强制将传入的参数(数字字符串)转换成float类型
return isinstance(z,float)
except ValueError:
return False
while True:
temp=input("请输入温度:")
p=func(temp[0:-1])#判断最后字符前的字符串是否为数据类型
#使用保留字判断一个元素是否在列表中
if temp[-1] in ['F','f'] and p: #temp[-1]字符串索引,获取temp字符串倒数第一个字符,即判断输入是华氏还是摄氏
C=(eval(temp[0:-1])-32)/1.8 #temp[0:-1]字符串切片,获取temp字符串从0但不到倒数第一个字符的字符串,相当于把字符串最后一个字符串去掉
print("华氏转摄氏后的温度是{:.1f}C".format(C))
if C<18:
print("Human feels cold")
break
elif C>=18 and C<=25:
print("Human feels nice")
break
else:
print("Human feels hot")
break
elif temp[-1] in ['C','c'] and p:
while True:
if eval(temp[0:-1])>=-30 and eval(temp[0:-1])<=50:
F=1.8*eval(temp[0:-1])+32
print("摄氏转华氏后的温度是{:.1f}F".format(F))
if eval(temp[0:-1])<18:
print("Human feels cold")
elif eval(temp[0:-1])>=18 and eval(temp[0:-1])<=25:
print("Human feels nice")
else:
print("Human feels hot")
break
else :
print("Abnormal temperature! Please try again.")
break
break
else:
print("Invalid input! Please try again.")
这次能实现输入数据合法时得到程序运行结果能够按任意键退出。当输入数据不合法时,能够提示数据不合法的原因并同时让用户重新输入,直到用户输入合法的数据时才能任意键退出。
11、编写Python程序,实现八进制到二进制的转换,其中,程序只能接受正整数和负整数(小数、非八进制数、0均为非法输入),输出的二进制数的最高位为符号位(正数为0,负数为1)
进制 |
描述 |
二进制 |
进位规则: 逢二进一 ;借位规则:借一当二;只能用0和1来表示 |
八进制 |
采用0,1,2,3,4,5,6,7八个数字,逢8进1 |
十六进制 |
逢16进1,一般用数字0到9和字母A到F表示,其中A~ F表示10~15 |
问题分析:程序只能接受正整数和负整数,这里有一个判断,判断控制台输入是否为整数(正整数、负整数),小数、非八进制数、0为非法输入,如果控制台输入非法数据,提示重新输入。
①二进制转八进制
从小数点开始,整数部分向左,小数部分向右,每3位为一组用一位八进制数的数字表示,不足3位的要用‘0’补足3位,就得到一个八进制数。
②八进制转二进制
把每一个八进制数转换成3位的二进制数,得到一个二进制数
八进制与二进制数字对应关系如下
000->0
001->1
010->2
011->3
100->4
101->5
110->6
111->7
③如果按照以上两点的思路一个一个来转换我觉得不太现实(最主要是偷懒哈哈哈),不知道库函数有没有相应的转换函数,或者间接转换也行。好像也只能间接转换了。
num='101'
num=int(num,2)
print(num)
以上结果是二进制转十进制,int()函数,是将其他进制的数字转换成十进制的数字,其中int()函数传入的第一个参数是需要转换的其他进制的字符串形式的数字(在这段代码正确以前,我写过num=101,101两边加分号表示它是一个字符串,而此时系统报错:int() cant’t convert non-string with explict base。)第二个参数是第一个参数的进制数,也就是说第一个参数传的是多少进制的数字第二个参数就传多少个(例如这里传入的是二进制的数字字符串,这里参数为2),数据类型类型为数字类型。
有了这个函数,可以考虑是否可以先将题中的八进制数转成十进制数,再将其十进制数转换成二进制数
④bin()函数:将十进制的数字转换成二进制的数字。传入的是十进制的数字,数据类型为数字类型。
oct()函数: 是将十进制的数字转换成八进制的数字。传入的是十进制的数字,数据类型为数字类型。
hex()函数:将十进制的数字转换成十六进制的数字。传入的是十进制的数字,数据类型为数字类型。
八进制转二进制的代码如下
num1=input("请输入一个八进制的数字:")
num2=int(num1,8)#把输入的字符串形式的八进制数字num1转换成十进制数字
print("八进制数转换成二进制之后的数字是:",bin(num2))
以上代码出了点问题,运算出来的结果含有b,在计算机网页在现转换说是非法数据。。。
如果从间接转换的思路不直接用函数,二是自己写函数的方法:
二进制转十进制
整数:1101101012=1×28+1×27+0×26+1×25+1×24+0×23+1×22+0×21+1×20
=256+128+32+16+4+1=43710
带有小数:1010.11012= 1×23 + 0×22+ 1×21+ 0×20 + 1×2-1 + 1×2-2 + 0×2-3 + 1×2-4
= 10.812510
#二进制转十进制
b=input("请输入二进制数字:")
sum=0
for i in range(0,len(b)):
if b[i]=='1':
num=2**(len(b)-i-1)#这里2**n是实现计算2的n次方
#这里指数运算在循环进行了很多次
sum=sum+num
print(sum)
以上算法中,计算机执行指数运算往往比单纯的加减乘除法运算复杂地多,更加费时,需要改进。
#改进后的二进制转十进制代码
#这里指数运算只需要进行一次
b=input("请输入二进制数字:")
num=2**(len(b)-1)
sum=0
for i in range(0,len(b)):
if b[i]=='1':
sum=sum+num
num=num//2#整除,得到整数
print(sum)
十进制转二进制
num=int(input("请输入十进制数字:"))
l=[];#建立列表
while(num!=0):
s=num%2 #取余1或0
num=num//2 #取整
l=[s]+l #把[s]作为一个列表元素加入列表l的头部
for i in range(0,len(l)):
print(l[i],end='')
八进制转十进制
整数:536278=5×84+3×83+6×82+2×81+7×80
=2242310
带有小数:423.51768=4×82+2×81+3×80+5×8-1+1×8-2+7×8-3+6×8-4
=275.6557617187510
b=input("请输入8进制数字:")
sum=0
for i in range(0,len(b)):
num=int(b[i])*(8**(len(b)-i-1))#这里8**n是实现计算8的n次方
#这里指数运算在循环进行了很多次
sum=sum+num
print(sum)
与二进制转十进制一样,存在指数运算导致程序运行费时所以修改新的代码
#改进后的八进制转十进制代码
#这里指数运算只需要进行一次
b=input("请输入八进制数字:")
num=8**(len(b)-1)
sum=0
for i in range(0,len(b)):
sum=sum+num*int(b[i])
num=num//8#整除,得到整数
print(sum)
八进制转二进制的源代码
#八进制转二进制
#先把八进制转为十进制,再将十进制转化为二进制
def bzs(b):
#定义八进制转十进制的函数,传入参数是数字字符串
sum=0
for i in range(0,len(b)):
num=int(b[i])*(8**(len(b)-i-1))#这里8**n是实现计算8的n次方
#这里指数运算在循环进行了很多次
sum=sum+num
return sum
def sze(num):
#定义十进制转二进制的函数,传入参数是数字,不是数字字符串
l=[];#建立列表
while(num!=0):
s=num%2 #取余1或0
num=num//2 #取整
l=[s]+l #把[s]作为一个列表元素加入列表l的头部
for i in range(0,len(l)):
print(l[i],end='')
num1=(input("请输入八进制数字:"))
num2=bzs(num1)#这里num2等于八进制转换成十进制后的数字,数据类型为数字类型而非字符串类型
sze(num2)#调用十进制转二进制函数,输出最后二进制结果
13、使用Python语言编写递归函数,实现十进制数到R进制的转换,且2<=R<10
进制 |
数字表示 |
二进制 |
0、1 |
八进制 |
0,1,2,3,4,5,6,7 |
十六进制 |
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F |
def jz(n,x):#n为待转换的十进制数字,x为进制,取值范围在2-10
a=[0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F'] #进制表示的所有数字类型
b=[] #创建一个列表
while True:
s=n//x #整除取商
y=n%x #取余
b=b+[y] #将余数存入列表表尾
if s==0:
break #一直整除,直到最后商为0时才结束
n=s #每次整除取商取余后,将商的值赋给s,继续下一次整除取商取余
b.reverse() #反转列表b中的所有元素
for i in b: #遍历列表b中的所有元素(这里是余数的逆序排列)
print(a[i],end='') #下标对应的相应的进制转换数字
number=input()#输入字符串
L=number.split(',')#将字符串分割,形成列表
jz(int(L[0]),int(L[1]))#将列表中的元素强制转换成int型,传入函数中
输入5,2的字符串,分割字符串形成列表[‘5’,‘2’]
101
14、完成merge(L1,L2)函数:输入参数是两个从小到大排好序的整数列表L1和L2,返回合成后的从小到大排好序的大列表X,如merge([1,4,5],[2,7])会返回[1,2,4,5,7],merge([],[2,3,4])会返回[2,3,4]
def merge(L1,L2):
L=[]
L.extend(L1)
L.extend(L2)
L.sort()
return L
print(merge([1,4,5],[2,7]))
print(merge([],[4,3,2]))
法2
def merge(L1,L2):
L=[]
L.extend(L1)
L.extend(L2)
L.sort()
return L
L1=[]
L2=[]
str1=input("请输入L1:")
L1=str1.split(',')
L1=list(map(int,L1)) #将数字字符转化为数字
str2=input("请输入L2:")
L2=str2.split(',')
L2=list(map(int,L2))
print(merge(L1,L2))
补充:将列表的字符串转为数字
目的:L1=[‘1’,‘2’,‘3’,‘4’,‘5’]转化成L1=[1,2,3,4,5]
法①基础循环
L2=[]
for i in L1:
L2.append(int(i))
L1=L2
print(L1) #[1,2,3,4]
法②简单循环
L1=['1','2','3','4']
L1=[int(i) for i in L1]
print(L1) #[1,2,3,4]
法③Python 3.x 使用map函数,返回map对象,转换为list
L1=['1','2','3','4']
L1=list(map(int,L1))
print(L1) #[1,2,3,4]
15、从键盘接收十行输入(使用input),然后将输入保存到文件中。(提示:由于input()不会保留用户输入的换行符,调用write()方法时必须加上换行符。)
file = open("test.txt","a+")
s = ""
for i in range(0,10):
s = input()
s+="\n"
file.write(s)
file.close()
16、假设一篇英文文章存储在文件paper.txt中,请统计每个单词在文章中出现的次数并且对其进行排序。
注意字符串包含‘\u200b’的Unicode编码,单独打印出来是一个空格,且占一个长度,删除时用replace方法
思路:对于英文原文的文章,一般都是空格分开单词,或者逗号和点号隔开句子,要想办法处理这些特殊符号使其不成为干扰判断单词的障碍,就要把这些特殊符号替换掉,这里使用replace函数。将单词分割存储在列表中,使用split方法;要统计单词个数,遍历判断,这里需要用到字典,值与关键值之间的对应可以表示出其出现的次数。
原文
we are meant for each other,monkey and lion,
we will stand on the mountain together.
f=open('test.txt',"r",encoding='utf8')
readlines=f.read()
f.close()
list=[]
word=[]
words=''
wo=''
for line in readlines:
words=line.replace(',',' ')
words=words.replace('.','')
words=words.replace('\u200b','')
wo+=words
list=wo.split()
dir={}
#双重for循环遍历列表,寻找相等的单词
for i in range(len(list)):
dir[list[i]]=0 #字典初始值为0
for j in range(len(list)):
if list[i]==list[j]:
dir[list[i]]+=1
print(dir)
注意在open打开文件txt之后,执行程序完毕前一定要使用close将其关闭,即f.close()。原因:写文件操作时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲时再慢慢写入。当调用close方法时,操作系统才保证把没有写入的数据全部写入磁盘,若没有调用close方法,后果可能是只写了一部分数据到磁盘,剩下未写入的将会丢失,也可能写入的数据全部在缓存区丢失。
也可以不用close方法,使用with open() as
语句关闭文件
功能:当文件读写完成后,会自动帮我们调用close方法
建议:多用with open语句,少用open语句
#使用open语句
f=open('test.txt','r',encoding='utf8')
f.close()
#使用with open()语句
with open('test.txt','r',encoding='utf8') as f:
print(f.read())
这里补充python read、readline、readlines以及读取大文件的方法
read()方法:以原格式返回全部文本
readline()方法:只返回第一行文本
readlines()方法:以列表的格式返回全部文本
二进制文件:上面读取的文本都是文本文件,并且是utf-8编码的文本文件。若要读取二进制文件,如图片、视频等,使用‘rb’模式打开文件
模式 |
描述 |
r |
只读,文件指针放于文件开头,默认模式 |
r+ |
读写,文件指针放于文件开头 |
rb |
二进制格式只读,文件指针放于文件开头,默认模式 |
rb+ |
二进制格式读写,文件指针放于文件开头 |
w |
只写,若该文件已存在则覆盖,若不存在则创建新文件 |
w+ |
读写,若该文件已存在则覆盖,若不存在则创建新文件 |
wb |
二进制格式只写,若该文件已存在则覆盖,若不存在则创建新文件 |
wb+ |
二进制格式读写,若该文件已存在则覆盖,若不存在则创建新文件 |
a |
追加,若文件存在则指针放于文件结尾,即新的内容写入到已有的内容以后,若该文件不存在则创建新的文件进行写入 |
a+ |
读写的追加,若文件存在则指针放于文件结尾,若不存在则创建新的文件读写 |
ab |
二进制格式追加读写,若文件存在则指针放于文件结尾,即新的内容写入到已有的内容以后,若该文件不存在则创建新的文件进行写入 |
ab+ |
二进制追加,文件指针放于文件结尾,若该不存在,创建新文件用于读写 |
15、编写Python程序,实现下述两个功能:
a.程序能将九九乘法表按下图格式写入文件try.txt;
b.程序能将文件try.txt中的内容读出,并将奇数行和偶数行分别存入文件o.txt和文件e.txt。提示:制表符为\t,换行符为\n,乘号可以使用x代替
①打印九九乘法表
#打印九九乘法表
for i in range(1,10):
#控制行数,从1-9行,共9行
for j in range(1,i+1):
#控制列数,从1列开始递增,直到9列
print("%d×%d=%d"%(j,i,j*i),end=' ')#end=' '表示不换行
print(' ')
或者
for i in range(1,10): #控制行数
for j in range(1,i+1): #控制每行打印几个表达式
print (str(j)+"x"+str(i)+"="+str(i*j)+'\t',end='')
print ('\n')#结束换行
在编译第二个代码时候,我的print代码是这样的print(j+"x"+i+"="+i*j+'\t',end='')
,这时候程序报错:unsupported operand type(s) for +:‘int’ and ‘str’。因为在这里是字符串类型进行连接(有+号,还有×号、=号),而j、i是int型数据,直接用+号将它们连接起来会报错
解决办法
int转成string,函数str(number)
string转成int,函数int(string)
接下来,把九九乘法表写入文件中的代码,实现要求a
file =open("houzi.txt","a+")#打开houzi文件用于追加,文件指针会放在文件结尾
s=""#初始化字符串,使其为空
for i in range(1,10): #控制行数
for j in range(1,i+1): #控制列数
s=str(j)+"x"+str(i)+"="+str(i*j)+'\t'
file.write(s)# 传递参数字符串s写入到已打开的文件中
file.write('\n')#每一行输入完后,在其后面加换行符
file.close()#关闭文件
接下来实现将houzi.txt中的九九乘法表按奇数行和偶数行分别存入paper1.txt和paper2.txt中
以下是该题程序完整代码
file =open("houzi.txt","a+")#打开houzi文件用于追加,文件指针会放在文件结尾
s=""#初始化字符串,使其为空
for i in range(1,10): #控制行数
for j in range(1,i+1): #控制列数
s=str(j)+"x"+str(i)+"="+str(i*j)+'\t'
file.write(s)# 传递参数字符串s写入到已打开的文件中
file.write('\n')
file.close()#关闭文件
file =open("houzi.txt","r+")#打开houzi文件用于追加,文件指针会放在文件结尾
file1=open("paper1.txt","w+")
file2=open("paper2.txt","w+")
for i in range(1,10):
s=file.readline()
if i%2==0: #如果是偶数
file1.write(s)
else:
file2.write(s)
file.close()#关闭文件
file1.close()
file2.close()