python练习进阶2

一、给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),可知至少存在一个重复的整数,假设只有一个重复的整数,请找出这个重复的数

#存字典,如果不在就存进去,在就重复
'''
nums = [1,3,4,2,2]
repeatDict = {}
for num in nums:
    if num not in repeatDict:
        repeatDict[num] = 1
    else:
        print(num)
'''
#先排序,然后看相邻的两个位置是否一样


'''
nums.sort()
pre = nums[0]
n = len(nums)
for index in range(1, n):
    if pre == nums[index]:
        print (pre)
    pre = nums[index]
'''
nums.sort()
for i in range(len(nums)-1):
    if nums[i] == nums[i+1]:
        print(nums[i])

python练习进阶2_第1张图片

 二、1-n,有序数组寻找缺少的数字

'''

def search_missing_item(A):
   n = len(A)
   left = 0
   right = n - 1
   mid = 0
   while (left < right):
        mid = left + (right - left) // 2
        if (A[mid] - mid == A[0]):
            if (A[mid + 1] - A[mid] > 1):
                return A[mid] + 1
            else:
                left = mid + 1
        else:
            if (A[mid] - A[mid - 1] > 1):
                return A[mid] - 1
            else:
                right = mid - 1
                return -1

A = [1, 2, 3, 4, 6, 7, 8, 9]
print(search_missing_item(A))
'''

'''
先给一个值x=0,x和0-n中所有数异或,与数组异或。x就是缺少的数字
我们将nums中所有数异或,再与,那么最后的结果就是只出现了一次,
在0-n中出现,在nums中消失的数字,就是答案。

nums = [1, 2, 3, 4, 6, 7, 8, 9]
N = len(nums)
ans = nums[0]
# 遍历一遍N+1个数
for i in range(0, N+1):
    ans ^= i
    # 遍历一遍输入数组
    for i in range(1, N-1):
        ans ^= nums[i]
print(ans)

#求和
nums = [1, 2, 3, 4, 6, 7, 8, 9]

N = len(nums)+1               # 计算现有长度数组长度N
Sum = (N)*(N+1)/2           # 计算目标数组[0, 1, 2, ..., N]的和,即(0+N)*(N+1)/2

Sum_now = sum(nums)         # 计算当前缺失数组的总和
print(Sum - Sum_now )      # 目标数组总和与缺失数组总和的差值即为缺失数
  
'''

三、找1000以内,可以被5或6整除但不能被5和6一起整除

def math_5_6(x):
    count=[]
    for i in range(1,x+1):
        if (i % 5 == 0 or i % 6 ==0 ):
            if i % 5 == 0 and i % 6 ==0:
                continue  #利用continue跳过能被5和6整除的数
            else:
                count.append(i)
    print(count)

    
math_5_6(10000)

python练习进阶2_第2张图片

 四、根据完整的路径从路径中分离文件路径、文件名及扩展名

import os
a=r'd:\Git\index.txt'
os.path.basename(a)
os.path.dirname(a)

python练习进阶2_第3张图片

 五、剔除字符串内空格

a = input('请输入字符串:')
b = ''
for i in a:
    if i.isspace() == True:
        continue
    b += i
print(f'剔除空格后的字符串为:{b}')

python练习进阶2_第4张图片

 六、生成无数字的字符串

import random

a = 'abcdefghijklmnopqrstuvwxyz'
str = random.sample(a,5)   
print (str)

python练习进阶2_第5张图片

七、将字符串排序后逆序输出

a = input('请输入一个字符串进行排序:')
li = []
count = ''
for i in a:
    b = int(ord(i))#->ascil码
    li.append(b)
li.sort()
for i in li:
    c = chr(i)#->abcdefghijklmnopqrstuvwxyz
    count += c
print(count)
print(count[::-1])

 python练习进阶2_第6张图片

八、跳台阶,只能跳1格活2格,跳到第n格有多少种方法
 

def count_1_2(n):
    print(f"一共{n}格3台阶")
    x=1
    y=2
    count=0  
    for i in range(n):
        for j in range(n):
            if n==x*i+y*j:
                count+=1
                print(f"方法{count}:跳1格共跳{i}次,跳2格共跳{j}次)")


count_1_2(5)

python练习进阶2_第7张图片

 九、汉诺塔、将n层从小到大的圆盘,从位置1移动的位置3上,且小盘子不能在大盘子下。n层需要多少步。

你可能感兴趣的:(python,numpy,算法)