Python 入门习题

2023-11-10

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

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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 入门习题 的相关文章

  • Python BigQuery 存储。并行读取多个流

    我有以下玩具代码 import pandas as pd from google cloud import bigquery storage v1beta1 import os import google auth os environ G
  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 导入错误:没有名为 _ssl 的模块

    带 Python 2 7 的 Ubuntu Maverick 我不知道如何解决以下导入错误 gt gt gt import ssl Traceback most recent call last File
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • feedparser 在脚本运行期间失败,但无法在交互式 python 控制台中重现

    当我运行 eclipse 或在 iPython 中运行脚本时 它失败了 ascii codec can t decode byte 0xe2 in position 32 ordinal not in range 128 我不知道为什么 但
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • 如何将 numpy.matrix 提高到非整数幂?

    The 运算符为numpy matrix不支持非整数幂 gt gt gt m matrix 1 0 0 5 0 5 gt gt gt m 2 5 TypeError exponent must be an integer 我想要的是 oct
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql

随机推荐

  • 关于CPU的浮点运算能力计算

    原文链接 https www jianshu com p b9d7126b08cc Intel官方参数 https ark intel com FLOAS 核数 单核主频 CPU单个周期浮点计算值
  • 从头开始学Java——JVM虚拟机八问

    文章目录 什么是Java虚拟机 为什么Java被称为 平台无关的编程语言 什么是JIT HotSpot怎么工作的 HotSpot虚拟机要使用解释器与编译器并存的架构 什么是编译时 运行时 编译 运行 编译时运行时问题归纳 反射 描述Java
  • 解决node-sass: Command failed 问题

    从github 下载的vue 源码 yarn 安装报错 爬了下百度 试了好几种方法都没成功 最后ChatGPT帮我解决了 ChatGPT回答 一语命中 好用 node sass 是一个将 Sass 编译为 CSS 的 Node js 模块
  • 关于springboot使用定时器的几种方式

    1 Scheduled注解 Component public class SimpleSchedule private Integer time 0 定时器定义 设置执行时间 Scheduled cron 6 private void pr
  • maven -- 问题解决(二)解决“Could not calculate build plan”问题

    错误提示如下 eclipse maven Could not calculate build plan Failure to transfer org apache maven plugins maven surefire plugin p
  • disabled_button

    直接看题目 然后干他 这里说flag在按钮上 但是我们就是按不了这个flag 那直接看HTML呗 可以看到它这里有个搞鬼的东东 一搜 可以知道这个东西禁止让你输入 你不让我输入 我就给你删了呗 然后我们可以点flag 一点 flag就出来了
  • 关于漏洞"这个页面包含一个错误/警告信息,可能会导致敏感信息泄露"

    公司开发的产品 在用软件扫描漏洞时 扫出了这么一个漏洞 可以看出有漏洞的地方是登录页面 在登录中 主要逻辑如下 一些拒绝登录是通过抛异常 gt 然后捕获异常 gt 获取异常信息 gt 跳回到登录页面并展示错误信息 下面为代码示例 Requs
  • 如何获取 docker 容器(container)的 ip 地址

    1 进入容器内部后 lcc lcc docker exec it docker mysql bash root b3b1d61142df root b3b1d61142df cat etc hosts 127 0 0 1 localhost
  • Hive 是怎样保存元数据的

    保存元数据的方式有 内存数据库derby 本地mysql数据库 远程mysql数据库 本地的mysql数据库用的比较多 因为本地读写速度都比较快 内存数据库derby 安装小 但是数据存在内存 不稳定 mysql数据库 数据存储模式可以自己
  • React 中的元素、组件、实例和节点

    React 元素其实就是一个简单JavaScript对象 一个React 元素和界面上的一部分DOM对应 描述了这部分DOM的结构及渲染效果 一般我们通过JSX语法创建React 元素 React 元素可以分为两类 DOM类型的元素和组件类
  • Java常用API

    文章目录 1 API 1 1 API概述 帮助文档的使用 1 2 键盘录入字符串 2 String类 2 1 String概述 2 2 String类的构造方法 2 3 创建字符串对象的区别对比 2 4 字符串的比较 2 5 String方
  • Docker常用镜像命令

    帮助命令 查看docker版本 docker version 对docker信息的描述 docker info docker的帮助命令 docker help 详解 docker OPTIONS COMMAND docker的命令公式 镜像
  • Text to image论文精读MISE:多模态图像合成和编辑Multimodal Image Synthesis and Editing: A Survey

    由于信息在现实世界中以各种形式存在 多模态信息之间的有效交互和融合对于计算机视觉和深度学习研究中多模态数据的创建和感知起着关键作用 近期 OpenAI 发布的 DALLE 2 和谷歌发布的 Imagen 等实现了令人惊叹的文字到图像的生成效
  • 「经验分享」一款PCB电路板设计要经历哪些流程?

    一款PCB电路板设计主要包括明确产品需求 硬件系统设计 器件选型 PCB绘制 PCB生产打样 焊接调试等步骤 那么这些步骤都有哪些需要注意点呢 小编带你细品 一定要细品 一 明确需求 在一个硬件设计之初 首先要做的是明确产品的需求 这里主要
  • BMP文件格式详解(BMP file format)

    BMP文件格式 又称为Bitmap 位图 或是DIB Device Independent Device 设备无关位图 是Windows系统中广泛使用的图像文件格式 由于它可以不作任何变换地保存图像像素域的数据 因此成为我们取得RAW数据的
  • 【SIMULINK】基于DQ0模型的三相异步电机自制仿真模型教程

    SIMULINK 基于DQ0模型的三相异步电机自制仿真模型 其实 打开simscape自带的异步电机模型 里面也是基于DQ0的 电机的模型定子电压作为输入 定子电流是输出 内部结构 omega 1 是DQ坐标系的转速 为0时退化为 alph
  • 计算机是人类的好伴侣 作文,书是我们的好伴侣_我和书的故事作文

    书 大家是并不陌生的 它会让人陶醉享受 也会使人沉迷于此 总得来说 书 是我们的好伴侣 不管是休闲娱乐 还是读后写作都少不了它 说到我喜欢的书 我还是算得上是个小小小的 书迷 但是我最喜欢沈石溪所写的动物小说 内容精彩而又丰富 把这所有的动
  • Android性能分析和优化之traces.txt(ANR分析)

    ANR 类型分类 1 KeyDispatchTimeout 5 seconds 主要类型按键或触摸事件在特定时间内无响应 按键或者触摸引起的ANR的时间定于是在AMS中 static final int KEY DISPATCHING TI
  • C语言——文件操作

    C语言文件操作 使用文件的原因 文件 程序文件 数据文件 文件名 文件的打开和关闭 文件指针 文件的打开和关闭 文件的顺序读写 文件的随机读写 fseek ftell rewind 文本文件和二进制文件 文件读取结束的判定 文件缓冲区 使用
  • Python 入门习题

    如果下面代码有问题或者你有更好的实现方法欢迎与我私信 1 输入一个字符串 内容是带小数的实数 例如 123 45 输出是两个整数变量x和y x是整数部分123 y是小数部分45 你可以用split函数完成 str input L str s