如果下面代碼有問題或者你有更好的實現方法歡迎與我私信~
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()