大家好,我是Python领域的博主。
如果你是编程爱好者可以小编一起学习,在这里我每天都会发Python的基础知识,以及相关的代码。
如果文章有什么错误的地方,请不吝赐教。
觉得博主文章写的还错的话,请三连支持一下博主哦
我一直坚信一句话:我相信努力一定会有回报,这个回报可能很慢,但请相信,只要你坚持下去一定会更好的。
系列专栏:
1.与7无关的数
类型:流程控制
描述
一个正整数,如果它能被7整除,或者它的十进制表示法中某一位的数字为7,则称其为与7相关的数、 求所有小于n(n < 100)的与7无关的正整数以及他们的平方和。
输入格式
输入为一个正整数
输出格式
两行 第一行为所有与7无关的数,以列表形式输出,逗号分开 第二行为他们的平方和
示例
输入:
30
输出:
[1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 15, 16, 18, 19, 20, 22, 23, 24, 25, 26, 29]
6067
n=int(input())
ls=[]
s=0
for i in range(n):
if not (i%7==0 or i//10==7 or i%10==7):
ls.append(i)
s=s+i*i
print(ls)
print(s)
2.百钱买百鸡B
类型:流程控制
描述
我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,如果要求鸡翁、鸡母、鸡雏都不为零,问鸡翁、鸡母、鸡雏各几何。
现在的问题是:用户输入鸡的数量和钱数,鸡翁、鸡母、鸡雏各为多少?如果有解,输出全部解,并按鸡翁数量由少到多的顺序输出;如果无解则输出“无解”。
输入格式
用户在同一行内输入用空格分隔的两个正整数,分别表示鸡的数量和钱数
输出格式
每行输出一组结果,按鸡翁数、鸡母数、鸡雏数的顺序输出;
有多组解时,按鸡翁数量由少到多输出;
如果无解则输出“无解”。
示例 1
输入:
40 100
输出:
2 29 9
6 22 12
10 15 15
14 8 18
18 1 21
num, money = map(int, (input().split()))
flag = 0
for x in range(1, money // 5 + 1):
for y in range(1, money // 3 + 1):
z = num - x - y # 鸡雏的数量等于总数减鸡翁和鸡母的数量
if z % 3 == 0 and z > 0 and 5 * x + 3 * y + z // 3 == money:
print(x, y, z)
flag = 1 # 如果找到满足的解那么flag从0变为1
# 如果找不到满足的解则输出无解
if flag == 0:
print('无解')
3.鸡兔同笼B
类型:流程控制
描述
一个笼子里面关了若干只鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外),已经知道了笼子里面脚的总数feet,则笼子里至少有多少只动物,至多有多少只动物?
输入格式
第一行输入一个正整数,表示测试数据的组数n 接下来的n行,每行一个非负整数,代表脚的数量(输入数据可能是不合理的数字)
输出格式
输出包含n行,每行对应一个输入,包含两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数间用一个空格分开 如果没有满足要求的答案,则输出用空格分隔的两个0
示例
输入:
2
3
20
输出:
0 0
5 10
n = int(input())
for i in range(n):
feets = int(input())
if feets % 4 == 0: # 如果鸡的数量是偶数
least, most = feets // 4, feets // 2
elif feets % 2 == 0: # 如果输入没错
least, most = (feets - 2) // 4 + 1, feets // 2
else: # 如果没有满足答案
least, most = 0, 0
print(least, most)
4.老鼠打洞
类型:流程控制
描述
《九章算术》的“盈不足篇”里有一个很有意思的老鼠打洞问题。原文这么说的:今有垣厚十尺,两鼠对穿。大鼠日一尺,小鼠亦一尺。大鼠日自倍,小鼠日自半。问:何日相逢?各穿几何?
这道题的意思就是说,有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打一尺,小老鼠也是一尺。大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。问它们几天可以相逢,相逢时各打了多少。
(注:本题禁止使用幂运算)
输入格式
输入1个整数,代表墙的厚度,单位为尺
输出格式
第一行输出1个整数,表示相遇时所需的天数
第二行输出2个浮点数,分别为小鼠和大鼠打洞的距离,单位为尺,保留小数点后1位数字。
示例
输入:10
输出:
4
1.8 8.2
n = int(input())
rat, mouse, day, time = 1, 1, 0, 1
distance_of_rat, distance_of_mouse = 0, 0 # 大老鼠和小老鼠的打洞距离
while n > 0:
if n - mouse - rat < 0:
time = n / (mouse + rat)
n = n - mouse - rat
distance_of_mouse = distance_of_mouse + time * mouse
distance_of_rat = distance_of_rat + time * rat
rat = rat * 2
mouse = mouse / 2
day = day + 1
print(day)
print(round(distance_of_mouse, 1), round(distance_of_rat, 1))
5.中国目前采用的是18位身份证号,其第7-10位数字是出生年,11-12位是出生月份,13-14是出生日期,第17位是性别,奇数为男性,偶数为女性,第18位是校验位。 如果身份证号码的其中一位填错了(包括最后一个校验位),则校验算法可以检测出来。如果身份证号的相邻2位填反了,则校验算法可以检测出来。校验规则如下:
- 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
- 将这17位数字和系数相乘的结果相加。
- 用加出来和除以11,看余数只可能是:0-1-2-3-4-5-6-7-8-9-10 分别对应的最后一位身份证的号码为:1-0-X-9-8-7-6-5-4-3-2
- 通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的X(大写英文字母X)。如果余数是10,身份证的最后一位号码就是2。
用户输入一个身份证号,校验其是否是合法的身份证号码:
- 输入长度是否合法
- 输入数据校验位是否合法
- 输入数据中年月日范围是否合法,考虑闰年。 如身份证号码不合法输出 '身份证校验错误', 如身份证号码合法则分别在3行中输出'身份证号码校验为合法号码'以及该人的出生年月日和性别。
输入格式
一个18位身份证号,末位为数字或大写字母X
输出格式
如身份证号码不合法输出 '身份证校验错误', 如身份证号码合法则分别在3行中输出'身份证号码校验为合法号码'以及该人的出生年月日和性别。(月份和日期均为2位数表示)
示例 1
输入:
432831196411150810
输出:
身份证号码校验为合法号码
出生:1964年11月15日
性别:男
示例 2
输入:
432831196811150810
输出:
身份证校验错误
import datetime # 导入datetime模块用于获取当年年份
def leap(year):
return True if (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0) else False
# 校验身证号中的年月日及校验码
def check_date(id_num):
"""校验身证号中的年月日,年月日值均要合法"""
# 年份超过当前年,或月份小于1或大于12,或日期小于1或大于31时非法
if int(id_num[6:10]) > datetime.datetime.now().year or int(id_num[10:12]) < 1 or int(id_num[10:12]) > 12 or int(
id_num[12:14]) < 1 or int(id_num[12:14]) > 31:
return False
if int(id_num[10:12]) in [4, 6, 9, 11] and int(id_num[12:14]) > 30: # 当月份为4,6,9,11时,日期超过30即非法
return False
if int(id_num[10:12]) == 2 and int(id_num[12:14]) > 29: # 月份为2时,日期大于29便非法
return False
if int(id_num[10:12]) == 2 and leap(int(id_num[6:10])) == False and int(
id_num[12:14]) > 28: # 月份为2时,如果不是闰年,日期大于28便非法
return False
else:
return True
def check_sum(id_num):
"""计算检验位"""
ls = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]
id_num_sum = sum([ls[i] * int(id_num[i]) for i in range(17)]) # 计算校验和
if id_num[17] == 'X':
return True if id_num_sum % 11 == 2 else False
elif (id_num_sum % 11 + int(id_num[17])) % 11 == 1:
return True
else:
return False
def print_info(id_num):
"""输出信息"""
year = int(id_num[6:10])
month = id_num[10:12]
day = id_num[12:14]
if len(id_num) == 18 and check_date(id_num) and check_sum(id_num): # 先判断长度是否是18位,再判断校验和
gender = '女' if int(id_num[16]) % 2 == 0 else '男'
print('身份证号码校验为合法号码')
print('出生:{}年{}月{}日'.format(year, month, day))
# print('年龄:{}'.format(datetime.datetime.now().year - year))
print('性别:{}'.format(gender))
else:
print('身份证校验错误')
if __name__ == '__main__':
id_number = input()
print_info(id_number)
6.输出三角形字符阵列
类型:流程控制
描述
编写程序,输出n行由大写字母A开始构成的三角形字符阵列。
输入格式
输入在一行中给出一个正整数n(1≤n<7)。
输出格式
输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。
示例
输入:
4
输出:
A B C D
E F G
H I
J
n=int(input())
s='A'
if 1<=n<7:
for i in range(n):
for j in range(n-i):
print(s,end=' ')
s=chr(ord(s)+1)
print()
7.温度转换异常处理
类型:流程控制
描述
温度的刻画有两个不同体系:摄氏度(Celsius)和华氏度(Fabrenheit)。
请编写程序将用户输入华氏度转换为摄氏度,或将输入的摄氏度转换为华氏度。
转换算法如下:(C表示摄氏度、F表示华氏度)
C = ( F - 32 ) / 1.8
F = C * 1.8 + 32
要求如下:
(1) 输入输出的摄氏度采用大写字母 C 或小写字母 c 结尾,温度可以是整数或小数,如:12.34C 指摄氏度 12.34 度;
(2) 输入输出的华氏度采用大写字母 F 或小字字母 f 结尾,温度可以是整数或小数,如:87.65F 指华氏度 87.65 度;
(3) 考虑异常输入的问题,如输入不合法则抛出异常;
(4) 使用input()获得测试用例输入时,不要增加提示字符串。
输入格式
输入一个带单位的温度
输出格式
输入正常,输出转换后的温度,保留小数点后2位小数。
当用户输入值末位不是“C、c、F、f”中的一个时,输出"输入错误,末位只能是'C','c','F','f'"
当检测到NameError错误时输出'试图访问的变量名不存在'
当检测到SyntaxError 错误时输出'存在语法错误'
示例 1
输入:102F
输出:38.89C
示例 2
输入:102D
输出:输入错误,末位只能是'C','c','F','f'
示例 3
输入:AC
输出:试图访问的变量名不存在
示例 4
输入:102ff
输出:存在语法错误
try:
TempStr = input()
if TempStr[-1] in ['F', 'f']:
C = (eval(TempStr[0:-1]) - 32) / 1.8
print("{:.2f}C".format(C))
elif TempStr[-1] in ['C', 'c']:
F = 1.8 * eval(TempStr[0:-1]) + 32
print("{:.2f}F".format(F))
else:
print("输入错误,末位只能是'C','c','F','f'")
except NameError:
print('试图访问的变量名不存在')
except SyntaxError:
print('存在语法错误')
except Exception as e:
print(e)
8.判断火车票座位
类型:流程控制
------
描述 火车时速在200以上的列车:座位号是以ABCDF五个字母为区分的,一般会把座席分为商务座、一等座、二等座。
商务座:座位布局“2+1”,一排有三个座位,其中AC是相连的,F是单独一个座位;
一等座:座位布局“2+2”,一排有四个座位,其中AC是相连的,DF是相连的。
二等座:座位布局“3+2”,一排有五个座位,其中ABC是相连的三个座位,DF是相连的两个座位,这些座位中A、F都是靠窗的座位。
用户输入一个数字和一个字母组成的座位号,根据字母判断位置是窗口、中间还是过道。每个车厢座位排数是1-17,输入时不区分字母大小写。根据输入判定座位的位置,当输入的数据不是一个合法的座位号时,输出“座位号不存在”。
输入格式
输入一个数字和字母组合成的字符串
输出格式
'窗口'、'中间'、'过道' 或'座位号不存在'
示例 1
输入:12F
输出:窗口
示例 2
输入:2C
输出:过道
示例 3
输入:1ZZ
输出:座位号不存在
#用户输入一个数字和一个字母组成的座位号,根据字母判断是不是窗口的位置
#目前中国高铁窗口位置的字母是'A'和'F',过道位置是'C'和 'D',中间位置是'E'
#数字序号是1-17
s = input()
try:
if 2 <= len(s) < 4 and 1 <= int(s[:-1]) <= 17:
if s[-1] in ['A', 'a', 'F', 'f']:
print('窗口')
elif s[-1] in ['C', 'c', 'D', 'd']:
print('过道')
elif s[-1] in ['B', 'b']:
print('中间')
else:
print('座位号不存在')
else:
print('座位号不存在')
except:
print('座位号不存在')
9.判断IP地址合法性
类型:流程控制
描述
互联网上的每台计算机都有一个独一无二的编号,称为IP地址,每个合法的IP地址由'.'分隔开的4个数字组成,每个数字的取值范围是0-255。 现在用户输入一个字符串 s (不含空白符,不含前导0,如001直接输入1),请你判断 s 是否为合法IP,若是,输出'Yes',否则输出'No'。 如用户输入为202.114.88.10, 则输出Yes; 当用户输入202.114.88,则输出No。
输入格式
一个字符串
输出格式
输出'Yes'或'No'
示例
输入:255.255.255.0
输出:Yes
def f(s):
lists = s.split('.')
if len(lists) != 4:
return 'No'
for i in range(4):
try:
tmp = int(lists[i])
if tmp not in range(0, 256):
return 'No'
except:
return 'No'
return 'Yes'
ip = input()
print(f(ip))
s = input()
def f(s):
lists = s.split('.')
if len(lists) != 4:
return 'No'
for i in range(4):
try:
tmp = int(lists[i])
if tmp not in range(0,256):
return 'No'
except:
return 'No'
return 'Yes'
print(f(s))
小编畅谈:
小编发布的作品都是适合初学者学习,如果你是初学者,可以和小编一起学习,在这里我每天都会发Python的基础知识,以及相关的代码。如果觉得小编写的还不错,关注,点赞,收藏。如果有什么错误之处,请多多指教。我会虚心接受。如果有什么地方不懂,可以私信小编,我会第一时间回复您。