廖老师Python题目整理


声明:所有资料都是从廖老师那里搬运来的,本人就是整理下方便大家复习,感谢廖老师的辛苦付出

一、知识点整理

import math

math.sqrt(25)   # 求()的平方根,答案为5
ord('A')        # 求()的ASCLL码值,答案为65,注:'a'的ASCLL码为97
len([1,2,3,None,(),[],]) #求()的长度,答案为6,注:空列表也算一个元素
pow(x,n)  #求x的n次方,注:等同于幂运算符x**2
abs(-76)  #求()的绝对值,答案为76
math.cos(x) #求cosx的值

二、循环

1.求1-100的所有数的和

sum = 0 # 累加和
for i in range(1,101):
    sum+=i
print('1-100的所有整数之和为:',sum)

2.输出 1-100 之间的所有偶数

#遍历1-100的整数
for i in range(1,101):
    # 如果i可以被2整除、则打印
    if i%2 == 0:
        print(i)

3.求1-2+3-4+5 … 99的所有数的和

sum = 0 # 累加和
for i in range(1,100):
    # 如果i是奇数、则相加
    if i%2 == 1:
        sum+=i  # 完整形式:sum = sum + i
    # 否则i就是偶数、则相减
    else:
        sum-=i  # sum = sum - i
print(sum)

4.打印1-100之间除了含7和7的倍数以外的数字

for i in range(1,101):
    # 如果不是7的倍数、则打印
    if i%7 != 0:
        print(i,end=' ')

5.编写程序用户登录程序且仅有三次机会

name = "admin"
password = "123456"
for i in range(3):
    input_name = input("请输入用户名:")
    input_password = input("请输入用户密码")
    if input_name == name and input_password == password:
        print("登录成功")
        break
    else:
        print("登录失败,请重新输入!")       
else:        
    print("您已经失败三次,无法登录了!")

6.求阶乘s=10! (即s=123456789*10)的结果

sum = 1  # 累乘积
for i in range(1,11):
    sum*=i
print('10!为:',sum)

7.棋盘放麦粒问题

用米粒填充国际象棋盘:有个很古老的传说,那时候象棋刚刚发明出来,阿拉伯的一个国王一下就迷上了,觉得应该重奖发明这个游戏的人,结果发明者来了,他让人家提要求,人家说棋盘上第一个格放1粒麦子,第二个格2粒,第三格4粒,第四格8粒,这样类推下去,最后一个格也放满(总共有64格),最后把这些麦粒奖给他,国王欣然同意,觉得这个人很厚道,不漫天要价,结果按照这个规律装麦粒的时候才发现,原来全国粮仓里的麦子也不够用。这就是典型的数量级上的错误。

sum = 0  # 累加和
wheat_number = 1 # 麦粒数量、第一次是一颗
# 循环64次即可
for i in range(64):
    sum+=wheat_number
    wheat_number*=2  # 每次麦粒增多为两倍
print(f'一共装了{sum}粒麦子')

8.百钱买百鸡

百钱买百鸡,现有100文钱,公鸡5文钱一只,母鸡3文钱一只,小鸡一文钱3只,要求:公鸡,母鸡,小鸡都要有,把100文钱买100只鸡,买的鸡是整数。多少只公鸡,多少只母鸡多少只小鸡?(穷举法应用)

print('公鸡\t母鸡\t小鸡')
for gj_num in range(1,21):
    for mj_num in range(1,34):
        for xj_num in range(1,301):
            if gj_num*5 + mj_num*3 + xj_num*1/3 == 100:
                print(gj_num,'\t',mj_num,'\t',xj_num)

9.换钞票问题

将一张100元钞票兑换成面值分别为20元、10元和5元的钞票,要求每种至少有一张,共有多少种不同的换法并输出所有可能的换法。

print('20元\t10元\t5元')
for y20_num in range(1,6):
    for y10_num in range(1,11):
        for y5_num in range(1,21):
            if y20_num*20+y10_num*10+y5_num*5==100:
                print(y20_num,'\t',y10_num,'\t',y5_num)

10.找出10~100之间能被6、9除,余数是3 的所有整数

for dm_num in range(0,34):
    for zm_num in range(0,51):
        for xm_num in range(0,201):
            if dm_num+zm_num+xm_num==100 and dm_num*3 + zm_num*2 + xm_num*0.5 ==100:
                print(dm_num,zm_num,xm_num)

11.计算水仙花数

输出100~999之间的“水仙花数”。所谓“水仙花数”,是指该数等于各位数字的立方和,如407=4**3+0**3+7**3

# 遍历100-999
for i in range(100,1000):
    # 将i转换成字符串,通过字符串的索引取出个位,十位,百位
    # 然后再转为回整数,方便后面的运算
    i1 = int(str(i)[0])
    i2 = int(str(i)[1])
    i3 = int(str(i)[2])
    if i1**3+i2**3+i3**3==i:
        print(i)

三、期中复习题整理

1.输⼊⼀个字符串,将字符串中所有的数字字符取出来产⽣⼀个新的字符串,例如:输⼊’abc1shj23kls99+2kkk’ 输出:’123992’

str1 = 'abc1shj23kls99+2kkk'
str2 = ''

for i in str1:
    if '0'<=i<='9':
        str2 += i

print(str2)

2.输⼊⼀个字符串,将字符串中所有的⼩写字母变成对应的⼤写字母输出 (⽤upper⽅法和⾃⼰写算法两种⽅式实现),例如: 输⼊**’a2h2klm12+’ ** 输出 ‘A2H2KLM12+’

for i in str1:
    if '0'<=i<='9':
        str2 += i

print(str2)

3.输⼊⼀个字符串,将字符串中所有的⼩写字母变成对应的⼤写字母输出 (⽤upper⽅法和⾃⼰写算法两种⽅式实现),例如: 输⼊**’a2h2klm12+’ ** 输出 ‘A2H2KLM12+’

str1 = 'a2h2klm12+'
print(str1.upper())

4.从键盘上输入两个字符串,把这两个字符串中的公共字符输出。

str1="asdjhkbvfsa41561"
str2="dagbshfbjh2289bgf"
s_public = ''

for i in str1:
    if i in str2:
        s_public += i

print(s_public)

5.从键盘上输入两个字符串,要求用空格覆盖第一个字符串中含有的第二个字符串中的所有字符,然后将结果输出(要求输出宽度为第一个字符串长度的两倍,不足的以”-“填充,居中对齐)

str1="asdjhkbvfsa41561"
str2="dagbshfbjh2289bgf"

for i in str1:
    if i in str2:
        str1 = str1.replace(i,' ')

print(str1)

6. 输⼊⼀个字符串,统计字符串中⾮数字字母的字符的个数,例如: 输⼊’anc2+93-sj胡说’ 输出:4 输⼊’===’ 输出:3

str1 = "anc28*9$3$sj"
count = 0
for i in str1:
    if i.isalnum() == False:
        count += 1

print(count)

7.输⼊字符串,将字符串的开头和结尾变成’+’,产⽣⼀个新的字符串,例如: 输⼊字符串’abc123’, 输出’+bc12+’

str1 = 'abc123'

print('+'+str1[1:-1]+'+')

8.请编写⼀个程序,请将字符串中所有字母全部向后移⼀位,最后⼀个字母放在字符串的开头,最后将新的字符串输出

str1 = "ABCDEFG"

print(str1[-1]+str1[:-1])

9.根据下述要求,编写⼀个程序:⽤户输⼊⼀个字符串,将下标为偶数的字符提出来合并成⼀个新的字符串A,再将下标为奇数的字符提出来合并成⼀个新的字符串B,再将字符串A和B连接起来并输出。

str1 = "A1B2C3D4E5"
#       0123456789

print(str1[::2])
print(str1[1::2])
print(str1[::2] + str1[1::2])

10.判断用户名是否合法,从键盘上输入一个用户名,要求用户名需以“百”开头而且只能由数字或者字母(含汉字)组成,用户名的长度为6-15位(包括6和15)

name = "百痴456124"

if name.startswith("百") == True and name.isalnum() == True and 6<=len(name)<=15:
    print("合法")
else:
    print("不合法")

11.从键盘输入 1 个正整数,把这个整数的各位数字重新组合,形成一个位数不变的最大数和最小数,并计算最大数与最小数的差。x=int(input(‘请输入一个任意正整数’))

str1 = "2286413"

min = ''.join(sorted(str1))
print(min)

max = ''.join(sorted(str1,reverse=True))
print(max)

print(int(max) - int(min))

12.产生一个列表,其中有 40 个元素,每个元素是 50 到 100 的一个随机整数。如果这个列表中的数据代表着某个班级 40 人的分数,请计算成绩低于平均分的学生人数对上面的列表元素从大到小排序并输出

import random

scope_list = []
for i in range(40):
    scope_list.append(random.randint(50,100))

print("40个人的分数是:",scope_list)

ave_scope = sum(scope_list)/len(scope_list)
print(ave_scope)

less_list = []
for i in scope_list:
    if i < ave_scope:
        less_list.append(i)
print(len(less_list))

less_list.sort(reverse=True)
print(less_list)

13.给定一个列表,求最大值(不能使用系统求最值函数),求最小值,求平均值、求和ls=[10,20,25,45,50,55,13,23]

ls=[10,20,25,45,50,55,13,23]

max = ls[0]
for i in ls:
    if i > max:
        max = i
print(max)

min = ls[0]
for i in ls:
    if i < min:
        min = i
print(min)

print(sum(ls)/len(ls))
print(len(ls))

14.根据用于指定月份,打印该月份所属的季节。提示: 3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季

month = input('Month:')

if month in ['3','4','5']:
    print('春天')
elif month in ['6','7','8']:
    print('夏天')
elif month in ['9','10','11']:
    print('秋天')
elif month in ['12','1','2']:
    print('秋天')
else:
    print('别乱输行吗?')

15.输入某年某月某日(yyyy-MM-dd),判断这一天是这一年的第几天?cal = input(‘输入日期 yyyy-mm-dd:’)

cal = "2000-12-25"
arr = [31,28,31,30,31,30,31,31,30,31,30,31]
#       0  1  2  3  4  5  6  7  8  9  10 11

cal_list = cal.split('-')
month = int(cal_list[1])
day = int(cal_list[2])

count = 0
for i in range(month-1):
    count += arr[i]
    print(arr[i])

count += day
print(count)

16.将list中的重复数据去重,至少使用两种方案,方法一用set消除重复元素

ls =[10,20,25,20,60,65,25]
print(list(set(ls)))

17.输入一个五位正整数,判断是否是回文数。例如:12321是回文数。方法一:(利用def定义函数,数字分离各位数进行判断)

number = '12345'

if number[::-1] == number:
    print(number,'是一个回文数')
else:
    print(number,'不是一个回文数')

18.如果两个素数之差为2,这样的两个素数就叫作”孪生数”,找出100以内的所有”孪生数”

# 判断一个数是不是素数
def isSuShu(number):
    flag = True # 一开始假定是一个素数
    for i in range(2,number):
        if number % i == 0:
            flag = False
            break
    return flag

#判断2-100之间的素数
sushu_list = []
for i in range(2,101):
    if isSuShu(i) == True:
        sushu_list.append(i)
print(sushu_list)

# 判断1-100之间的孪生数
for i in range(2,101):
    if isSuShu(i) and isSuShu(i+2):
        print(i,i+2)

19.满天星

import turtle as t
import random

t.screensize(800,800)
t.bgcolor('black')
t.speed(0)
t.colormode(255)
for i in range(100):
    t.penup()
    t.goto(random.randint(-400,400),random.randint(-400,400))
    t.pendown()
    #画一个随机颜色的五角星
    random_color = [random.randint(0,255),random.randint(0,255),random.randint(0,255)]
    t.pencolor(random_color)
    t.fillcolor(random_color)
    t.begin_fill()
    for i in range(5):
        t.fd(20)
        t.rt(144)
    t.end_fill()

t.done()

版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 廖老师、彭韦浩(整理) !
  目录