python和C语言基础入门练习题

python和C语言基础入门练习题

  • python
    • 找两列表相同的元素,排序输出
    • 找出回文字符串
    • 每N个元素地分割列表L,N为步长
    • 去掉数字前面的0
    • 交换字符串的前n位
    • 根据列表里字符串长度排序
    • 把下标为偶数的字符去掉,再把剩下字符的ASC码值加起来
    • 排序
    • 写文件
    • 读文件目录
    • 对文件内容作出更改
  • C语言
    • 打印数字互不相同的三位数

python

找两列表相同的元素,排序输出

def common_items(L1, L2):
    l=[]
    #找出重复的
    for x in L1:
        if x in L2 and x not in l:
            l.append(x)
    #排序
    list.sort(l)
    return l

a=[1,90,3,21,34,31,3,9,11,23,9]
b=[3,31,90,6,11]
print(common_items(a, b))
a=['good','good','Level','are']
b=['We','are','good','Do','the','job','See','you','are']
print(common_items(a, b))

[3, 11, 31, 90]
[‘are’, ‘good’]

找出回文字符串

def find_palindromes(L):
    l=[]
    for x in L:
      a=len(x)
      for i in range(0,a):
        if x[i]!=x[-(i+1)]:
            break
      if i==a-1:
        l.append(x)
    return l
list2=['excellent','are','anna','good','level','91019','reviver','10051','91819', 'madam']
print(find_palindromes(list2))

[‘anna’, ‘level’, ‘91019’, ‘reviver’, ‘91819’, ‘madam’]

每N个元素地分割列表L,N为步长

import math
def slice_by_step(L, N):
    n=math.ceil(len(L)/N)#列数
    #list1=[['']*n for i in range(N)]#N*n的0二维列表(这里区分浅copy和深copy)
    list2=[];
    for i in range(0,N):
        list1=[]
        for j in range(0,n):
            if i+j*N<len(L):
                list1.append(L[i+j*N])
        list2.append(list1)
    return list2
C=[1,2,3,4,5,6,7,8,9,10,11,12]
print(slice_by_step(C,3))
C=['excellent','are','anna','good','level','91019','reviver','10051','madam']
print(slice_by_step(C,4))

[[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]
[[‘excellent’, ‘level’, ‘madam’], [‘are’, ‘91019’], [‘anna’, ‘reviver’], [‘good’, ‘10051’]]

去掉数字前面的0

def remove_zeros(C):
    l=C.split(",")
    y=[]
    for x in l:
        for a in range(0,len(x)):
            if x[a]!='0':#注意是字符‘0’
                y.append(x[a:])
                break
            elif a==len(x)-1:#处理000的情况
                y.append('0')
    C=",".join(y)
    return C
print(remove_zeros("089,0760,009"))
print(remove_zeros("00001,000,099"))

89,760,9
1,0,99

交换字符串的前n位

def mix_strings(a,b,n):
    a1=list(a)#转成列表
    b1=list(b)
    for i in range(0,n):#交换
        c=a1[i]
        a1[i]=b1[i]
        b1[i]=c
    a1=''.join(a1)#转成字符串
    b1=''.join(b1)
    return(a1+" "+b1)
print(mix_strings('abc','xyz',2))
print(mix_strings('12345','56789',4))

xyc abz
56785 12349

根据列表里字符串长度排序

#3,根据长度排序
countries=['New Zealand','Australia','China','United Kingdom','Togo','Turkey','Sao Tome and Principle','Samoa']
lenc=[]
for i in countries:
    lenc.append((i,len(i)))#(名字,长度)放一起
lenc.sort(key=lambda x:x[1],reverse=True)#排序
#lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x[1]为函数体
list1=[]#放回列表
for i in lenc:
    list1.append(i[0])#(名字,长度)放一起
print(list1)

[‘Sao Tome and Principle’, ‘United Kingdom’, ‘New Zealand’, ‘Australia’, ‘Turkey’, ‘China’, ‘Samoa’, ‘Togo’]

把下标为偶数的字符去掉,再把剩下字符的ASC码值加起来

def string_even(S):
    a=len(S)
    b=[]
    c=0
    for x in range(0,a):
        if x%2!=0:
            b.append(S[x])
            c+=ord(S[x])
    b=''.join(b)
    return(b+': '+str(c))
print(string_even("abcdef"))
print(string_even("python"))

bdf: 300
yhn: 335

排序

'''排序'''
list=[64,25,12,22,11]#需要排序的序列

for i in range(1,len(list)):
    key=list[i]#记录开始元素
    j=i-1
    '''如果第i个元素小于前面的元素,则该元素往前移'''
    while j>=0 and key<list[j]:#如果key(第i个元素)小于前面元素
        list[j+1]=list[j]#前面的元素往后移
        j-=1
    list[j+1]=key
print("Sort array:")
for i in range(len(list)):
    print(list[i],end=' ')

解析:
第1次大循环:

  • i=1; key=list[1]=25; j=0;
    • j>=0为真,key<64为真,进入小循环
      • list[1]=list[0]=64; j=j-1=-1;
    • j>=0为假,不进入循环
  • list[0]=key=25。

至此,list=[25, 64, 12, 22, 11]
第2次大循环:

  • i=2; key=list[2]=12; j=1;
    • j>=0为真,key<64为真,进入小循环
      • list[2]=list[1]=64; j=j-1=0;
    • j>=0为真,key<25为真,进入小循环
      • list[1]=list[0]=25; j=j-1=-1;
    • j>=0为假,不进入循环
  • list[0]=key=12。

至此,list=[12, 25, 64, 22, 11]
第3次大循环:

  • i=3; key=list[3]=22; j=2;
    • j>=0为真,key<64为真,进入小循环
      • list[3]=list[2]=64; j=j-1=1;
    • j>=0为真,key<25为真,进入小循环
      • list[2]=list[1]=25; j=j-1=0;
  • j>=0为真,key<12为假,不进入小循环
  • list[1]=key=22。

至此,list=[12, 22, 25, 64, 11]
第4次大循环:

  • i=4; key=list[4]=11; j=3;
    • j>=0为真,key<64为真,进入小循环
      list[4]=list[3]=64; j=j-1=2;
    • j>=0为真,key<25为真,进入小循环
      list[3]=list[2]=25; j=j-1=1;
    • j>=0为真,key<22为真,进入小循环
      list[2]=list[1]=22; j=j-1=0;
    • j>=0为真,key<12为真,进入小循环
      list[1]=list[0]=12; j=j-1=-1;
  • j>=0为假,不进入小循环
  • list[0]=key=11。

至此,list=[11, 12, 22, 25, 64]

写文件

把几行语句添加的txt文件里

i=0
lines=[]
while True:
    line=input(">")
    if line=='.':
        print(i,"lines appended")
        break
    else:
        with open('mytest2.txt','a') as f:
            f.write(line+"\n")
            i=i+1

with open(‘mytest2.txt’,‘a’) as f,一般可放在while前
python和C语言基础入门练习题_第1张图片

读文件目录

import os
import sys

def pickAFile(thisDir = '.', extension = '*'):#若没有赋值则默认取.和*(thisDir为文件夹路径,extension为文件格式)
    namesInThisDir = os.listdir(thisDir)#返回指定的文件夹包含的文件或文件夹的名字的列表
    filelist = []
    for item in namesInThisDir:
        fullname = os.path.join(thisDir, item)
        if os.path.isfile(fullname) and (item.endswith(extension) or extension == '*'):
            #endswith用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False
            #/是断句的意思,即这一行还没有结束
            filelist.append(item)#把文件名加入列表
    filelist.sort()#排序
    choice = showMenu("Pick a file", filelist)#选择文件(根据序号)
    if choice is not None:
        return os.path.join(thisDir, filelist[choice])#返回选择的文件路径(组合文件路径时有\)
    else:
        return None
def showMenu(heading, itemlist):#显示文件列表
    while True:
        print ("\n *** " + heading + " ***\n")#输出第一行的那种格式
        for i in range(len(itemlist)):
            print ("%3d: %s" % (i, itemlist[i]))
        print("\n Choice (or 'q')", end= " ")
        reply = input(":")
        if reply in ['q', 'Q']:
            return None
        else:
            option = int(reply)     # <<<<<<< ????
            return option
while True:
    choice = pickAFile('.', '*')
    if choice:
        print("You chose", choice)
    else:
        sys.exit(0)

对文件内容作出更改

with open("mytest.txt", 'r') as f:
    lines=f.readlines() #读取内容到列表里

lines[2]="Sorry! The content of this line has been changed!\n"#把第3行内容改为Sorry!...
#第5行内容与第7行交换
templ=lines[4]
lines[4]=lines[6]
lines[6]=templ
#将"This line was inserted.\n"插入列表的第9行
lines.insert(8,"This line was inserted.\n")

numberofwords=0
for i in range(len(lines)):
    words=lines[i].split()#分割单词(空格为分隔符)
    tempcount=numberofwords+len(words)#求总单词长度
    
    ##这段意为从文本的第一行开始数,到第7个单词,去掉第七个单词。
    if tempcount>=7:#如果总单词长度大于7
        indexn=7-numberofwords-1#7-这一行之前的单词数目-1
        del words[indexn]#删掉那个单词
        lines[i]=" ".join(words)+"\n"#重新组合成句子
        break#退出循环
    else:
        numberofwords=tempcount#没数到第7个继续数

#重新写入
with open("mytest.txt", 'w') as f:
    f.writelines(lines)

C语言

打印数字互不相同的三位数

#include
#include
//打印数字互不相同的三位数
int main()
{
	int i,j,l;
	printf("互不相同的三位数有");
	for(i=1;i<=9;i++)
	{
		for(j=0;j<=9;j++)
		{
			for(l=0;l<=9;l++)
			{
				if(l!=i&&l!=j&&j!=i)
				{printf(" ");
				printf("%d%d%d",i,j,l);}
			}
		}
	}
	system("pause");
	return 0;
}

你可能感兴趣的:(Python)