python大量练习题

demo1:语法基础

1.摄氏温度转化为华氏温度

#摄氏温度转化为华氏温度
celsius = float(input("请输入摄氏度:"))
fahrenheit=(9/5)*celsius+32
print("华氏温度是%.1f"%fahrenheit)

 2.计算圆柱体的体积

#计算圆柱体的体积
radius , length = map( float,input("请输入高和半径,用空格隔开").split( ))
π = 3.14
area=radius*radius*π
volume=area*length
print("圆柱体的面积是%.2f"%area)
print("圆柱体的体积是%.2f"%volume)

3. 英尺转米

# 输入英尺数然后将它转换为米数,并输出结果,
male = float(input("请输入英里数:"))
m = male*0.305
print("%f英里等于%.4f米"%(male,m))

4.  计算小费  

# 计算小费  
Money, Cash = map(float,input("请输入小费和酬金率,用空格隔开:").split())
SmallMoney = Money*Cash/100
print("小费有"+str(SmallMoney))
print("合计%.2f元"%(SmallMoney+Money))

5. 对一个整数中的各位数字求和

# 对一个整数中的各位数字求和
num = int(input("请输入一个0~1000的数字:"))
print("他的各个数之和是:"+str(int(num/100)+int(num/10%10)+int(num%10)))

6. 计算年数和天数

#  计算年数和天数
min = int (input("请输入分钟数:"))

print("这是第%d年"%(min/60/24/365))
print("这是第%d天"%(min/60/24%365))

7.计算能量

# 计算能量
water = float(input("请输入需要加热的水量:"))
initialTemperature=float(input("请输入加热前的水量:"))
finalTemperature = float(input("请输入要加热到的最终温度:"))
Q = water * (finalTemperature - initialTemperature) * 4184
print("加热到%s度需要%.1f焦耳的热量"%(finalTemperature,Q))

8.输入一个四位整数,并以反向顺序显示

# 输入一个四位整数,并以反向顺序显示
num = int (input("请输入一个四位数:"))
print(num%10)
print(int(num/10%10))
print(int(num/100%10))
print(int(num/1000))

9.计算三角形的面积

# 计算三角形的面积


# 导入math类使用sqrt函数
import math


x1,y1,x2,y2,x3,y3=map(float,input("请输入三角形的顶点坐标,用空格隔开:").split())
side1 = math.sqrt((y1-y2)**2+(x1-x2)**2)
side2 = math.sqrt((x2-x3)**2+(y2-y3)**2)
side3 = math.sqrt((x1-x3)**2+(y1-y3)**2)
s=(side1+side2+side3)/2
area = math.sqrt(s*(s-side1)*(s-side2)*(s-side3))
print("面积是%.1f"%area)

10. 输入你所在的时区,并输出当前的时间

# 输入你所在的时区,并输出当前的时间

# 从datetime模块导入datetime类和timedelta类(表示时间间隔)
from datetime import datetime,timedelta


place = int(input("请输入时区:"))
# 获取当前时间
now = datetime.now()
# 将时间格式化为字符串
time_8= now.strftime("%H:%M:%S")

if place == 8:
  print(time_8)
elif place == -5:
  # 修改时间(将小时加11)
  modified_time = now +timedelta(hours=11) 
  time_5= modified_time.strftime("%H:%M:%S")
  print(time_5)
else:
  print("输入有误重新输入")

11.计算三角形的三个角

# 输入三角形的三个顶点坐标,并计算该三角形的三个角分别是多少


import math


x1,y1,x2,y2,x3,y3=map(float,input("请输入顶点坐标,用空格隔开:").split())
# 计算三条边长
side1 = math.sqrt( (x1-x2)**2+(y1-y2)**2)
side2 = math.sqrt((x2-x3)**2+(y2-y3)**2)
side3 = math.sqrt((x1-x3)**2+(y1-y3)**2)
# 公式计算(弧度制)
cont1=math.acos((side1**2-side2**2-side3**2)/(-2*side2*side3))
cont2=math.acos((side2**2-side1**2-side3**2)/(-2*side1*side3))
cont3=math.acos((side3**2-side2**2-side1**2)/(-2*side1*side2))
# 将弧度制转化为角度制
angle_1=math.degrees(cont1)
angle_2=math.degrees(cont2)
angle_3=math.degrees(cont3)
print("%.2f\n%.2f\n%.2f\n"%(angle_1,angle_2,angle_3))


12.兑换最小数量的硬币

#题目 : 假设硬币种类分为:一元硬币、两角五分硬币、一角硬币、五分硬币、一分硬币
#输入总金额,并将总金额兑换成若干个硬币,并保证所兑换的硬币个数最少


# 兑换最小数量的硬币
money = float(input("请输入金额:"))
# 计算一元硬币
yuan = int(money)
print("有%s个一元硬币"%yuan)
# 计算剩下的钱
last = money - yuan
# 计算两角五分的硬币
money2_5 = (last)/0.25
print("有%s个两角五分的硬币"%int(money2_5))
# 更新剩下的钱
last = last - 0.25*int(money2_5)
# 计算一角硬币个数
money1 = last/0.1
print("有%s个一角硬币"%int(money1))
# 再次更新余额
last = last - int(money1)*0.1
# 计算五分硬币个数
money_5 = last/0.05
print("有%s个五分硬币"%int(money_5))
# 更新余额
last= last - int(money_5)*0.05
# 计算一分硬币
money_1 = last/0.01
print("有%s个一分硬币"%int(money_1))

13.正多边形的面积

#输入两个数据分别表示边的个数n和边的长度s,数据之间用空格分隔
#输出边长为s的正n多边形的面积,结果保留两位小数

import math
π = 3.14
side, lengs = map(float,input("请输入边的个数和长度用空格隔开:").split())
area = (side * lengs**2) / (4 * math.tan(π/side))
print("面积是%.2f"%area)

14.计算身体质量指数 

# 计算身体质量指数


weight ,high = map(int,input("输入体重和身高,数据之间用空格分隔:").split())
# 体重除以以米为单位的身高的平方
BMI = weight/(high**2)
if BMI<18.5:
  print("超轻")
elif BMI<25.0:
  print("标准")
elif BMI<30.0:
  print("超重")
elif BMI>=30.0:
  print("肥胖")
else:
  print("输入不合法,重新输入")

15.判定闰年

# 判定闰年
year = int (input("请输入想要知道年分:"))
if year%4==0 and year%100!=0 or year%400 == 0:
  print("yes") 
else :
  print("no")

16.中彩票

# 中彩票


import random


input_num = int (input("输入:"))
input_str =  str(input_num)
random_num = random.randint(10,99)
random_str = str(random_num)
print(random_num)
if input_num ==random_num:
  print("10000")
elif random_str[0] ==  input_str[1] and random_str[1] == input_str[0]:
  print("3000")
elif (random_str[0] == input_str[0] or random_str[0] == input_str[1])or(random_str[1] == input_str[0] or random_str[1] == input_str[1]) :
  print("1000")
else:
  print("0")

17. 解一元二次方程 

# 解一元二次方程
# ax^2+bx+c=0 


import math


a,b,c =  map(float,input("输入:").split())
if a==0:
  print("输入不合法")
elif b**2-4*a*c>0:
#  round(number[, ndigits])----四舍五入保留ndigits位小数
 print( round((-b+math.sqrt(b**2-4*a*c))/(2*a),2))
 print( round((-b-math.sqrt(b**2-4*a*c))/(2*a),2))
  


elif b**2-4*a*c==0:
  print(round((-b)/(2*a),2))

  
elif b**2-4*a*c<0:
  print("无实数解")

18.解2×2线程方程

# 解2×2线程方程


a,b,c,d,e,f = map(float,input("输入:").split())
# 前提:(ad - bc)不等于0
# x = (ed - bf) / (ad - bc)
# y = (af - ec) / (ad - bc)
if (a*d - b*c) ==0:
  print("无解")
else:
  x = (e*d - b*f) / (a*d - b*c)
  y = (a*f - e*c) / (a*d - b*c)
  print(x,y)

19.未来是周几

# 未来是周几


week ,future_day = map(int ,input("输入:").split())
day = (week+future_day)%7
if day == 0:
  print("星期天") 
if day == 1:
  print("星期一") 
if day == 2:
  print("星期二") 
if day == 3:
  print("星期三") 
if day == 4:
  print("星期四") 
if day == 5:
  print("星期五") 
if day == 6:
  print("星期六") 

20.本年中的第几天

year,month,day = map(int,input("输入").split())
# 定义每月的天数表
month_day =[0,31,28,31,30,31,30,31,31,30,31,30,31]
# 判断闰年,并对二月进行加一操作
if (year %4 ==0 and year%100 ==0) or year%400 == 0:
  month_day[2] += 1 
  
for i in range(0 , month):
  day += month_day[i]

print(day)

21.剪刀石头布

import random


use_num =int( input("输入:"))
com_num = random.randint(0,2)
# 定义一个方法:将数字和字符转换,
def vo(num):
  if num ==0:
    return " 剪刀"
  elif num == 1:
    return " 石头"
  elif num ==2:
    return " 布"
  else :
    return 0
    
# 对用户输入数据进行判断
if vo(use_num)==0:
  print("输入不合法")
  
else:
  print("计算机输出"+vo(com_num))
  print("用户出的"+vo(use_num))

  if com_num==use_num:
    print("平手")
  elif (com_num==1 and use_num==0) or(com_num==0 and use_num==2) or (com_num == 2 and use_num == 1):
    print("计算机赢")
  else:
    print("用户赢")

22.计算三角形的周长

# 输入三角形三边的长度,如果输入合法则计算周长并输出结果;否则输出非法
# 如果任意两边之和大于第三边则输入都是合法的

# 输入三个数据表示三边,数据之间用空格分隔
# 输出三角形的周长,如果非法则输出非法


side1,side2,side3 = map(int,input("输入:").split())
if side1+side2>side3 and side1+side3>side2 and side2+side3>side1:
  print(side1+side2+side3)
else:
  print("非法")

23.判断一年中某天是星期几

# 判断一年中某天是星期几

# 输入年、月、日三个数据,数据之间用空格分隔
# 输出该日是周几

year,month,day = map(int,input("输入:").split())

# 一月和二月都是按照前一年的13月和14月来计数的,所以还得把年份改为前一年
if month ==1 or month  == 2:
  year-=1
  month+=12
h =int((day+26*(month+1)//10+year%100+year%100//4+year/100//4+5*year/100)%7)
if h == 0:
  print("星期六")
elif h == 1:
  print("星期天")
elif h == 2:
  print("星期一")
elif h == 3:
  print("星期二")
elif h == 4:
  print("星期三")  
elif h == 5:
  print("星期四")
elif h == 6:
  print("星期五")

#24.直线的交点

TODO

25.回文数

# 回文数

# 输入一个三位整数,然后判断其是否为一个回文数
# 如果一个数从左向右和从右向左读取时是一样的,那么这个数就是回文数


# 用户需要判断的数字
num = int (input("输入:"))
# num会在后续的操作中改值,所以需要定义一个变量存储num的值
tem =num
# 定义一个变量用于存储反转后的数字
change_num =0
while num >0:
 change_num *= 10
 change_num += num%10
 num //= 10 

if tem == change_num:
  print("yes")
else:
  print("no")

26.判断两个矩形之间的位置关系

# 判断两个矩形之间的位置关系

# 输入两行,每行四个数据,分别是矩形的中心坐标x、y和矩形的宽、高
# 输出两者的关系


x1,y1,winth1,high1 = map(float ,input("输入").split())
x2,y2,winth2,high2 = map(float ,input("输入").split())
#   包含:如果两个矩形的中心点之间的水平距离小于两个矩形宽度之和的一半,并且垂直距离小于两个矩形高度之和的一半,则两个矩形相交。

# 重叠: 如果一个矩形的中心点到另一个矩形的中心点的水平距离小于两个矩形宽度之差的一半,并且垂直距离小于两个矩形高度之差的一半

# 定义两个函数用于存储中心点的水平距离和垂直距离
level =abs(x1-x2) 
vertical = abs(y1-y2)
# 判断:
if level < (winth1+winth2)/2 and vertical<(high1+high2)/2:
  print("包含")
elif level<abs(winth1-winth2) and vertical<abs(high1-high2):
  print("重叠")
else:
  print("相离")
 

demo2:循环语句

27.打印数字I

# 利用循环,寻找规律,打印如下数字模式:
#             1
#           2 1 2
#         3 2 1 2 3
#       4 3 2 1 2 3 4
#     5 4 3 2 1 2 3 4 5
#   6 5 4 3 2 1 2 3 4 5 6
# 7 6 5 4 3 2 1 2 3 4 5 6 7

# 用户输入打印的行数
rows = int(input("输入"))


def print_num (row):
  for i in range(1,rows+1):
    print(" "*(row*2-2*i),end="")
    for j in range(i,0,-1):
      print(str(j)+" ",end="")
    for j in range(2,i+1):
      print(str(j)+" ",end="")
    print()  


print_num(rows)

28.打印数字II

# 利用循环,寻找规律,打印如下数字模式:
      #         1 
      #       1 2 1
      #     1 2 4 2 1
      #   1 2 4 8 4 2 1
      # 1 2 4 8 16 8 4 2 1


# 用户输入需要的层数
row = int(input("输入"))


def print_row (row):
  
  for i in range(1,row+1):
    print(" "*(row*2-2*i),end="")
    num = 1
    for j in range(1,i*2):
 
      if j<i:
        print(str(num)+" ",end="")
        num*=2
      else:
        print(str(num)+" ",end="")
        num = int(num/2)
    print()

    
print_row(row)


30.打印菱形I

# 输出一个高度为9的菱形

#     *
#    * *
#   * * *
#  * * * *
# * * * * *
#  * * * *
#   * * *
#    * *
#     *


# 用户输入想要打印的层数
row = int (input("输入"))


def print_pic(row):
  for i in range(1,row+1):
    if i<row//2+1:
      print(" "*((row+1)//2-i),end="")
      print("* "*i)
    else:
      print(" "*(i-(row+1)//2),end="")
      print("* "*(row+1-i))
      
  
print_pic(row)

31.打印菱形II

# 打印空心菱形
#     *    
#    * *   
#   *   *  
#  *     * 
# *       *
#  *     * 
#   *   *  
#    * *   
#     *    

# 用户输入打印的行数
row = int(input("输入"))


def print_pic(row):
  for i in range(0,row):
    if i<row//2+1:
      print(" "*(row//2-i),end="")
      for j in range(i*2+1):
        if j ==0 or j==i*2:
          print("*",end="")
        else:
          print(" ",end="")
    else:
      print(" "*(i-row//2),end="")
      for j in range((row-i)*2-1):
        if j==0 or j == (row-i-1)*2:
          print("*",end="")
        else:
          print(" ",end="")
    print()



print_pic(row)

32.打印菱形III

# 打印如下菱形
#     *
#    ***
#   *****
#  *******
# *********
#  *******
#   *****
#    ***
#     *


row = int (input("输入"))


def print_pic(row):
  for i in range(1,row+1):
    if i<row/2:
      print(" "*(row//2-i+1),end="")
      print("*"*(i*2-1))
    else:
      print(" "*(i-row//2-1),end="")
      print("*"*((row - i)*2+1))


print_pic(row)

 33.猜数字

# 猜数字

# 计算机随机生成一个[0,100]之间的整数,程序提示用户连续地输入数字直到它与那个随机生成的数字相同
# 对于用户输入的数字,程序会提示它是过高还是过低


import random


computer_random = random.randint(0,101)
person_input = int(input("输入"))
while computer_random != person_input:
  if computer_random>person_input:
    print("低了")
  else:
    print("高了")
  person_input = int(input("输入"))
print(f"猜中了答案就是{person_input}")

34.最大公约数**辗转相除法**

# 输入两个正整数,计算其最大公约数,例如4和2的最大公约数是2,16和24的最大公约数是8

# 两个正整数a和b(a>b)的最大公约数等于a除以b的余数r和b之间的最大公约数————例如:要找到48和18的最大公约数,可以按照以下步骤进行计算:
# 48 ÷ 18 = 2 余 12
# 18 ÷ 12 = 1 余 6
# 12 ÷ 6 = 2 余 0

num1,num2 =map(int,input("输入").split())


def gcd(num1, num2):
    if num2 == 0:
        return num1
    else:
        return gcd(num2, num1 % num2)
    

print(gcd(num1,num2))

35.判断素数**试除法**

# 判断素数


import math


num = int(input("输入"))


# 方法一
def prime_1 (num):
  if num<2:
    return False
  else:
    for i in range(2,int(math.sqrt(num)+1)):
      if num % i == 0:  
        return False
    return True
  

#-------------------------------------------------------------------------------------


# 方法二(试除法,速度更快):
def prime_2(num):
  if num < 2:
    return False 
  elif num == 2 or num == 3:
    return True
  elif num % 2 == 0 or num %3 == 0:
      return False
    
  sqrt_num =int( math.sqrt(num))
  k = 1
  while 6 * k - 1 <= sqrt_num:   
    if num % (k * 6 -1) == 0 or num %( k * 6 + 1) == 0: 
      return False
    k += 1
  return True


flag = prime_1(num)
if flag:
  print("yes")
else:
  print("no")  



36.最小公倍数

# 输入两个正整数,计算其最小公倍数,例如4和2的最小公倍数是4,3和5的最小公倍数是15

# 两个数的乘积等于这两个数的最大公约数和最小公倍数的乘积

num1 ,num2 = map(int,input("输入").split())


def gcd(num1,num2):
  """
  求最小公倍数的函数
  """
  while num1:
    return gcd(num2%num1,num1)
  else:
    return num2


def lcm(num1,num2):
  """
  求最大公约数
  """
  return num1*num2//gcd(num1,num2)


print(lcm(num1,num2))

37.整数的素因子

# 输入一个正整数,然后找出它所有的最小因子,也称之为素因子


num = int(input("输入"))


def prime(num):
  """
  求素因子
  """
  arr=[]
  i = 2
  while i * i <= num :
    if num % i == 0:
      arr.append(i)
    else:
      i += 1
  if num > 1 :
    arr.append(num)
  return arr


print(prime(num))

38.完全数

# 如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数


num = int(input("输入"))


def perfect_num (num):
  sum = 1
  for i in range (2,num//2+1):
    if num % i == 0:
      sum += i
  if num == sum:
    return True
  else:
    return False


if perfect_num(num):
  print("yes")
else:
  print("no")

39.前50个素数

# 打印前50个素数,每打印10个素数换行
import math


arr = []


def prime_num (num):
  if num<2:
    return False
  elif num == 2 or num == 3:
    return True
  elif num %2 == 0 or num%3 == 0:
    return False
  
  sqrt_num = int(math.sqrt(num))
  i = 1
  while 6* i -1 <=sqrt_num:
    if num%(6* i -1 )==  0 or num %(6*i +1) == 0:
      return False
    i+=1
  return True


num = 2
i = 1
while i <51:
  if prime_num(num):
    arr.append(num)
    i+=1
  num+=1

i = 1
while i <= 50:
  
  print(str(arr[i-1])+" ",end="")
  if  i % 10 == 0:
    print()
  i+=1

40.计算π

# 计算π

i = int (input("输入"))


def get_π(i):
  num = 0
  for i in range(1,i+1):
   num +=  (-1)**(i+1)/(2*i-1)
  num *= 4
  return num


print(get_π(i))

41.计算e

42.修改猜拳游戏

# 延伸【Demo21剪刀石头布I】的问题,利用循环将程序改为,计算机和电脑谁先赢三次,谁就是终极胜利者


import random

count_use = 0
count_com = 0
while True:
  use_num =int( input("输入:"))
  com_num = random.randint(0,2)
  # 定义一个方法:将数字和字符转换,
  def vo(num):
    if num ==0:
      return " 剪刀"
    elif num == 1:
      return " 石头"
    elif num ==2:
      return " 布"
    else :
      return 0
      
  # 对用户输入数据进行判断
  if vo(use_num)==0 :
    print("输入不合法")
    continue
    
  else:
    print("计算机输出"+vo(com_num))
    print("用户出的"+vo(use_num))
  
    if com_num==use_num:
        print("平手")
    elif (com_num==1 and use_num==0) or(com_num==0 and use_num==2) or (com_num == 2 and use_num == 1):
        count_com += 1
        print("计算机赢"+str(count_com)+"回")
      
    else:
        count_use +=1
        print("用户赢了"+str(count_use)+"回")
      
    if count_use ==3:
        print("用户获得了胜利")
        break
    elif count_com == 3:
        print("电脑获得了胜利")
        break

43.数字组合问题

# 组合问题

# 在数字范围[1,7]之间,任意选择两个不相同的数作为一个组合
#,输出每一组组合,并统计所有组合的个数
# 注:组合(a,b)与组合(b,a)算同一种组合,只记录一次

arr = [1,2,3,4,5,6,7]
count = 0
for i in range(1,7):
  for j in range(2,8):
    if i != j:
      print(f"[{i} {j}]",end="")
      count +=1
print(f"共有{count}个组合")

44. 组合问题II

# 组合问题II

arr =[1,2,3,4]

count = 0
for i in range(1,len(arr)-1):
  for j in range(2,len(arr)):
    for p in range(3,len(arr)+1):
      if i!=j and j != p:
        print(f"[{i} {j} {p}]",end="")
        count += 1
print("\n"+str(count))

45.水仙花数

# 水仙花数,是一个三位数,且这个数的个位、十位和百位的立方和等于该数字本身


def get_num(num):
  if (num%10)**3+(num//100)**3+(num//10%10)**3 == num:
    return True
  else:
    return False


for i in range(100,1000):
  if get_num(i):
    print(i)
  

#46.青蛙跳台阶

TODO

47.堆叠相加

# 现有堆叠相加模式 a+aa+aaa+aaaa+aaaaa+......

# 输入两个数据分别为数字a和组数n
# 输出按照堆叠相加模式算出的和


num , group = map(int ,input("输入").split())


def get_num(num,group):
  sum = 0
  for i in range(1,group+1): 
    sum += int(str(num)*i)
  return sum
  

print(get_num(num,group))

48.十进制转二进制

# 输入一个十进制正整数,输出其二进制形式


num = int (input("输入"))


def change_num(num):
  str_num = ''
  num_changed = 0
  while num > 0:
    ge = num % 2
    num //= 2
    str_num += str(ge)
  for i in range(len(str_num)-1,-1,-1):
    num_changed *= 10
    num_changed += int(str_num[i])
  return num_changed


print(change_num(num))

49.二进制转十进制

# 二进制转十进制


num = int(input("输入"))


def change_num (num):
  all = 0
  str_num = str(num)
  for i in range(0,len(str_num)):
    all += int(str_num[i])
    if i == len(str_num)-1: 
      return all
    all *= 2 



print(change_num(num))

50.十进制转十六进制

# 十进制转十六进制


num = int(input("输入:"))


def change_num(num):
  ox_num = "0123456789ABCDEF"
  fin_num = ""
  while num > 0:
    get_num = num % 16
    num //= 16
    fin_num = ox_num[get_num] + fin_num  
  return fin_num


print(change_num(num))
      
    

51.十六进制转十进制 

# 十六进制转十进制


num = str(input("输入:"))


def change_num(num):
  ox_num = "0123456789abcdef"
  all = 0
  len_num = len(num)
  for j in num:
    for i in ox_num:
      if i == j:
        all += ox_num.index(i)* 16 ** (len_num-1)
        len_num -= 1
  return all
  

print(change_num(num))
        

52.最长公共前缀**zip**

# 给定两个字符串 s1 和 s2 ,求两个字符串最长的公共前缀串,字符区分大小写


str1 = str(input("输入"))
str2 = str(input())



def judge_str (str1,str2):
  new_str = ""
  
  for i,j in zip(str1,str2):
# zip() 函数来同时遍历两个字符串。
# 如果两个字符串的长度不相等,zip() 函数将会以较短的字符串为准,忽略超过其长度的部分。
    if i == j :
      new_str += i
    else:
      break
  return new_str


print(judge_str(str1,str2))

53.子串出现的次数

# 给定两个字符串 s1 和 s2 ,求 s2 在 s1 中出现的次数,
#字符区分大小写,已匹配的字符不计入下一次匹配


str1 = str(input("输入"))
str2 = str(input("输入"))


def judge_str(str1,str2):
  count = 0
  index_str1 = 0
  while index_str1 <= len(str1)-len(str2) :
      flog = True
      tem = index_str1
      for i in str2:
        if str1[tem] == i:
          tem += 1
        else:
            index_str1 += 1
            flog = False
            break
      if flog:
        count += 1
        index_str1 += len(str2)
      
  return count

      
print(judge_str(str1,str2))

#54. 最长公共子串

Todo

55.检测密码

# 一些网站会给密码强加一些规则:
# (1)密码必须至少有8个字符
# (2)密码只能包含英文字母和数字
# (3)密码应该至少包含两个数字
# (4)密码应该至少包含两个大写字母
# 如果密码符合规则,输出Yes;否则输出No


s1 = str(input("输入"))


def string_pass(s1):
  get_num = 0
  get_capital = 0
  if len(s1)<8:
    return "no"
  for i in s1:
    if ord(i)<48 or 57<ord(i)<65 or 90<ord(i)< 96 or ord(i)>122:
      return "no"
    if 47<ord(i)<58:
      get_num += 1
    if 64<ord(i)<91:
      get_capital += 1
  if get_num < 2:
    return "no"
  if get_capital< 2:
    return "no"
  return "yes"


print(string_pass(s1))

56.回文素数

# 回文素数是指一个数既是素数又是回文数,例如131既是素数也是回文数
# 输出显示前100个回文素数,每行显示10个


import math


# 找素数的函数
def find_prime(num):
  if num < 2 :
    return False
  if num == 2 or num == 3:
    return True
  elif num % 2 == 0:
    return False
  elif num % 3 == 0:
    return False
  
  sqrt = int(math.sqrt(num))
  i = 1
  while (6*i-1) < sqrt :
    if num % (6*i-1) == 0 or num % (6*i+1) == 0:
      return False
    i += 1
  else:
      return True
  

# 找回文数
def find_palindromic(num):
  str_num = str(num)
  i = 0
  j = len(str_num)-1
  while i < j:
    if str_num[i] != str_num[j]:
      return False
    i += 1
    j -= 1
  return True  

i = 100
count = 0
while count < 100:
  if find_prime(i) and find_palindromic(i):
    print(str(i) +" ",end="")
    count += 1
    if count % 10 == 0:
      print()
  i += 1

57.反素数**切片:slice**

# 反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转后依旧是素数
# 输出显示前100个反素数,每行显示10个


import math


# 质数
def is_prime(num):
  if num<2:
    return False
  if num == 2 or num ==3:
    return True
  if num % 2 == 0 or num % 3 == 0:
    return False
  
  sqrt_num =int(math.sqrt(num))
  k = 1
  while (6*k-1)<sqrt_num:
    if num % (6*k-1) == 0 or num % (6*k+1) == 0:
      return False
    k += 1
  return True


# 回文数
def is_palindromic (num):
  str_num =  str(num)
  i = 0
  j = len(str_num)-1
  while i < j:
    if str_num[i] != str_num[j]:
      return False
    i += 1
    j -= 1
  return True



# 反转
def get_sort_num(num):
  str_num = str(num)
  reversed_str =  str_num[::-1]
  return int(reversed_str)

count = 0
i = 17
while count < 100:
  if is_prime(i) and is_prime(get_sort_num(i))  and not is_palindromic(i):
    print (str(i)+" ",end="")
    count += 1
    if count % 10 == 0:
      print()
  i += 1


58.双素数

# 双素数是指一对差值为2的素数,例如3和5就是一对双素数,5和7也是一对双素数
# 输出显示小于1000的双素数


import math


# 质数
def is_prime(num):
  if num<2:
    return False
  if num == 2 or num ==3:
    return True
  if num % 2 == 0 or num % 3 == 0:
    return False
  
  sqrt_num =int(math.sqrt(num))
  k = 1
  while (6*k-1)<sqrt_num:
    if num % (6*k-1) == 0 or num % (6*k+1) == 0:
      return False
    k += 1
  return True


i = 1
while i+2 < 1000:
  if is_prime(i):
    if is_prime(i+2):
      print(f"[{i},{i+2}] ",end="")
  i += 2

59.梅森素数

# 如果一个素数可以写成2**p-1的形式,其中p是某个正整数,那么这个素数就称作梅森素数
# 输出p≤31的所有梅森素数


import math


# 质数
def is_prime(num):
  if num<2:
    return False
  if num == 2 or num ==3:
    return True
  if num % 2 == 0 or num % 3 == 0:
    return False
  
  sqrt_num =int(math.sqrt(num))
  k = 1
  while (6*k-1)<sqrt_num:
    if num % (6*k-1) == 0 or num % (6*k+1) == 0:
      return False
    k += 1
  return True


p = 1
while p < 32:
  if is_prime(2**p-1):
    print(2**p-1)
  p +=1

60.平方根的近似求法

# 平方根的近似求法
#方法:nextGuess=(lastGuess+n/lasetGuess)/2
#当nextGuess和lastGuess几乎相同时,nextGuess就是平方根的近似值
#lastGuess初始值为1,如果nextGuess和lastGuess的差值小于一个很小的数,比如0.0001,就可以认为#nextGuess是n的平方根的近似值;否则,nextGuess成为下一次计算的lastGuess,近似过程继续执行


n = eval(input("输入"))


def get_num(n,last_guess):

  nextguess = (last_guess+n/last_guess)/2
  if abs(nextguess - last_guess) <0.0001:
    return (nextguess)
  else: 
    return get_num (n,nextguess)
  

print(get_num(n,1))

demo3

61.指定等级

# 读入学生成绩,获取最高分best,然后根据下面的规则赋等级值:
# 如果:分数≥best-10,等级为A
# 如果:分数≥best-20,等级为B
# 如果:分数≥best-30,等级为C
# 如果:分数≥best-40,等级为D
# 其他情况,等级为F
# **输入输出描述**
# 输入两行,第一行输入学生人数n,第二行输入n个学生的成绩
# 输出n行,表示每个学生的成绩等级

# **示例**
# 输入:
# 4
# 40 55 70 58
# 输出:
# 学生0分数为40,等级为C
# 学生1分数为55,等级为B
# 学生2分数为70,等级为A
# 学生3分数为58,等级为B


people = int(input("输入:"))
grades = list(map(int,input("输入:").split()))


def get_people_grade(people,grades):
  if len(grades) != people:
    return "输入不合法"
  p = 0
  best = max(grades)
  for i in grades:
    if i >= best - 10:
      print(f"学生{p}分数为{i},等级为A") 
    elif i >= best - 20:
      print(f"学生{p}分数为{i},等级为B") 
    elif i >= best - 30:
      print(f"学生{p}分数为{i},等级为C")
    elif i >= best - 40:
      print(f"学生{p}分数为{i},等级为D")    
    else:
      print(f"学生{p}分数为{i},等级为F") 
    p += 1

get_people_grade(people,grades)

62.计算数字的出现次数

# 读取1到100之间的整数,然后计算每个数出现的次数

# **输入输出描述**
# 输入两行,第一行为整数的个数n,第二行为n个整数
# 输出多行,每行表示某数及其出现的次数,顺序按照数字从小到大

# **示例**
# > 输入:
# > 9
# > 2 5 6 5 4 3 23 43 2
# > 输出:
# > 2出现2次
# > 3出现1次
# > 4出现1次
# > 5出现2次
# > 6出现1次
# > 23出现1次
# > 43出现1次

n = int(input("输入:"))
nums = list(map(int,input("输入:").split()))


def count_nums(nums):
  dir_nums = {}
  nums.sort()
  for i in nums:
    if i in dir_nums.keys():
      dir_nums[i] += 1
    else:
      dir_nums[i] = 1
  return dir_nums

dir1 = count_nums(nums)
for key,value in dir1.items():
  print(f'{key}出现了{value}次')

63.打印不同的数

用集合会去重的原理秒了

# 读入n个数字,并显示互不相同的数(即一个数出现多次,但仅显示一次),数组包含的都是不同的数

# **输入输出描述**
# 输入两行,第一行为数字的个数n,第二行为n个数字
# 输出数组,包含的都是不同的数

# **示例**
# > 输入:
# > 10
# > 1 2 3 2 1 6 3 4 5 2
# > 输出:
# > 1 2 3 6 4 5

n = int(input("输入:"))
nums = list(map(int,input("输入:").split()))

def get_nums(nums):
  return  set(nums)


print(get_nums(nums))

64.最大公约数II

# 输入n个数字,求该n个数字的最大公约数
# **输入输出描述**
# 输入n个整数
# 输出最大公约数

# **示例**
# > 输入:9 12 18 21 15
# > 输出:3


nums = list(map(int,input("输入:").split()))
  # 求一群数字的最大公倍数,只需要将两数求出的公约数,和第三数求公约数
  
def gcd(num1,num2 ):
  """
  求两数最大公约数
  """
  if num1 == 0:
    return num2
  return gcd(num2 % num1,num1 )

def get_nums(nums):
  """
  调用gcd方法求多数的最大公约数
  """
  result = nums[0]
  for num in nums[1:]:
    result = gcd(result,num)
  return result


print(get_nums(nums))

 65.打乱数组

random.shuffle : 可以随机打乱数组

所以用random秒了

# 编程程序,对给定的数组进行随机打乱,并输出打乱后的结果


import random
list1 = [1,2,3,4,5,6,7,8]


def change_nums(list1):
  random.shuffle(list1)
  return list1

print(change_nums(list1))

66.是否有序

# 编写程序,对给定的数组进行判断,判断其数组元素是否非单调递增

# **输入输出描述**
# 第一行输入测试数据组数T,接下来有2T行,每第一行表示数组长度n,每第二行有n个元素
# 输出T行,表示该数组是否有序

# **示例**
# 输入:
# 3
# 5
# 1 2 3 4 5
# 4
# 3 1 2 4
# 5
# 1 2 2 3 4

# 输出:
# YES
# NO
# YES


import sys


def is_reduce(nums):
  for i in range(1,len(nums)):
    if nums[i-1] > nums[i]:
      return "no"
  return "yes"


t = int(input("输入个数:"))
result = []
for i in range(t):
  len1 = int(input("输入长度:"))
  list1 = list(map(int,input("输入内容:").split()))
  if len(list1) >len1:
    print("输入数据不合法")
    sys.exit()
  result.append( is_reduce(list1))
print(result)



67.相似词

68.豆机器

编写程序模拟豆机器,提示用户输入小球的个数以及机器的槽数,打印每个球的路径模拟它的下落,然后打印每个槽子中小球的个数

# 输入两个数据,分别表示小球个数和槽子的个数
# 输出每个小球经过的路径,和最终每个槽子里小球的个数(因为牵扯随机数,程序结果不唯一,示例仅用于表明题意)

# **示例**
# > 输入:
# > 5 8
# > 输出:
# > LRLRLRR
# > RRLLLRR
# > LLRLLRR
# > RRLLLLL
# > LRLRRLR
# > 0 0 1 1 3 0 0 0


import random


def get_place(ball, box):
    list1 = list(0 for _ in range(box))

    while ball:
        place = 0
        high = box - 1
        while high:
            get_num = random.choice([-1, 1])
            if get_num == -1:
                if place < 0:
                    place = 0
                print("L", end="")

            else:
                print("R", end="")
                place += get_num
            high -= 1
        ball -= 1
        list1[place] += 1
        print("")
    print(list1)


if __name__ == '__main__':
    balls, boxs = map(int, input("输入:").split())
    get_place(balls, boxs)

#69、更衣室难题

70、合并两个有序数组

# 给定两个有序递增的数组A和数组B,将其进行合并成一个新的数组C,且保持有序递增,并输出数组C
# **输入输出描述**
# 第一行输入数组A的长度n,第二行输入n个元素,第三行输入数组B的长度m,第四行输入m个元素
# 输出数组C的n+m个元素


list1_len = int(input("长度"))
list1 = list(map(int, input("元素").split()))
list2_len = int(input("长度"))
list2 = list(map(int, input("元素").split()))


def joint_list(list1, list2):
    list_jointed = list1 + list2
    list_jointed.sort()
    return list_jointed


print(joint_list(list1, list2))

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值