Python 入门习题

如果下面代码有问题或者你有更好的实现方法欢迎与我私信~

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;人体舒适度的判断标准为:

TemperatureC<18oC18oC<=C<=25oCC>25cC
Human Feelcoldnicehot

要求:①程序既能接受摄氏温度的摄入,也能接受华氏温度的输入,且对大小写不敏感(如18C,86f);
②程序能够判断输入温度的合法性(通常介于-30oC至50oC之间),否则,提示用户重新输入;
③温度转化后的结果保留一位小数(round(x,n)可以返回浮点数x的四舍五入的值,n为精度)。
测试样例

输入-17C66f55ca9C
输出Fahrenheit temp is 1.4F Human feels coldCelsius temp is 18.9C Human feels niceAbnormal temperature! please try againInvalid 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()
  • 8
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值