python练习_01

练习

1. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
for i in range(1,5):  ##重点是i、j、K范围相同,值不同
    for j in range(1,5):
        for k in range(1,5):
            if i!=j and j!=k and i!=k:
                res=i*100+j*10+k
                print(res,end="\t")
2. for循环嵌套:打印9*9乘法表
for i in range(1,10):   ##范围1-9
    for j in range(1,i+1):
        s=i*j
        print("%s*%s=%s" %(i,j,s),end="\t")  ##打印乘法形式
    print()
3. 输入两个数,求这两个数的最大公约数和最小公倍数;
a=int(input("请输入整数:"))
b=int(input("请输入整数:"))
Min=min(a,b)  ##min()内置方法求最小值
for i in range(Min,0,-1):  ##依次遍历,求最大公约数
    if a%i==0 and b%i==0 :
        MAX_res=i
        break
MIN_res=(a*b)//MAX_res  ##计算最小公倍数
print("%s%s的最大公约数是%s,最小公倍数是%s" %(a,b,MAX_res,MIN_res))
4. 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
def main(num):   ##定义函数,检查是否是完全平方数
    for x in range(1000):
        if x ** 2 == num:
            return True

for i in range(1000):
    n1 = i + 100   ##题目要求+100和+168后依然是完全平方数
    n2 = i + 168
    if main(n1) and main(n2):  ##两者均满足要求
        print(i)
5.输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
s1=input("please input a string:")
s2=input("please input a string:")
for i in s2:
    s1=s1.replace(i,'')  ##将字符取代为空
print(s1)
6.给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格
str=input("please input a string:")
new_s=str.split(" ")[::-1]  ##以space为分隔符分离
print(" ".join(new_s))  ##用space连接
7. 简单密码破解
passwd=input('输入明文:')
dict={    ##定义字典,编写所有的转换规则
    '1':1,'2':2,'3':3,'4':4,'5':5,'6':6,
    '7':7,'8':8,'9':9,'0':0,
    'a':2,'b':2,'c':2,'d':3,'e':3,'f':3,
    'g':4,'h':4,'i':4,'j':5,'k':5,'l':5,
    'm':6,'n':6,'o':6,'p':7,'q':7,'r':7,'s':7,
    't':8,'u':8,'v':8,'w':9,'x':9,'y':9,'z':9,
    'A':'b','B':'c','C':'d','D':'e','E':'f',
    'F':'g','G':'h','H':'i','I':'j','J':'k',
    'K':'l', 'L':'m','M':'n','N':'o','O':'p',
    'P':'q','Q':'r','R':'s','S':'t','T':'u',
    'U':'v','V':'w','W':'x','X':'y','Y':'z','Z':'a'
}
for i in passwd:   ##遍历字符串,搜寻字典对应的value值,输出
    print(dict[i],end='')
8.给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果
##优化代码采用列表生成式,可参考python高级特性内容
list = [1, 2, 3]  ##所有质数列表
for i in range(4, 1000):   ##生成1000以内的质数列表
    for n in range(2,i):
        if i % n == 0:
            break
    else:
        l.append(i)

dict = {}  ##定义空字典,用于判断质数对
count = 0  ##定义变量count,为满足条件的质数对
N = int(input('给定一个正整数:'))
for i in list:   ##依次遍历质数列表,找出满足条件的质数对
    for j in list:
        if int(i) + int(j) == N:
            dict[i] = j
for key, value in dict.items():
    if key == value:   ##判断质数对的key-value值是否相等
        count += 1
res = (len(dict) + count) // 2  ##取整(目的是去除小数点)
print(res)
9.判断IP是否合法,返回判断的结果YES or NO
ip = input('IP_addres:')
if len(ip.split('.')) == 4:   ##以'.'分离,判断IP是否为4段
    for num in ip.split('.'):  ##遍历,判断是否在2**8-1之间
        num = int(num)   ##强制转换,为了比较范围
        if not 0 < num <= 255:
            print(ip + ' NO')
            break
    else:
        print(ip + ' YES!')
else:
    print(ip + ' NO!')
10.求1~1000之间能被3和7整除的所有数的和
sum = 0
for Num in range(1, 1001):   ##保证范围在1~1000
    res = Num % 3 == 0 and Num % 7 == 0
    if res:
        sum += Num
print(sum)
11.你现在是棒球比赛记录员:

给定一个字符串列表,每个字符串可以是以下四种类型之一: l = [ ]
1.整数(一轮的得分):直接表示您在本轮中获得的积分数。
2. “+”(一轮的得分):表示本轮获得的得分是前两轮有效 回合得分的总和。
3. “D”(一轮的得分):表示本轮获得的得分是前一轮有效 回合得分的两倍。
4. “C”(一个操作,这不是一个回合的分数):表示您获得的最后一个有效 回合的分数是无效的,应该被移除。
每一轮的操作都是永久性的,可能会对前一轮和后一轮产生影响。
你需要返回你在所有回合中得分的总和

list=[ ]   ##注意:此代码只能实现单个字符输入!!!
while 1:
    info=input('please input an element:')
    if info=="C":   ##栈的数据结构
        list.pop(-1)
    elif info=="D":
        n=2*int(list[-1])   ##前一有效回合得分的两倍
        list.append(n)
    elif info=="+":
        n=int(list[-1])+int(list[-2])   ##前两有效回合得分的总和
        list.append(n)
    elif info=="Q":
        print('the sum is ',sum)   ##打印得分并退出
        break
    else:
        list.append(info)
    print(list)   ##查看所有回合的有效得分列表
    sum = 0
    for item in list:   ##求总分
        item=int(item)
        sum+=item
    print('the sum is ',sum)   ##每个回合都会输出得分,便于调试

猜你喜欢

转载自blog.csdn.net/for_myself0/article/details/80513204
今日推荐