Python初学者的50题练习(持续更新)

1、输出100以内的偶数:

第一个循环,就是常规的算法,这都能看懂,第二个和第三个是一种取巧的奇数偶数找法。

list = []
list1 = []
list2 = []
list3 = []
for i in range(1,100):
    if i % 2!=0:
        list.append(i)
    if i % 2==0:
        list1.append(i)
for j in range(1,100,2):
    list2.append(j)
for k in range(2,100,2):
        list3.append(k)
print("偶数为:",list1)
print('奇数为:',list2)
print("偶数为:",list)
print("偶数为:",list3)

2、判断是质数还是合数

s = int(input('请输入一个自然数'))
flag = False
for i in range (2,s):
    if s % i ==0:
        flag = True
        break
if flag :
    print("这是合数")
else:
    print("这是质数")

3、用递归和普通方法求阶乘

#非递归
n = 10
sum = 1
for i in range(1,n+1):
    sum *= i
print(sum)
#递归
def jiecheng(num):
    if num ==1 :
        return 1
    else:
        return num * jiecheng(num-1)
print(jiecheng(n))

4、输入一个数,求从这个数开始每个数阶乘的和。

这里引入一个python的函数,属于math函数,就是用来求阶乘的。注释部分有根据上述两种方法调用,求阶乘和的案例。

k = int(input('请输入一个自然数:'))
import math
sum = 0
for i in range(1,k+1):
    sum += math.factorial(i) #q求阶乘的函数
#非递归求阶乘
# def jiecheng(n):
#     a = 1
#     for i in range(1,n):
#         a *= i+1
#     return a
# k = int(input('请输入一个自然数:'))
# sum = 0
# for j in range (1,k+1):
#     print(jiecheng(j))
#     sum += jiecheng(j)

#递归求阶乘
# def jiecheng1(n):
#     if n == 1:
#         return n
#     else :
#         return n*jiecheng1(n-1)
# k = int(input('请输入一个自然数:'))
# sum = 0
# for j in range (1,k+1):
#     sum += jiecheng1(j)
print(sum)

5、圆的周长和面积

import math
print(math.pi)
pi = 3.14
r = float(input("请输入圆的半径:"))

c = 2 * pi * r
s = pi * r * r
print("圆的周长是:",c)
print("圆的面积是:",s)

6、勾股定理

import math
a = int(input('请输入第一条边长:'))
b = int(input('请输入第二条边长:'))
m = a**2 + b**2
c = math.sqrt(m)
print('第三条边长为:',c)

7、三个数比大小

采用了传统C的赋值方法和python独有的赋值方法。

a = int(input('请输入第一个数:'))
b = int(input('请输入第二个数:'))
c = int(input('请输入第三个数:'))
# list = [a,b,c]
# list1 = sorted(list)
# print(f"三个数从大到小的顺序是:{list1[0]}、{list1[1]}、{list1[2]}")
if a<b :
    # max = b
    # b = a
    # a = max
    a,b=b,a
if a < c :
    # max = c
    # c = a
    # a = max
    a,c=c,a
if b < c :
    # max = c
    # c = b
    # b = max
    b,c=c,b



print("三个数从大到小的顺序是:",a,b,c)

8、找出区间内的素数

def prime(n):
    flag =True
    for i in range(2,n):
        if n % i == 0:
            flag = False
            break
    return flag
a = int(input('请输入左端点数:'))
if a < 2:
    a=2
b = int(input('请输入右端点数:'))
list = []
for i in range(a,b):
    if prime(i):
        list.append(i)
print(list)
print(len(list))

9、输出1-4这四个数字,随机三个数字组合起来,有多少种不同组合:

def prime(n):
    flag =True
    for i in range(2,n):
        if n % i == 0:
            flag = False
            break
    return flag
a = int(input('请输入左端点数:'))
if a < 2:
    a=2
b = int(input('请输入右端点数:'))
list = []
for i in range(a,b):
    if prime(i):
        list.append(i)
print(list)
print(len(list))

10、打印乘法口诀表

for i in range(1,10):
    print()
    for j in range(1,i+1):
        a = i*j
        print(f"{i}*{j}={a}",end = ' ')

11、打印水仙花数

水仙花数是指一个 3 位数,它的每个数位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。

n=457
a1 = n % 10
b1 = n % 100 //10
c1 = n // 100
print(a1,b1,c1)
for i in range(100,1000):
    a = i//100
    b = (i-a*100)//10
    c = i-a*100-b*10
    if i == a**3 + b**3 + c**3 :
        print(i)

12、反向输出四位数

a = int(input('请输入四位数:'))
a = str(a)
a = a[::-1]
a = int(a)
print(a)

13、判断字母

a = int(input('请输入四位数:'))
a = str(a)
a = a[::-1]
a = int(a)
print(a)

14、判断三条边长能否构成三角形

a = int(input('请输入第一条边长:'))
b = int(input('请输入第二条边长:'))
c = int(input('请输入第三条边长:'))
if c>0 and b>0 and a>0:
    if a+b>c and a+c>b and b+c>a:
        print('可以构成三角形的三条边')
    else:
        print('不符合三角形的三条边')
else:
    print("你输入有误,请重新输入")

15、输出1000以内的完数

for i in range(1,1000):
    sum = 0
    for j in range(1,i):
        if i % j ==0:
            sum += j
           # print(sum(list))
    if i == sum:
        print(i)

16、质数的因子

a = int(input('请输入一个自然数'))
list = []
i = 2
while(i!=a):
    if a % i == 0 :
        list.append(i)
        a = a / i
    else:
        i +=1
list.append(int(a))
#print(list)
for i in list:
    print(i,end=' ')

17、根据三边边长求三角形面积(海伦公式)

import math
a = int(input('请输入第一条边长:'))
b = int(input('请输入第二条边长:'))
c = int(input('请输入第三条边长:'))
if c>0 and b>0 and a>0:
    if a+b>c and a+c>b and b+c>a:
        print('可以构成三角形的三条边')
        p = (a + b + c) / 2
        s = math.sqrt(p * (p - a) * (p - b) * (p - c))
        print('该三角形面积是',s)
        print('该三角形面积是%.2f' %s)
    else:
        print('不符合三角形的三条边')
else:
    print("你输入有误,请重新输入")

18、判断某年某天

import datetime
#print('输入格式为年 月 日' )
#map() 会根据提供的函数对指定序列做映射。
#第一个参数 以参数序列中的每一个元素调用该函数,返回包含每次函数返回值的新列表。
#year,month,day = map(int,input().split(" "))
year = int(input('请输入年份'))
month = int(input('请输入月份'))
day = int(input('请输入日期'))
yuandan = datetime.datetime(year,1,1)
#print(yuandan)
now = datetime.datetime(year,month,day)
#print(now - yuandan)
#.days取的是相差多少天属于timedelta类
print((now - yuandan).days +1)

19、根据汽车轮胎标识推断生产日期

# 引入datetime模块
import datetime
# 定义一个函数,输入轮胎的日期编码,输出这一周的周一是几月几号
def tire_date(code):
    # 检查输入是否为四位数字
    if not code.isdigit() or len(code) != 4:
        print("请输入正确的日期编码")
        return
    # 提取周数和年份
    week = int(code[:2])
    year = int(code[2:])
    year +=2000
    # 检查周数是否在1-52之间
    if not 1 <= week <= 52:
        print("请输入正确的日期编码")
        return
    # 计算轮胎生产日期
    date = datetime.date(year, 1, 1) + datetime.timedelta(days=(week-1)*7)
    # 计算这一周的周一的日期
    monday = date - datetime.timedelta(days=date.weekday())
    if monday.month ==12:
        print(f"{code}表示轮胎是在{year}年的第{week}周生产的,这一周的周一是{year-1}年{monday.month}月{monday.day}号")
    else:
        print(f"{code}表示轮胎是在{year}年的第{week}周生产的,这一周的周一是{monday.month}月{monday.day}号")

luntai=input('请输入轮胎代码')
tire_date(luntai)

20、佩波纳契数列

#递归
def fib(N):
    if N == 1 or N == 2:
        return 1
    else :
        return fib(N-1)+fib(N-2)
print(fib(6))

#非递归
n = 6
list = [1,1]
for i in range(2,n):
    list.append(list[i-1]+list[i-2])
print(list[n-1])

21、华氏度和摄氏度转换.

#华氏度=摄氏度*1.8+32
a = int(input('摄氏度转华氏度按1,华氏度转摄氏度按2:'))
b = float(input('请输入温度'))
if a==1:
    F = b *1.8 + 32
    print("摄氏度为 %.2f"%F)
if a == 2:
    C = (b - 32) /1.8
    print("摄氏度为%.2f"%C)

22、复制列表

#浅拷贝,浅拷贝是指列表的快捷方式
list1 = [1,2,3,4,5,6]
#
# list2 = list1
#
# list1[0]=100
#
# print(list2)

#全部复制除了用循环就是cpoy模块
import copy
list3 = copy.copy(list1)
list1[0]=100
print(list3)

23、反转列表.
 

list = [1,2,3,4,5,6,7,8]
list3= [1,2,3,4,5,6,7,8]
#方法一reverse方法
list3.reverse()
print(list3)

#方法二切片:[::-1]
list1 = list[::-1]
print(list1)

#方法三:for循环
list2 = []
for i in range(len(list)):
    list2.append(list[len(list)-i-1])
print(list2)

24、暂停功能(以输出代替,适合写脚本使用)

import time
start = time.time()
time.sleep(2)
print('this is sleep')
end = time.time()
print(end-start)

25、成绩判断

def fun1(a,b):
    if a ==b :
        return a
    num = min(a,b)
    while a %num !=0 or b%num !=0:
        num -=1
    return num
def fun2(a,b):
    while b!=0:
        a,b=b,a%b
    return a
print(fun1(12,18))
print(fun2(12,18))

26、统计字符串的字符数量(计算字符串长度)

a = input("请输入字符串:")
#1、传统计数
count = 0
for i in a:
    count +=1
print(count)
#2len()函数
print(len(a))

27、落体反弹

#高度100米,小球反弹,每次反弹的高度是上一次的一半,第10次,小球高度是
count = 0
n = 100
list = []
while count <=10 :
    if count == 0 :
        list.append(n)
        n /=2
        count +=1
    else :
        list.append(n)
        n /=2
        count+=1
print(list)

28、猴子吃桃

注释部分是正向验证结果所用

#猴子第一天吃了所有桃子的一半,第二天吃一半多一个,以此类推,第十天发现只剩下一个了,问一共有多少桃子
# n = 1534+1534
# count =1
# list= []
# while count <= 10:
#     if count ==1:
#         n=n/2
#         list.append(n)
#         count +=1
#     else:
#         n = n - (n/2 +1)
#         list.append(n)
#         count += 1
# print(list)
s = 1
d = 10
while d >= 1 :
    if d ==1:
        s = s *2
        d -=1
        print(s)
    else :
        s = 2*(s+1)
        d -=1
        print(s)

29、指定数列求和

##分数数列2/1、3/2、5/3、8/5、13/8、21/13、。。。。求这个数列前10项之和
fenzi =2
fenmu =1
sum = 0
for i in range (20):
    sum += fenzi / fenmu
    a = fenmu
    fenmu = fenzi
    fenzi = fenzi + a 
    print(fenzi,"/",fenmu)
print(sum)

30、年龄急转弯

#第一个人十岁,第二个人比第一个人大两岁,第三个人比第二个人大两岁,第四个人比第三个人大两岁以此类推
#锻炼递归,求第五个人年龄
i = 1
def old(i):
    if i == 1:
        return 10
    else :
        return old(i-1)+2
print(old(5))

31、回文数

#正着读反着读是一样的数比如12321
x = str(input('请输入一个数'))

y = x[::-1]

if x==y:
    print('是回文数')
else:
    print('不是回文数')

32、练习判断(根据简写判断星期几)

#星期一(Monday)、星期二(Tuesday)、星期三(Wednesday)
# 星期四(Thursday)、星期五(Friday)、星期六(Saturday)、星期日(Sunday)
a = input('请输入第一个字母')

if a =='M':
    print('周一')
elif a == 'T':
    b = input('请输入第2个字母')
    if b == 'u':
        print('周二')
    elif b == 'h':
        print('周四')
    else:
        print('错误的输入')
elif a=='W':
    print('是周三')
elif a == 'F':
    print('是周五')
elif a == 'S':
    c = input('请输入第2个字母')
    if c == 'u':
        print('周6')
    elif c == 'a':
        print('周日')
    else:
        print('错误的输入')
else:
    print('错误的输入')

33、对十个数进行排序

a = map(int,input().split())
a = list(a)
a.sort()
print (a)
'''a = map(int,input().split()):这一行使用了map和input两个内置函数。input函数用于从用户输入中获取一行字符串,例如"1 3 5 2 4"。split方法用于将字符串按照空格分割成一个列表,例如["1", "3", "5", "2", "4"]。map函数用于对列表中的每个元素应用一个函数,这里是int函数,它可以将字符串转换成整数。因此,这一行的结果是一个map对象,它包含了用户输入的整数,例如[1, 3, 5, 2, 4]。
a = list(a):这一行使用了list函数,它可以将一个map对象转换成一个列表。这样做的目的是为了方便后续的操作,因为map对象只能被遍历一次,而列表可以被多次使用。因此,这一行的结果是一个列表,它和上一行的map对象相同,例如[1, 3, 5, 2, 4]。
a.sort():这一行使用了列表的sort方法,它可以对列表中的元素进行升序排序。这是一个原地操作,也就是说,它会直接修改列表a,而不会返回一个新的列表。因此,这一行的结果是对列表a进行排序,例如[1, 2, 3, 4, 5]。
print (a):这一行使用了print函数,它可以将一个对象打印到标准输出中,也就是屏幕上。这里打印的对象是列表a,它是排序后的列表,例如[1, 2, 3, 4, 5]。这一行的结果是在屏幕上显示排序后的列表,例如[1, 2, 3, 4, 5]。'''

34、主对角线元素之和

a = []
sum = 0
for i in range(3):
    a.append([])#大列表里面新放入一个列表,表示我新放进一行
    for j in range(3):
        k = int(input('请按行输入数据'))
        a[i].append(k)
        if i == j:
            sum += k
print(a)
print("对角线之和是",sum)

35、有序列表添加元素

list = [1,2,20,100,300,500,1000,5000]
n = int(input('请输入数据'))
#投机方法

# list.append(n)
# list.sort()


#普通方法
for i in range(0,len(list)):
    if n > list[i]:
        i+=1
    else:
        list.insert(i,n)
        break

print(list)

36、随机数猜大小小游戏的完整设计

import random
def roll_dice(numbers=3,points=None):
    if points is None:
        points = []
    while numbers > 0:
        #point = random.randrange(1,7)
        point = random.randint(1,7)
        points.append(point)
        numbers =numbers - 1
    return points

def roll_result(total):
    isBig = 11 <= total <=18
    isSmall = 3 <= total <=10
    if isBig:
        return 'Big'
    elif isSmall:
        return 'Small'

def start_game():
    print('<<<<< GAME STARTS! >>>>>')
    choices = ['Big','Small']
    your_choice = input('Big or Small :')
    if your_choice in choices:
        points = roll_dice()
        total = sum(points)
        youWin = your_choice == roll_result(total)
        if youWin:
            print('The points are',points,'You win !')
        else:
            print('The points are',points,'You lose !')
    else:
        print('Invalid Words')
        start_game()
start_game()

37、二进制运算中的与、或、异或、按位取反

#与运算(相同为0不同为1)符号是  &
print((255&255))
#或(有一个1即为1)符号是 |
print((255|255))
#异位运算(不同为1,相同为0)符号是^
print((255^240))

#按位取反(如果对正数X取反等同于-(X+1))符号是~
print((~-3))
print((~3))

38、杨辉三角

n = 10
y = []
for i in range(0,n):
    yh = [] #每一行的元素
    for j in range(0,i+1):
        if j==0 or j == i:
            yh.append(1)
        else :
            yh.append(y[i-1][j-1] + y[i-1][j])
    y.append(yh)
    print(yh)

39、统计第一个出现三次的字符(字典的练习)

a = 'world is big i want to see'
m = -1
freq = dict()
for i in a:
    if i in freq:
        freq[i] +=1
    else :
        freq[i] =1
for j in range(len(a)):
    if freq[a[j]]==1:
        m = j
        break
if m==-1:
    print('NO')
else:
    print('是第',m+1,'个字符,字符是:',a[m])

40、查找字符串

a = "apple monday house"
b = "house"
c = " "
d = "a"
e = "housp"
print('查找到了,就返回字符串首个字母索引',a.find(b))
print('查找不到了,就返回-1',a.find(e))
print(a.find(c))

41、最大公因数

def fun1(a,b):
    if a ==b :
        return a
    num = min(a,b)
    while a %num !=0 or b%num !=0:
        num -=1
    return num
def fun2(a,b):
    while b!=0:
        a,b=b,a%b
    return a
print(fun1(12,18))
print(fun2(12,18))

42、两个列表不同元素的查找并显示出来

#第一个列表是123456
#第二个列表是1,1,2,5,5,1
list2 = [1,1,2,5,5,1]
list1 = [i for i in range(1,len(list2)+1)]
list3 = []
for j in list1:
    if j in list2:
        continue
    else:
        list3.append(j)
print(list3)

43、字符串的字符查找和替换:

def tihuan(a,b,c):
    t=''
    for i in a:
        if i ==b:
            t +=c
        else:
            t +=i
    return t
mm='hello usa was bitch'
s='u'
k='k'
print(tihuan(mm,s,k))

44、快乐数

def change(x):
    sum = 0
    while x>0:
        j = x %10#该数字对10的余数,取的是个位数

        sum+=j*j#平方的和
        x //=10#将数字的最后一位去掉(整除10,去掉余数)
    return sum
def happynumber(n):
    while n >9:
        n = change(n)
    if n ==1 or n==7:
        return True
    else:
        return False
print(happynumber(45))

45、立方根

import math
def pow(x):
    result = math.pow(x,1/3)
    return int(result)


print(pow(27))

46、寻找列表里每一个字符串都有的最长前缀部分.py

def qianzhui(list2):
    x = len(list2)
    if x==0:
        return'没有'
    #本质上该循环是拿第一个字符串和后面所有的字符串去比
    for i in range(len(list2[0])):
        #把第一个字符串里的每一个字符掏出来逐步向上加直到全部加上
        temp = list2[0][i]
        #对每一个字符串从首字母开始进行轮询
        for j in range(1,x):
            #排除首位字母不相等情况
            if list2[0][0]!=list2[j][0]:
                return '没有'
            #判断最短的字符串是不是遍历完了或者出现不一样的字符了
            if i == len(list2[j]) or temp != list2[j][i]:
                return list2[0][0:i]
    return list2[0]
list = ['abcdee','abcdsss','abce123','a1bc']
print(qianzhui(list))

47、字符串内的单词顺序倒转并大小写互换

def aaa(s):
    #切割字符串里的单词
    list = s.split(' ')
    #列表元素的位置颠倒过来
    list = list[::-1]
    s = ''
    for i in list:
        #用于进行每个字符的大小写替换
        i = i.swapcase()
        s+=i
        s+=' '
    return s

print(aaa('UK IS England and Scotland'))

48、字符串中的连续字符压缩

#eg:aaaaabcccd变为a5bc3d
def func(s):
    list= []
    for i in s:
        if not list or list[-2]!=i :
            list.append(i)
            list.append(1)
        else:
            list[-1] +=1
    return ''.join(map(str,[x for x in list if x!=1]))
print(func('aaaaabcccd'))

49、无序数组选择三个数使乘积最大

def shuzumax(list):
    #sort函数是列表的一个默认函数,会将原列表按照从小到大的顺序直接排序
    list.sort()
    #这个意思是,如果全是正数最大的三个正数
    #如果有正有负,则最佳组合必为上下两种算法其中之一
    #如果全是负数则取两个最小的负数和一个正数相乘
    return max(list[0]*list[1]*list[-1],list[-1]*list[-2]*list[-3])


print(shuzumax([-1,-2,3,4,-5,-6,-7]))

50、循环的练习--密码验证器

# count = 0
# while True:
#     print('Repeat this line !')
#     count = count + 1
#     if count == 5:
#         break
# #重置密码的功能+三次输入错误禁止再次输入
# password_list = ['*#*#','12345']
# def account_login():
#     countp = 0
#     while(countp<3):
#         password = input('Password:')
#         password_correct = password == password_list[-1]
#         password_reset = password == password_list[0]
#         if password_correct:
#             print('Login success!')
#         elif password_reset:
#             new_password = input('Enter a new password:')
#             password_list.append(new_password)
#             print('Your password has changed successfully!')
#             account_login()
#         else:
#             countp=countp+1
#             print('Wrong password or invalid input!')
#     else:
#         print("error")
# account_login()
password_list = ['*#*#','12345']
def account_login():
    tries = 3
    while tries > 0:
        password = input('Password:')
        password_correct = password == password_list[-1]
        password_reset = password == password_list[0]
        if password_correct:
            print('Login success!')
        elif password_reset:
            new_password = input('Enter a new password :')
            password_list.append(new_password)
            print('Password has changed successfully!')
            account_login()
        else:
            print('Wrong password or invalid input!')
            tries = tries - 1
            print( tries, 'times left')
    else:
        print('Your account has been suspended')
account_login()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值