python 算法编程练习二

编写程序以检查用户输入的密码的有效性。

以下是检查密码的标准:

1. [a-z]之间至少有1个字母

2. [0-9]之间至少有1个数字

1. [A-Z]之间至少有一个字母

3. [$#@]中至少有1个字符

4.最短交易密码长度:6

5.交易密码的最大长度:12

您的程序应接受一系列逗号分隔的密码,并将根据上述标准进行检查。将打印符合条件的密码,每个密码用逗号分隔。

例:如果以下密码作为程序的输入:

ABd1234@1,a F1#,2w3E*,2We3345

然后,程序的输出应该是:

ABd1234@1

def checkpass():
    print('输入密码:')
    str = input()
    A = str.split(',')
    for i in range(len(A)):
        xxzm=0
        sz=0
        dxzm=0
        tszf=0
        if len(A[i]) >= 6 and len(A[i]) <= 12:
            for j in range(len(A[i])):
                if A[i][j] in ['$','#','@' ]:
                    tszf = tszf+1
                if  A[i][j] in ['0','1','2','3','4','5','6','7','8','9']:
                    sz = sz +1
                if      A[i][j]>='a' and  A[i][j]<='z':
                    xxzm = xxzm + 1
                if A[i][j] >= 'A' and A[i][j] <= 'Z':
                    dxzm = dxzm + 1
            if  tszf and sz and xxzm and  dxzm :
                print(A[i])
# checkpass()

您需要编写一个程序,按升序对(名称,年龄,高度)元组进行排序,其中name是字符串,age和height是数字。 元组由控制台输入。 排序标准是:

1:根据名称排序;

2:然后根据年龄排序;

3:然后按分数排序。

优先级是name> age>得分。

如果给出以下元组作为程序的输入:

Tom,19,80

John,20,90

Jony,17,91

Jony,17,93

Json,21,85

然后,程序的输出应该是:

[(‘John’,‘20’,‘90’),(‘Jony’,‘17’,‘91’),(‘Jony’,‘17’,‘93’),(‘Json’,'21 ',‘85’),(‘Tom’,‘19’,‘80’)]

def sxpx():
    from operator import itemgetter
    l = []
    print("请输入:")
    while True:
        s = input()
        if not s:
            break
        # print(s)
        l.append(tuple(s.split(",")))
    # print(l)
    print(sorted(l, key=itemgetter(0, 1, 2)))
# sxpx()
# A={1,3,4,5,2}
# print(A,type(A))
# A=[1,3,4,5,2]
# print(list(set(A)))
# print(type(list(set(A))))

使用生成器定义一个类,该生成器可以在给定范围0和n之间迭代可被7整除的数字。

# def scq(n):
#     for i in range(n+1):
#         if i%7==0:
#             print(i)
# scq(100)

def putNumbers(n):
    i = 0
    while i < n:
        j = i
        i = i + 1
        if j % 7 == 0:
            yield j
# for i in putNumbers(100):
#     print(i)

机器人从原点(0,0)开始在平面中移动。 机器人可以通过给定的步骤向上,向下,向左和向右移动。 机器人运动的痕迹如下所示:

UP 5

DOWN 3

LETF 3

RIGHT 2

方向之后的数字是步长。 请编写一个程序来计算一系列运动之后当前位置和原点的距离。如果距离是浮点数,则只打印最接近的整数。

例:如果给出以下元组作为程序的输入:

UP 5

DOWN 3

LETF 3

RIGHT 2

然后,程序的输出应该是:2

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

def jqr():
    import math
    A=[]
    print('输入:')
    while True:
        s= input()
        if  not s:
            break
        A.append(s.split(' ',-1))
    # print(A, A[0][0], A[0][1])
    y =0
    x=0
    for i in range(len(A)):
        if A[i][0] == 'UP':
            y = y+int(A[i][1])
        elif A[i][0] == 'DOWN':
            y = y - int(A[i][1])
        elif A[i][0] == 'LEFT':
            x= x- int(A[i][1])
        elif A[i][0] == 'RIGHT':
            x = x + int(A[i][1])

    d=math.sqrt(x**2+y**2)
    print(int(d))
# jqr()

题:编写一个程序来计算输入中单词的频率。 按字母顺序对键进行排序后输出。

假设为程序提供了以下输入:

New to Python or choosing between Python 2 and Python 3? Read Python 2 or Python 3.

然后,输出应该是:

2:2

3.:1

3?:1

New:1

Python:5

Read:1

and:1

between:1

choosing:1

or:2

to:1

提示:如果输入数据被提供给问题,则应该假定它是控制台输入。

def zmpx():
    print('请输入:')
    str = {}
    A = input()
    for x in A.split(' ',-1):
        str[x] =str.get(x,0)+1
    # print(str)
    # print(str.keys())
    B =sorted(str.keys())
    # print(B)
    # print(str.values)
    for keys in B:
        print(keys,':',str[keys])

# A={'s':'ssa','sda':'da'}
# print(A['s'])
# print(A['ssa'])

# zmpx()

定义数列 fn+2 = fn+1 + fn,数列中任何一个元素都是正整数。从定义可以看出,不同的f1、f2会产生不同的数列。

假设给定一个数字x(2 <= x <= 2**32),给出这个数字出现在位置i(i >= 3, 数列下标从1开始)的数列个数。

输入描述:

数字x

输出描述:

每行为两个数字,空格分隔,第一个数字为x在数列中的位置i,第二个数字为符合条件的数列个数,即f1、f2的组合种数。若存在多行,则按照i由小到大的顺序输出

输入例子1:

3

输出例子1:

3 2

4 1

例子说明1:

以下数列包含3,分别为

1 1 2 3 5 …

1 2 3 5 8 …

2 1 3 4 7 …

其中3出现在数列第三位的数列有两个,出现在第四位的数列有一个,因此输出为:

3 2

4 1

######### 单个数列求位置:
# def dsl(f1,f2):
#
#     def sl(n):
#         if n == 1:
#             return f1    #random
#         elif n == 2:
#             return f2     #random
#         else:
#             return sl(n-2) + sl(n-1)
#     B=[]
#     for i in range(1,15):
#         B.append(sl(i))
#     # print('%s'%B)
#     return B
# print('请输入f1:')
# f1 =int(input())
# print('请输入f2:')
# f2 =int(input())
# jz = dsl(f1,f2)
# print('初值 f1,f2 的数列为%s'%jz)
# print('请输入查询数字:')
# A = input()
# for i in range(2, len(jz)):
#     if jz[i] == int(A):
#         print('查询数字的位置在第 %d 位(以1为索引初值)'%(i+1))
#         break
# if int(A) not in jz:
#     print('数列不存在该查询数字')

def mmm():
    def dsl(f1, f2):
        def sl(n):
            if n == 1:
                return f1  # random
            elif n == 2:
                return f2  # random
            else:
                return sl(n - 2) + sl(n - 1)

        B = []
        k = 1
        while sl(k) <= (999):
            B.append(sl(k))
            k += 1
        # print('%s'%B)
        return B

    C = []
    for m in range(1, 30):
        for n in range(1, 30):
            f1 = m
            f2 = n
            C.append(dsl(f1, f2))
    # print(C)
    # print('请输入查询数字:')
    A = input()
    D = []
    m = 0
    for i in range(0, len(C)):
        for j in range(2, len(C[i])):
            if C[i][j] == int(A):
                # print(C[i])
                # print('查询数字的位置在第 %d 位(以1为索引初值)'%(j+1))
                D.append(j + 1)
                break
    E = sorted(D)
    F = set(E)
    for each in F:
        print(each, E.count(each))
# mmm()

给你一个包含n个数字的数组。你可以对这个数组执行任意次以下交换操作:

对于数组中的两个下标i,j(1<=i,j<=n),如果为ai+aj奇数,就可以交换a_i和a_j。

现在允许你使用操作次数不限,小易希望你能求出在所有能通过若干次操作可以得到的数组中,字典序最小的一个是什么。

输入描述:

第一行一个整数n;

第二行n个整数a_1,a_2,…,a_n,表示数组,每两个数字之间用一个空格分隔。

输入保证。

输出描述:

n个整数,每两个整数之间用一个空格分隔,表示得到的字典序最小的数组。

输入例子1:

4

7 3 5 1

输出例子1:

7 3 5 1

输入例子2:

10

53941 38641 31525 75864 29026 12199 83522 58200 64784 80987

输出例子2:

12199 29026 31525 38641 53941 58200 64784 75864 80987 83522

def px():
    A = int(input())
    B=(input())
    C=map(int,B.split(' ',-1))
    # print(C)
    C=list(C)
    # print(C)
    # a[i]不全为偶数或全为奇数,即可交换
    os=0
    js=0
    for each in C:
        if each %2 == 0:
            os=os+1
        if each % 2 == 1:
            js=js+1
    if os !=A and js !=A:
        C=xz(C)
        # 冒泡排序
        # for i in range(A-1):
        #     for j in range (0,A-i-1):
        #         if int(C[j])>int(C[j+1]):
        #                  C[j],C[j+1]=int(C[j+1]), int(C[j])
    for each in C:
        print(each,end=' ')
# def cr(arr):     #插入排序
#     for i in range(1, len(arr)):
#         key = arr[i]
#         j = i - 1
#         while j >= 0 and key < arr[j]:
#             arr[j + 1] = arr[j]
#             j -= 1
#         arr[j + 1] = key
#     return arr
def xz(A):  #选择排序
    for i in range(len(A)-1):
        for j in range(len(A)-i):
           if A[j] == max(A[:(len(A)-i)]):
                A[len(A)-1-i], A[j] = A[j], A[len(A)-1-i]
    return(A)
px()

版权声明:本文为Fighting_y原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。