本博客原文地址:Python编程入门教程(以在线评测平台为载体) - 暴力都不会的蒟蒻 - 博客园,原文体验更佳
如果你是一名浙江2020级及以后的高中生要学习Python,抑或是一位科学工作者要学习Python,抑或是一名熟悉C/C++想扩展自己的技术栈来学习Python,抑或是一位小朋友在学习Python,以下文章对你学习Python编程将非常有帮助。
天天快乐编程在线评测平台现有6000多题,且支持Python语言,各种层级题目均具备。所以这里以天天快乐编程TZOJ为例,带您一起尝试用Python刷在线评测平台(Online Judge),提升自己的编程技巧及解决问题的能力。天天快乐编程信息技术分类,以下文章所提到的题目均已按顺序在此分类里。
一、Python语言简介
Python由荷兰数学和计算机科学研究学会的Guido van Rossum 于1990 年代初设计,也就是龟叔,顺便一提,Van 这个姓氏代表是贵族后裔。
Python提供了高效的高级数据结构,还能简单有效地面向对象编程。别人帮你造好了大楼,你拿来装修后做什么是你的事情。Python是面向对象的语言,是一种抽象的软件开发的思想方法,在Python里一切皆对象。
Python是解释型语言,他会将将源代码逐条转换成目标代码同时逐条运行。而C/C++等编译型语言会一次性将代码转换为目标代码,所以运行速度更快。最广泛使用的Python解释器是CPython,其是用C语言实现的Python解释器。Python语法很多来自C,但是其又增添了一些语法规则,如强制缩进。
Python可以花更多的时间用于思考程序的逻辑,而不是具体的实现细节,所以受科研工作者深度热爱。Python简单易学,所以作为非计算机专业学生的入门语言也是非常友好的,不用担心学不会。Python具有非常丰富的模块,它可以帮助你处理各种工作。比如OCR识别,一行代码,如pytesseract.image_to_string("sample.jpg"),即可完成对"sample.jpg"这个图像文件的文字识别。使用几行代码能完成对表格的复杂处理。当然他的功能远不如此,图形界面开发、系统网络运维、科学与数字计算均可用Python轻松完成。
Python取各语言之长,前面我们已经提到过其语法很多来自于C,其标准库的正则表达式参考了Perl,而lambda, map, filter, reduce等函数参考了Lisp。
如果你是计算机专业,我建议你从C学起,老老实实将数据结构与算法学踏实,这对你学习Python将会非常有帮助。无论学习什么语言,算法都是编程的核心。
二、顺序结构
1.输出语句
1452: C语言实验题――Hello World要求我们打个招呼,这句话也是学习每个编程语言的开始。我们想要让程序显示内容,需要使用对应的语句,Python对应的输出语句为print("你要说的内容"),我们将你要说的内容换为你要说的话即可,中英文均可。
1452参考代码
print("Hello, World!")
print函数格式:print(*objects,sep=' ',end='\n')
功能:可以一次输出多个对象。多个参数(object复数)之间用逗号分割,输出的多个对象之间的分隔符默认为一个空格,所有信息输出之后添加的符号默认为换行符。
然后你可以划到页面底部,点击提交按钮,然后将运行语言选择为Python3,并将你的代码粘贴进去,点击提交后即可看到结果。
提交后显示红色的Accepted代表你通过了这个题目,绿色的Wrong Answer代表你写错了(有可能是大小写错误,以及少了标点) ,蓝色的Compile Error代表你写的代码没有运行或者没有将语言改为Python3,粉红色的Presentation Error请检查是否多了一个空格,或少了一个空格。
通过后你可以尝试下以下题目
6977 输出平台地址
print("www.tzcoder")
6176 武汉加油!中国加油!
print("Fighting, Wuhan! Stay strong, China!")
5980 抹布的水印
print("mabu is a beauty")
6903 tencent's 水题1
print("tencentCEO yyds!")
6990 say sorry to teacher
print("I'm sorry, my teacher.")
6953 最优价钱问题
s=108-20
s=s+108+93-35
print(s)
那如果要输出三遍呢,比如5221: 重要的话说三遍,要求我们将I'm gonna WIN!说三遍,聪明的你可以尝试一下。
5221参考代码1
print("I'm gonna WIN!") print("I'm gonna WIN!") print("I'm gonna WIN!")
我们将代码复制三遍就可以了,为什么全写在""内不可以呢,因为你需要换行,这个可以参考下面代码,\n表示换行,print默认输出之后添加的符号默认为换行符,之后我们还会介绍换行
5221参考代码2
print("I'm gonna WIN!\nI'm gonna WIN!\nI'm gonna WIN!")
通过后你可以尝试下以下题目
6762 开心的yym
print("yym is so happy")
print("yym is so happy")
print("yym is so happy")
6942 给yym加油打气
print("I wish you a good test.")
print("I wish you a good test.")
print("I wish you a good test.")
print("I wish you a good test.")
print("I wish you a good test.")
6962 打印任务
print("Long live lyl21301!")
print("Long live lyl21301!!")
print("Long live lyl21301!!!")
2.输入语句
5600: 打招呼要求我们给定一个名字,然后给他打个招呼。输出我们可以用print,那么输入我们怎么做呢,可以使用input()语句。输出空格需要我们控制,我们可以使用sep控制空格
5600参考代码
# 用name保存输入内容 name = input() print("Hello, ",name,"!",sep="")
注释
注释主用于解释程序代码,目的是提升代码的可读性。在Python程序中,单行注释以“#”开头。注释部分分会被编译器略去,从而不被计算机执行。
input函数
格式:input([prompt])
功能:读取从键盘输入的字符串,若给定提示字符串(参数prompt),则直接输出。
变量是指其值在程序执行过程中会发生变化的量,它一般需要先定义在使用,比如上面我定义了name变量将输入的名字保存了下来。
赋值语句
赋值语句是最基本的语句,它的作用就是将表达式的值赋给变量。
格式:变量名=表达式。其中“=”为赋值号
功能:把赋值号右边表达式的计算结果,存储到赋值号左边的指定的变量中。
在Python中,给变量命名,要遵循以下规则:
1)只能包含字母、数字和下划线。注意字母区分大小写。注:Python3支持中文变量名,但不建议使用
2)不能以数字开头,不能与关键字同名。
通过后你可以尝试下以下题目
6321 Alice与素数
n=input()
print("Hello, prime ", n ,"!", sep="")
5877 输出第二个数
a = input()
b = input()
c = input()
print(b)
5681 简单输入输出
见下面的代码
6933 演讲打招呼
m = input()
n = input()
print("Hello everyone, I'm", m)
print("I'm", n, "years old")
6439 字符菱形
a = input()
print(" " + a)
print(a + a + a)
print(" " + a)
5681提示: 简单输入输出需要读入多个元素,设置多个变量依次读入并输出。
5681参考代码
name = input() age = input() NO = input() print("name:",name,sep='') print("age:",age,sep='') print("NO:",NO,sep='')
3.简单计算
1001: 整数求和给我们两个数字,要让我们对他们进行求和。
如果我们读入后直接将a+b,他会输出两个数字相连接,比如1和2,会输出12。
1001错误代码
a=input() b=input() print(a+b)
那么如何让其输出3呢。数据具有不同的类型,不同的类型也对应不同的特征,input得到的类型为字符串类型。
Python的常用数据类型--表示数字
数据类型名称 | 数据表示形式 |
---|---|
整形(int) | 数学中的整数,如0,1,-2等 |
浮点型(float) | 数学中的小数,如2.0,3.14,-6.8等 |
本题我们要计算两个整数的和,我们可以用int()将其转换为对应的类型。
Python常用的数据类型转换函数
int([x]):将字符串或者数字转换为整数。
float([x]):将字符串或数字转换为浮点数。
例如: >>> float("25")
25.0
1001参考代码1
a=input() b=input() print(int(a)+int(b))
1001参考代码2,更建议读入后就进行转换
a=int(input()) b=int(input()) print(a+b)
通过后你可以尝试下以下题目
6442 bth之潘家小镇3
a = int(input())
b = int(input())
print(b-a)
6783 三角形的周长
a = int(input())
b = int(input())
c = int(input())
print(a + b + c)
6779 CJC的取信问题
hour = int(input())
minus = int(input())
print(hour,":",minus,sep='')
hour += 4
print(hour,":",minus,sep='')
hour += 4
print(hour,":",minus,sep='')
5974 多大了
a = int(input())
b = int(input())
n = int(input())
print(n - a + b)
4.复杂数字计算
除了可以进行加减运算外,四则运算的中乘除也是可以的,乘号用的是"*",位于数字8的上方,除号用的是"/",位于右shift的左侧。
Python常用算数运算符
运算符 | 表达式 | 描述 | 示例 | 优先级 |
---|---|---|---|---|
+ | x+y | 将x与y相加 | 5+2结果为7 | 3 |
- | x-y | 将x减去y | 5-2结果为3 | 3 |
* | x*y | 将x与y相乘 | 5*2结果为10 | 2 |
/ | x/y | 将x除以y,结果为浮点数 | 5/2结果为2.5 | 2 |
// | x//y | 将x除以y,取整数部分 | 5//2结果为2 | 2 |
% | x%y | 将x除以y,求余数 | 5%2结果为1 | 2 |
** | x**y | 求x的y次幂 | 5**2结果为25 | 1 |
注意:1.Python的除法规则和其他语言不一样。2.需要提高优先级请使用()
5887: 长方形的周长,长方形周长为(长+宽)*2
5887参考代码
a=int(input()) b=int(input()) print((a+b)*2)
通过后你可以尝试下以下题目
6904 tencent's 水题2
a = int(input())
print(2 * a)
7131 圆的直径
r = int(input())
print(2 * r)
6780 CJC的生产垃圾问题
n = int(input())
m = int(input())
print( m * n * 12 )
6874 买东西
x = int(input())
y = int(input())
print( 7 * x + 5 * y )
6659 bth的铁丝问题
a = int(input())
b = int(input())
print( 4 * a + 6 * b )
6634 bth的数学问题
x = int(input())
y = 45 * x + 20
y = y - (x-2)*60 + 60
print( y )
1494: C语言实验题――温度转换要求给定一个华氏温度,输出摄氏温度。
本题输入为小数,所以类型为float,但是要求我们保留两位小数,这里可以用C语言的格式控制%.2f,之后跟上变量名称
格式化函数format()
格式:format(value[,fomat_spec])。
功能:将数据按foramt_spec格式规划表现形式。例如,浮点数格式[width].[.precision]表示宽度和精度
例如: >>> x=26.6666666666666668
>>> printf(fomat(x,'.2f'))
26.67
1494参考代码1
F=float(input()) print(format(5*(F-32)/9,'.2f'))
也可以使用C语言的语法
1494参考代码2
F=float(input()) print('%.2f'%(5*(F-32)/9))
其他格式化参数
d 以十进制形式输出带符号整数(正数不输出符号)
o 以八进制形式输出无符号整数(不输出前缀O)
x 以十六进制形式输出无符号整数(不输出前缀OX)
u 以十进制形式输出无符号整数
f 以小数形式输出浮点数
e 以指数形式输出浮点数
g 以%f%e中较短的输出宽度输出浮点数
c 输出单个字符
s 输出字符串
标志字符为-、+、#、空格四种,其意义:
- 结果左对齐,右边填空格
+ 输出符号(正号或负号)空格输出值为正时冠以空格,为负时冠以负号
\# 对c,s,d,u类无影响;对o类, 在输出时加前缀。对x类,在输出时加前缀0x;对e,g,f 类当结果有小数时才给出小数点
输出的格式控制
%nd n为指定的输出字段的宽度。如果数据的位数小于n,则左端补以空格,若大于n,则按实际位数输出。
%0nd n为指定的输出字段的宽度。如果数据的位数小于n,则左端补以0,若大于n,则按实际位数输出。
%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。
通过后你可以尝试下以下题目
7133 圆的周长
r=int(input())
l=3.14*r*2
print("%.2f" % l)
7132 圆的面积
r=int(input())
s=3.14*r**2
print("%.2f" % s)
5972 单位转换
n = float(input())
print( "%.1f" % (n * 1000) )
#print( format((n * 1000), '.1f' ))
7020 温度转换1
F = int(input())
C = 5 / 9 * ( F -32)
#print("%.0f" % C)
print( format(C , '.0f'))
6784 温度转换2
C = float(input())
F = 9 / 5* C + 32
#print("%.2f" % F)
print(format(F,'.2f'))
6969 温度转换3
c = float(input())
k = c + 273.15
#print("%.2f" % k)
print(format(k,'.2f'))
6970 温度转换4
k = float(input())
f = 9 * (k - 273.15) / 5 + 32
#print("%.2f" % f)
print(format(f,'.2f'))
6971 温度转换5
f = float(input())
k = (f - 32) * 5 / 9 + 273.15
print(format(k, '.2f'))
如果多个变量呢,如2982: 圆的直径、周长和面积这一题,我们可以一个一个输出
2982参考代码
PI=3.1415926 r=float(input()) d=2*r circle=2*PI*r area=PI*r**2 print("%.2f"%d,"%.2f"%circle,"%.2f"%area)
通过后你可以尝试下以下题目
6143 单位转换
a,b,c = map(int,input().split())
print(a * 1609 , format(b * 30.48, '.2f'), format(c * 2.54,'.2f'))
1493 C语言实验题――圆柱体计算
import math
r,h=map(float,input().split())
circle=2*math.pi*r
area=math.pi*r**2
carea=circle*h
volume=math.pi*r**2*h
print("%.2f"%circle,"%.2f"%area,"%.2f"%carea,"%.2f"%volume)
5884: 带余除法"/"可以求出小数商(得到的为浮点型),Python中还有求商的整数部分,为//。被除数/除数=商···余数,求余数可以直接用取余运算符%。
5884参考代码
a=int(input()) b=int(input()) print(a//b,a%b)
通过后你可以尝试下以下题目
1488 C语言实验题――买糖果
x = int( input())
x = x * 10
print( x // 3 , x % 3 )
6785 3位数的每一位
s = input()
print(s[0], s[1], s[2], sep=',')
6013 反向输出一个三位数
n = int(input())
a = n // 100
b = n // 10 % 10
c = n % 10
print( c , b , a, sep = '')
4562 合并正整数
x = int(input())
a = x // 10
b = x % 10
y = int(input())
c = y // 10
d = y % 10
print( "The result is:",end = ' ')
print( a , c, b , d, sep = '')
接下来我们可以尝试下6781: 算数平方根,开根号对应为0.5次幂,使用**幂运算符即可。
6781参考代码
a=float(input()) print('%.2f'%(a**0.5))
通过后你可以尝试下以下题目
5886 计算2的幂
n = int(input())
print(2 ** n)
或:
n = int(input())
print(pow(2, n))
或:
n = int(input())
f = 1
for i in range(n):
f *= 2
print(f)
6859 乘方计算
a = int(input())
n = int(input())
print(a ** n)
或:
a = int(input())
n = int(input())
f = 1
for i in range(n):
f *= a
print(f)
5973 移动小数点
n = float(input())
m = int(input())
print( format(n * (10**m) , '.2f'))
1491 C语言实验题――三角形面积
a = float(input())
b = float(input())
c = float(input())
p = 1/2 * (a + b + c)
s = (p*(p-a)*(p-b)*(p-c)) ** 0.5
#print("%.3f" % s)
print(format(s, '.3f'))
5.字符
"Hello, World!","www.tzcoder","0"都是字符串,字符串表示一串字符。那什么是字符呢。
字符是电子计算机或无线电通信中字母、数字、符号的统称。计算机不能直接显示字符,字符存储在计算机中经过一定的规则编码后的二进制数字,最终会被显示为字符。
常见的编码为ASCII码,即美国信息交换标准代码(American Standard Code for Information Interchange),字符和数字值一一对应的。
ASCII表,建议收藏。
常用的有空格为32,'0'为48,'A'为65,'a'为97,'A'与'a'相差32。
5885: ASCII表 要求输入一个除空格以外的可见字符,输出其ASCII码。
读入为一个字符,想要获取其ASCII码,字符型->整型可以用ord函数。
ord()函数
ord函数以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值
5885参考代码
a=input() print(ord(a))
C语言的强制转换在Python里得不到其ASCII码,因为Python里一切皆对象,他会尝试把字符串对象转换为整型对象,如果是字母即转换出现异常。
ASCII码中没有中文,我们中文使用的是GBK国标码。为了适配多种语言,互联网使用的是Unicode万国码。
5889: 打印字符 输入一个整数,即字符的ASCII码,输出相对应的字符。
读入ASCII码,获取字符,整型->字符型可以用chr函数。
chr函数
chr() 用一个范围在256内的整数作参数,返回一个对应的字符。
5889参考代码
# 注意输入的类型为int a=int(input()) print(chr(a))
通过后你可以尝试下以下题目
7178 小z与ASCII加密
a = input()
b = input()
c = input()
print(ord(a),ord(b),ord(c),sep = '')
6446 小z与ASCII解密
a = int(input())
b = int(input())
c = int(input())
print(chr(a),chr(b),chr(c),sep = '')
1492 C语言实验题――大小写转换
c = input()
print( chr(ord(c) + 32) )
#print( '%c' % (ord(c) + 32 ))
#print(c.lower())
1489 C语言实验题――字符编码
s = input()
print("password is",end=' ')
print(chr(ord(s[0])+4),chr(ord(s[1])+4),chr(ord(s[2])+4),chr(ord(s[3])+4),chr(ord(s[4])+4),sep='')
4960: 打印图形 要求我们打印一个字符的长方形。
每行分别print即可。但是如果你字符串的界定符用了''',那你的代码将无法运行,需要使用'''进行转义
4960参考代码1
print("abcdefghij") print("klmnopqrst") print("uvwxyz+-*/") print("0123456789") print("()[]{}&&||") print("!?:,><\^%'")
4960参考代码2
print('abcdefghij') print('klmnopqrst') print('uvwxyz+-*/') print('0123456789') print('()[]{}&&||') print('!?:,><\^%\'')
转义字符
转义字符 | ASCII 码 | 转义字符的含义 |
---|---|---|
\n | 10 | 回⻋换行 |
\t | 9 | 制表符 |
\\ | 92 | 反斜线符"" |
\' | 39 | 单引号符 |
\" | 34 | 双引号符 |
我门使用这些特殊字符时往往要使用其转义字符。
通过后你可以尝试下以下题目
5074 打印字符
print("\tA")
print()
print("A\t\tA")
print()
print("\tA")
7042 最澄澈的空与海
print(" +--------------------+")
print(" / \"HIROSHIGE No. 36\" \\")
print(" / \\")
print(" / The Purest Sky and Sea \\")
print("+----------------------------+")
6.字符串和列表
数据类型名称 | 数据表示形式 |
---|---|
字符串型(str) | 用引号作为定界符,如'ABC',"请输入"等 |
列表(list) | 用方括号作为定界符,如[1,2,3],[1,'a']等 |
字符串是字符的序列表,由一对引号(单引号或双引号)构成。可以通过索引访问字符串中特定位置的字符。
字符串和列表的索引(下标)从0开始,想要访问a中的第1个元素可以用a[0]访问([]为索引运算符)。之后的元素依次往后数。
如“ABCDEFGHIJ”的索引标号如下所示
字符 | A | B | C | D | E | F | G | H | I | J |
---|---|---|---|---|---|---|---|---|---|---|
索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
7165: 列表索引问题简单版1 要求我们输出字符串的第5个元素。
第5个元素对应索引4,即[4]。
7165参考代码
a=input() print(a[4])
通过后你可以尝试下以下题目
7166 列表索引问题简单版2
s = input()
n = int(input())
print(s[n-1])
Python存在正索引,同时也存在负索引,负索引就代表倒数第几个。
字符 | A | B | C | D | E | F | G | H | I | J |
---|---|---|---|---|---|---|---|---|---|---|
正索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
负索引 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
7167: 列表索引问题简单版3 要求我们输出倒数第5个元素。
倒数第五个元素对应索引为-5,即[-5]。
7167参考代码1
a=input() print(a[-5])
能不能用正索引做呢,当然可以,我们可以量出字符串的长度l,倒数第5个,即[l-5]
len()函数
函数格式:len(s)
函数功能:返回序列s的长度或项目个数
7167参考代码2
a=input() l=len(a) print(a[l-5])
通过后你可以尝试下以下题目
7168 列表索引问题简单版4
lista = input()
n= int(input())
print(lista[-n])
*7.字符串和列表的切片
此知识点量力而行,可能会有些困难。
有的时候我们可能需要列表中间隔几个的项,我们可以用切片去完成。
格式:[start: end: step]
功能:返回从索引位置start到索引位置end且以step为步数的子序列(不包含索引位置end的元素)
例如:若lst=['HUAWEI','OPPO','VIVO','XIAOMI'],则lst[-3:-1]返回值是['OPPO','VIVO']。
你可以尝试下以下题目
7169 字符串切片1
lista = input()
print(lista[1:4])
7170 字符串切片2
lista = input()
print(lista[2:11:3])
7171 字符串切片3
lista = input()
start = int(input())
end = int(input())
step = int(input())
print(lista[start-1:end-1:step+1])
7172 字符串切片4
lista = input()
print(lista[::-1])
7173 字符串切片5
lista = input()
print(lista[-2:-6:-1])
7174 字符串切片6
lista = input()
print(lista[-3:-10:-3])
7175 字符串切片7
lista = input()
start = int(input())
end = int(input())
step = int(input())
print(lista[-start:-end:-(step+1)])
三、选择结构
和之前顺序结构不同,有时候我们需要有选择执行某些语句,比如“如果明天下雨,那么明天就不去公园了”;“如果出门前告诉妈妈,那么她不会担心我们;否则她会非常担心我们”也就是if条件语句。其语法结构如下所示
if <条件> :
<语句块1>
[else:
<语句块2>]
if条件语句由if关键字构成,后面跟一个条件和一个冒号。冒号的作用是告知接下来要创建一个新的语句块,处于同一缩进位置的代码块组成一个语句块。
Python 关系表达式
关系表达式指用关系运算符,连接两个类型相同的数据组成的表达式。关系表达式的值是布尔型。
| 数据类型名称 |数据表示形式 |
|布尔型(bool)|只有两种值:True和False,即真和假,也就是成立或不成立|
Python常见的关系运算符
关系运算符 | 表达式 | 描述 | 优先级 |
---|---|---|---|
>,< | x>y,x<y | x大于y,x小于y | 4 |
>=,<= | x>=y,x<=y | x大于等于y,x小于等于y | 4 |
==,!= | x==y,x!=y | x等于y,x不等于y | 4 |
in | x in y | x是y的成员 | 5 |
1.选择结构的简单应用
6810: 两个数较大,给定两个数让我们求较大的。
6810参考代码
a=int(input()) b=int(input()) if a>b: print(a) else: print(b)
通过后你可以尝试下以下题目
6811 两个数较小
a = int(input())
b = int(input())
if a <= b:
print(a)
else:
print(b)
6774 求绝对值
a = int(input())
print(abs(a))
或:
a = int(input())
#print(abs(a))
if a < 0:
a = -a
print(a)
6798 最外围人数
n = int(input())
if n < 3:
print(n*n)
else:
print(n*2 + (n-2)*2)
6772 吃香蕉
x = int(input())
if x == 0:
print("Today, I didn't eat bananas.")
elif x == 1:
print("Today, I ate 1 banana.")
else:
print("Today, I ate", x, "bananas.", sep=' ')
5354 阶梯电价
x = float(input())
if x <= 50:
y = x
else:
y = 50 + (x - 50) * 1.05
# print("%.2f" % y)
print(format(y, '.2f'))
6837 区间测速
t = float(input())
t /= 3600
v = 25 / t
if v > 100:
print("speeding")
else:
print("normal")
6833 停车场车位探测中的算法
x = int(input())
if x == 0:
print("green, parking space is empty")
else:
print("red, parking space is occupied")
6834 一元二次方程是否有实数根
a = float(input())
b = float(input())
c = float(input())
disc = b ** 2 - 4 * a * c
if disc >= 0:
print("exist")
else:
print("not exist")
5892 苹果和虫子
n = int(input())
x = int(input())
y = int(input())
if y % x == 0:
apple_ate = y // x
apple_remained = n - apple_ate
else:
apple_ate = y // x + 1
apple_remained = n - apple_ate
if apple_remained >= 0:
print(apple_remained)
else:
print("0")
2.逻辑运算符的使用
6812: Alice的登录账号密码需要我们一个程序去检验其账号和密码。要同时满足账号和密码都是对的,这个可以用什么呢,可以用逻辑表达式中的与。
Python 逻辑表达式
逻辑表达式指用逻辑运算符,把逻辑变量连接起来的表达式。逻辑表达式的值仍是布尔型:真或假(True或False),真对应1,假对应为0。
Python常见的逻辑运算符
逻辑运算符 | 表达式 | 描述 | 优先级 |
---|---|---|---|
and | x and y | x且y | 7 |
or | x or y | x或y | 8 |
not | not x | 非x | 6 |
与其他编程语言不同的是, and中含False,返回False; 均为非False时,返回后一个值。or中, 至少有一个为非False时,返回第一个非False值。
所以本题直接将两个条件并列起来即可。
6812参考代码
user = input() pwd = input() if user == "admin" and pwd=="Python@16": print("Login successful") else: print("Username or password is wrong")
可以尝试下1485: C语言实验题――整除,整除也就是取余后为0。
1485参考代码
x = int(input()) if x % 3 ==0 and x % 5 == 0: print('Yes') else: print('No')
6766: 三角形判断,三角形满足两边之和大于第三边,所以我们需要把三个条件全都判断一下即可。
6766参考代码
a=int(input()) b=int(input()) c=int(input()) if a+b>c and b+c>a and a+c>b: print("1") else: print("0")
我们来看一下6763: 收集瓶盖赢大奖,满足一个条件即可。需要运算我们逻辑运算符的or。
6763参考代码
a=int(input()) b=int(input()) if a>=10 or b>=20: print("1") else: print("0")
通过后你可以尝试下以下题目
6765 判断是否为两位数
n = int(input())
if 10 <= n <= 99:
print("1")
else:
print("0")
5893 晶晶赴约会
n = int(input())
if n in (1, 3, 5):
print("NO")
else:
print("YES")
6767 点和正方形的关系
x = int(input())
y = int(input())
if -1 <= x <= 1 and -1 <= y <= 1:
print(1)
else:
print(0)
或:
x = int(input())
y = int(input())
if abs(x) <= 1 and abs(y) <= 1:
print(1)
else:
print(0)
6435 判断是否存在重复的数
a = int(input())
b = int(input())
c = int(input())
if a == b or a == c or b == c:
print("YES")
else:
print("NO")
6766 三角形判断
a=int(input())
b=int(input())
c=int(input())
if a+b>c and b+c>a and a+c>b:
print("1")
else:
print("0")
6793 三角形判断2
a = float(input())
b = float(input())
c = float(input())
if a + b > c and a + c > b and b + c > a:
p = (a + b + c) / 2
area = (p * (p - a) * (p - b) * (p - c)) ** 0.5
print("%.3f" % area)
else:
print("Not triangle")
3.向上取整和向下取整
6445: 小z游东湖,大船可以乘6人,小船可以乘4人, x 人准备一起划船,最少需要多少条船。首先会选择大船,因为大船坐人多。余1~4可以选1条小船,余5人可以选1条大船。这个题目不关心你选的大船还是小船,所以只需要有人剩下就选择一条大船就可以了。
6445参考代码1
a=int(input()) if a%6==0: print(a//6) else: print(a//6+1)
当然我们也可以用roud函数进行向上取整,如果给定为小数,那么将其+0.5之后四舍五入即可。
函数格式:round(number)。
函数功能:返回浮点数number的四舍五入值。
6445参考代码2
a=int(input()) ans=a/6 if ans==int(ans): print(int(ans)) else: print(round(ans+0.5))
6792: 出租车收费3千米以内(含3千米)收费10元,超过3千米的部分每千米收费2元(不足1km按1km算)。给定行驶路程s,问我们费用y。
首先这是一个分段函数,需要将其分成s<=3和s>3的情况。
我们可以根据以上式子转换为代码
6792参考代码1
s=float(input()) #向上取整 if int(s)!=s: s=round(s+0.5) #计算金额 if s<=3: m=10 else: #由于s可能是浮点数,所以这里不转换,输出需要转换一下 m=10+(s-3)*2 print(int(m))
+0.5比较鸡肋,不是整数直接+1写起来更简单
6792参考代码2
s=float(input()) #向上取整 if int(s)!=s: s=int(s)+1 else: # 缺少这步会wa,因为如果是整数你的类型不对 s=int(s) #计算金额 if s<=3: m=10 else: m=10+(s-3)*2 print(m)
通过后你可以尝试下以下题目
6651 bth的工程问题
x = int(input())
y = x / 240
if y == int(y):
print(int(y))
else:
print(int(y)+1)
6632 candy妈妈分油
x = int(input())
x *= 1000
y = int(input())
if x/y == int(x/y):
print(int(x/y))
else:
print(int(x/y)+1)
6587 计算分段函数
x = float(input())
if x >= 0:
y = x ** 0.5
else:
y = (x + 1) ** 2 + 2 * x + 1 / x
print("f(", format(x, '.2f'), ") = ", format(y, '.2f'), sep='')
6768 计算邮资
w = int(input())
c = input()
y = 8
if w > 1000:
w -= 1000
y += w // 500 * 4
if w % 500 != 0:
y += 4
if c == 'y':
y += 5
print(y)
6845 星期几问题
y = int(input())
m = int(input())
d = int(input())
if m == 1:
m = 13
y -= 1
if m == 2:
m = 14
y -= 1
c = y // 100
y %= 100
w = y + int(y/4) + int(c/4) - 2 * c + int(26 * (m + 1)/10) + d - 1
w %= 7
if w == 0:
print("Sunday")
elif w == 1:
print("Monday")
elif w == 2:
print("Tuesday")
elif w == 3:
print("Wednesday")
elif w == 4:
print("Thursday")
elif w == 5:
print("Friday")
elif w == 6:
print("Saturday")
4.多分支语句
除了直接的if else,我们还可以使用elif,也就是在else中继续写条件。
if <条件> :
<语句块1>
elif <条件2>:
<语句块2>
···
elif <条件n>:
<语句块n>
[else:
<语句块2>]
5908: 三个数的最大值 给定3个数,请你帮忙求出最大值。
我们设3个数依次为a,b,c,三个数要么a最大,要么b最大,要么c最大。
a最大需要满足什么条件呢?a>b且b>c
如果a不是最大,b最大需要满足什么条件呢?b>a且b>c,即然a已经不是最大了,那么直接b和c就可以了,条件可以简化为b>c
a、b都不是最大,那么c就是最大值了,我们可以将如上逻辑写为代码
5908参考代码1
a=int(input()) b=int(input()) c=int(input()) if a>b and b>c: print(a) elif b>c: print(b) else: print(c)
如果是10个数要比大小呢?这个判断也太复杂了,我们可以尝试简化下逻辑。
我们默认第一个数为最大值,然后再让第二个数与最大值比较,如果比最大值还大说明第二个数为最大值,这时候最大值为前两个数的最大值,依次类推即可。
5908参考代码2
a=int(input()) b=int(input()) c=int(input()) max_value=a if b>ma: max_value=b if c>ma: max_value=c print(max_value)
通过后你可以尝试下以下题目
5909 三个数的最小值
a = int(input())
b = int(input())
c = int(input())
min_val = min(a, min(b, c))
print(min_val)
4590 最大值-最小值
a = int(input())
b = int(input())
c = int(input())
max_val = max(a, max(b,c))
min_val = min(a, min(b,c))
print(max_val - min_val)
1463 C语言实验题――相加和最大值
a, b, c = map(int, input().split())
d = a + b
e = a + c
f = b + c
print(max(d, max(e, f)))
6153 优惠方案选择
s = int(input())
p1, p2 = map(int, input().split())
z = int(input())
if (s - (s // p1 * p2)) < (s * z / 10.0):
print("fangan 1!")
elif (s - (s // p1 * p2)) > (s * z / 10.0):
print("fangan 2!")
else:
print("both ok!")
6821 运动会名次
score = int(input())
if score == 1:
print(7)
elif score == 2:
print(5)
elif score == 3:
print(4)
elif score == 4:
print(3)
elif score == 5:
print(2)
elif score == 6:
print(1)
else:
print("Error")
6823 空气质量查询
aqi = int(input())
if 0 <= aqi <= 50:
print("Good")
elif aqi <= 100:
print("Moderate")
elif aqi <= 150:
print("Unhealthy for Sensitive Groups")
elif aqi <= 200:
print("Unhealth")
elif aqi <= 300:
print("Very Unhealthy")
else:
print("Hazardous or Beyond Index")
6822 浙江省汽车牌号所在地查询
sign = input()
if sign == 'A':
print("Hangzhou")
elif sign == 'B':
print("Ningbo")
elif sign == 'C':
print("Wenzhou")
elif sign == 'D':
print("Shaoxing")
elif sign == 'E':
print("Huzhou")
elif sign == 'F':
print("Jiaxing")
elif sign == 'G':
print("Jinhua")
elif sign == 'H':
print("Quzhou")
elif sign == 'J':
print("Taizhou")
elif sign == 'K':
print("Lishui")
elif sign == 'L':
print("Zhoushan")
else:
print("Input error")
5.逻辑运算符的组合
闰年很熟悉吧,四年一闰,百年不闰,四百年又闰。所以闰年满足什么条件呢,如果是4的倍数可能是闰年,但是世纪年不是闰年,而且四百的倍数是闰年。
所以满足是4的倍数而且不是100的倍数就是闰年,但是如果是400的倍数也是,也就是条件的嵌套,我们可以使用elif语句。
6773: 闰年判断 给定年份让我们判断闰年。
6773参考代码1
year = int(input()) if year % 4 == 0 and year % 100 != 0: print(1) elif year % 400 == 0: print(1) else: print(0)
当然两个的闰年条件我们可以合并,and的优先级高于or的优先级,可以不用()
6773参考代码2
year = int(input()) if year % 4 == 0 and year % 100 != 0 or year % 400 == 0: print(1) else: print(0)
通过后你可以尝试下以下题目
6764 有一门课不及格的学生
a = int(input())
b = int(input())
if a < 60 or b < 60:
if a < 60 and b < 60:
print(0)
else:
print(1)
else:
print(0)
6849 图书优惠问题
n = int(input())
a = n // 300
b = (n % 300) // 200
c = ((n % 300) % 200) // 100
print(n - (a * 120 + b * 70 + c * 30))
5978 公平分配
a, b, c = map(int, input().split())
if a == b == c:
print("very good")
elif a == b and (c == a + 1 or c == a - 1):
print("fine")
elif a == c and (b == a + 1 or b == a -1):
print("fine")
elif b == c and (b == a + 1 or b == a -1):
print("fine")
else:
print("bad")
3712 自动门控制
a, b, c = map(int, input().split())
if a == 0:
if b == 0:
if c == 0:
flag = 0
else:
flag = 0
else:
if c == 0:
flag = 0
else:
flag = 1
else:
if b == 0:
if c == 0:
flag = 1
else:
flag = 1
else:
if c == 0:
flag = 0
else:
flag = 1
print(flag)
或:
a, b, c = map(int, input().split())
if a == 0 and b == 0 and c == 0 or a == 0 and b == 0 and c == 1 or a == 0 and b == 1 and c == 0 or a == 1 and b == 1 and c == 0:
print(0)
else:
print(1)
四、循环结构
1.for循环
7179: 输出字符串的各个字符 要求我们输出字符串内各个字符。
长度也不长,用len()函数量出长度分别写吗?也太累了!计算机最擅长的事情就是循环,计算机1秒可以运行10亿次,我们我们本题需要使用循环完成。
for 循环语句是通过遍历某一序列对象来构建循环,循环结束的条件就是对象遍历完成。for 循环语句的一般格式是:
for <变量> in <序列>:
<循环体>
[else:
语句块]
执行过程:
<变量>每经过一次循环,就会得到序列中的一个元素,并通过循环体处理它。
<序列>通常是字符串、列表、range 对象实例等。当序列中的元素全部遍历完时,程序就会自动退出循环,继续执行 else 子句的语句块。
7179参考代码1
s=input() for i in s: print(i)
Python里还有range()函数来控制循环次数。
格式:range([start,]stop[,step])。
功能:创建一个整数列表。
参数:起始值(缺省值为0),终值(但不包括),步长(缺省为1)。
4734: C语言循环水题1 我们用range来完成下4734吧,即range(1,n+1)
4734参考代码
n=int(input()) for i in range(1,n+1): print(i)
那能否用利用len()函数输出字符串的各个字符呢,当然也是可以的,量出长度n,range(n)即可
7179参考代码2
s=input() n=len(s) for i in range(n): print(s[i])
通过后你可以尝试下以下题目
5954 输出1到n中的奇数
n = int(input())
for i in range(1, n+1, 2):
print(i)
5955 输出1到n中的偶数
n = int(input())
flag = 0
for i in range(2, n+1, 2):
print(i)
flag = 1
if flag == 0:
print("None")
5956 输出a与b之间的所有奇数
a = int(input())
b = int(input())
flag = 0
for i in range(a, b+1):
if i % 2 != 0:
print(i)
flag = 1
if flag == 0:
print("None")
6776 Alice的幸运数
m = int(input())
n = int(input())
for x in range(m, n+1):
if x % 9 == 0:
print(x)
6778 开心的yym 2.0
n = int(input())
for x in range(n):
print("yym is so happy")
6871 jjy之5.20
n = int(input())
for x in range(n):
print("520")
6912 感慨的yym
x = int(input())
if x == 1:
print("Happy Children's Day to myself")
else:
for x in range(x):
print("Happy Children's Day")
5951: 求1到n的和 要求我们求1~n的和,我们需要设置个袋子,比如sum_value用来记录总和,4734我们将每个元素输出,现在我们需要把他们全部加起来。
5951参考代码
n=int(input()) sum_value=0 for i in range(1,n+1): sum_value=sum_value+i print(sum_value)
通过后你可以尝试下以下题目
5952 求1到n中的奇数的和
n = int(input())
s = 0
for i in range(1, n+1, 2):
s += i
print(s)
5953 求1到n中的偶数的和
n = int(input())
s = 0
for i in range(1, n+1):
if i % 2 == 0:
s = s + i
print(s)
5894 被17整除
m = int(input())
n = int(input())
s = 0
for i in range(m, n+1):
if i % 17 == 0:
s += i
print(s)
4735: C语言循环水题2 倒着按序输出1到n内的所有整数。
和切片有点类似哦,我们需要把range的step设为-1,即range(n,0,-1)
4735参考代码
n=int(input()) for i in range(n,0,-1): print(i)
通过后你可以尝试下以下题目
6856 倒着输出1到n中的奇数
n = int(input())
for i in range(n, 0, -1):
if i % 2 != 0:
print(i)
5958 倒着输出1到n中的偶数
n = int(input())
flag = 0
for i in range(n, 0, -1):
if i % 2 == 0:
print(i)
flag = 1
if flag == 0:
print("None")
5957 倒着输出a与b之间的所有偶数
a = int(input())
b = int(input())
flag = 0
for i in range(b, a-1, -1):
if i % 2 == 0:
print(i)
flag = 1
if flag == 0:
print("None")
2.for循环的实际运用
6975: 小z的账单 现在有个账单需要我们去统计下最终盈余。
我们需要读入n次数据,我们在循环内读入并将其加入sum_value即可。range(n)即可完成n次循环。
6975参考代码
n=int(input()) sum_value=0 for i in range(n): x=int(input()) sum_value=sum_value+x print(sum_value)
通过后你可以尝试下以下题目
6835 超市收银系统
n = int(input())
s = 0
for i in range(n):
m = float(input())
s += m
# print(format(s, '.2f'))
print("%.2f" % s)
3296 汉堡包
n = int(input())
s = 0
for i in range(n):
m = int(input())
if m <= 100:
s += m
print(s)
6641 压岁钱
n = int(input())
s = 0
for i in range(n):
m = int(input())
if m > 300:
m = 300
s += m
print(s)
5895: 1、5、10 要求我们统计n个数中1、5、10的个数。
我们可以设置3个num(个数)用来统计个数,符合就+1。
5895参考代码
n=int(input()) num1=0 num2=0 num3=0 for i in range(n): x=int(input()) if x==1: num1=num1+1 if x==5: num2=num2+1 if x==10: num3=num3+1 print(num1,num2,num3,sep="\n")
通过后你可以尝试下以下题目
5222 奇偶分家
n = int(input())
odd = 0
even = 0
for i in range(n):
m = int(input())
if m % 2 == 0:
even += 1
else:
odd += 1
print(odd, even, sep=' ')
6438 与指定数字相同的数的个数
n = int(input())
m = int(input())
count = 0
for i in range(n):
x = int(input())
if x == m:
count += 1
print(count)
1459: 求最大值 这个题就需要使用我们3个数最大值那个思路了。
假设第一个数为最大值,之后n-1个数一一比较,如果比最大值大,就把它换为最大值,相当于每次都和最大值比较。
可以把第一个数在循环里特殊处理
1459参考代码1
n = int(input()) for i in range(n): x = int(input()) if i==0: max_value = x elif x>max_value: max_value = x print(max_value)
也可以把第一次单独列出来,之后循环n-1次进行比大小
1459参考代码2
n = int(input()) max_value = int(input()) for i in range(n-1): x = int(input()) if x>max_value: max_value = x print(max_value)
通过后你可以尝试下以下题目
7180 求最小值
n = int(input())
lista = []
for i in range(n):
lista.append(int(input()))
print(min(lista))
6836 新年大合唱比赛得分
lista = []
s = 0
for i in range(10):
lista.append(float(input()))
s += lista[i]
s = (s - max(lista) - min(lista)) / 8
print(format(s, '.2f'))
# print("%.2f" % s)
5886: 计算2的幂 2的n次方代表n个2相乘,那我们循环n次,每次乘2就可以了。那么2的0次方呢,任何数的0次方都等于1,那么*2就正好不会出错了,遇到需要相乘的,sum_value需要初始化为1。
5886参考代码
n=int(input()) sum_value=1 for i in range(n): sum_value=sum_value*2 print(sum_value)
通过后你可以尝试下以下题目
6859 乘方计算
a = int(input())
n = int(input())
f = 1
for i in range(n):
f *= a
print(f)
5973 移动小数点
n = float(input())
m = int(input())
print( format(n * (10**m) , '.2f'))
6732 阶乘
n = int(input())
f = 1
for i in range(1, n+1):
f *= i
print(f)
6860 求小数的某一位
a = int(input())
b = int(input())
n = int(input())
for i in range(1, n+1):
t = a % b
a = t * 10
print(a // b)
6844: 设备价格问题 已知从第2年到第6年,每年初的价值比上年初减少10万元;从第7年开始,每年初的价值为上年初的75%。
我们循环年份,将其分为两段即可。
6844参考代码
s=120 n=int(input()) for i in range(2,n+1): if 2<=i<=6: s=s-10 if i>=7: s=s*75/100 print("%.2f"%s)
通过后你可以尝试下以下题目
6824 数麦粒
n = int(input())
s = 1
item = 1
for i in range(2, n+1):
item *= 2
s += item
w = (s * 0.03) / 1000000
print(s)
print(format(w, '.2f'))
6862 反弹高度
n = int(input())
h = 100
s = 0
for i in range(1, n+1):
s += h*2
h /= 2
s -= 100
print(format(s, '.2f'))
print(format(h, '.2f'))
3.while循环及其实际应用
for针对固定次数的循环,有的时候循环次数不确定,我们可以使用while循环。
while 循环,又称为条件循环。while 循环语句的一般格式如下:
while <条件> :
<循环体>
[else:
语句块]
当条件判断为 True 时,循环体被重复执行,当条件判断为 False 时退出循环,else 子句的语句块才会被执 行。若条件表达式的值一直为True,则 while 循环将一直执行。因此,在循环体中一定要包含改变测试条件的语句,使循环能够结束,以避免死循环。
使用for输出1~20
参考代码
for i in range(1,21): print(i)
使用while循环输出1~20
i=1 while i<21: print(i) i=i+1
猜数游戏
在给定某数后,让用户输入数进行猜测,计算机给出相应提示,如偏大、偏小或正确。若所猜测的数正确,则输出猜测次数,否则继续猜数。
猜数游戏参考代码
num=66 i=0 while True: guess=int(input("请输入猜测的数:")) if guess<num: print("偏小") i=i+1 elif guess>num: print("偏大") i=i+1 else: print("正确,共猜测次数:",i+1) break
当然我们可以随机一个数,让他变得更有趣。random模块可以随机数字
import random # 随机生成一个[1,100]的整数 num=random.randint(1,100)
循环控制语句
循环控制语句主要有 break 和 continue
-
break语句
功能:跳出当前循环,不再判断执行循环的条件是否成立。 -
continue语句
功能:结束当前的当次循环,但不跳出当前循环,继续判断执行循环的条件是否成立。
6825: 储蓄问题 已知某同学有一些零用钱,他想通过银行储蓄增值。问:存多少年,才能达到预期的数额?
下一年钱=本金+利息=本金+本金*利率,所以我们可以将获得钱做为条件
6825参考代码
i=0 p=float(input()) q=float(input()) while p<q: p=p+p*0.03 i=i+1 print(i)
通过后你可以尝试下以下题目
6843 城市人口问题
x = float(input())
y = float(input())
year = 0
while x < y:
x *= 1.012
year = year + 1
print(year)
5006 害死人不偿命的(3n+1)猜想
n = int(input())
step = 0
while n > 1:
if n % 2 == 0:
n /= 2
else:
n = (3 * n + 1) / 2
step = step + 1
print(step)
4.二重循环
5400: 打印乘法表 要求我们打印n*n的乘法表
乘法表第1行1列,第2行2列,...,第9行9列,第i行i列,输出必须从上到下,从左到右,所以我们要一行一行输出。
每一行第一个数依次递增,第二个数为行数,所以循环变量i为行,j为列控制即可。
制表符为'\t',这个题需要特别控制,由于两个之间有一个制表符。我们可以将问题简化为第一个式子正常输出,第二个式子之后先输出制表符之后输出式子,即在循环里判断下即可。
5400参考代码1
n=int(input()) for i in range(1,n+1,1): for j in range(1,i+1,1): if j!=1: print("\t",end="") print(j,'*',i,'=',i*j,sep="",end="") print()
通过后你可以尝试下以下题目
1457 C语言实验题――求一个3*3矩阵对角线元素之和
a = []
for i in range(3):
b = list(map(int, input().split()))
a.append(b)
s = 0
for i in range(3):
s += a[i][i]
print(s)
3064 判断闰年
n = int(input())
for i in range(n):
year = int(input())
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
print("Yes")
else:
print("No")
5.打印图形
7181: 漂亮菱形简易版
循环分两部分,分别输出上下
上下对称,上部分输出好,行倒着输出下半部分。
上部分空格依次为4,3,2,1,即n//2+1-x
上部分*依次为1,3,5,7,9,即(2*x-1)
下半部分循环逆置
7181参考代码1
n = int(input()) for x in range(1,n//2+1+1): print(' '*(n//2+1-x),end='') print('*'*(2*x-1)) for x in range(n//2,0,-1): print(' '*(n//2+1-x),end='') print('*'*(2*x-1))
输入n输出n行。
第一行有4个空格,第二行有3个空格,第三行有2个空格,第四行有1个空格,第五行有0个空格,第六行有1个空格,第七行有2个空格,第八行有3个空格,第九行有4个空格
我们设空格个数为y,行号为x,当n为9时*可以列方程求解为y=|5-x| ,5为(n+1)/2求得
同理可以求得*个数的表达式为y=n-|n+1-2*x|
7181参考代码2
n = int(input()) for x in range(1,n+1): print(' '*abs((n+1)//2-x),end='') print('*'*(n-abs(n+1-2*x)))
通过后你可以尝试下以下题目
1172 C语言实验题――打印菱形
n = int(input())
for i in range(1, n+1):
print(' ' * (n - i), end='')
print('*' * (2 * i - 1))
for i in range(n-1, 0, -1):
print(' '*(n - i), end='')
print('*' * (2*i-1))
5970 打印长方形
r, c = map(int, input().split())
for i in range(1, r+1):
print("*" * c)
6145 打印平行四边形
n = int(input())
for i in range(1, n+1):
print(" " * (i-1), end='')
print("*" * n)
6319 Alice与字母K
n = int(input())
for i in range(1, n + 1):
print("|", end='')
print(" " * (n - i), end='')
print("/")
for i in range(1, n + 1):
print("|", end='')
print(" " * (i - 1), end='')
print("\\")
6498 2021加油
n = int(input())
for i in range(n):
for j in range(n):
if i == 0 or i == n-1 or i == (n//2):
print("*", end="")
elif i < (n//2):
if j != n-1:
print(" ", end="")
else:
print("*", end="")
elif i > (n//2):
if j != 0:
print(" ", end="")
else:
print("*", end="")
if j == n-1:
print(" ", end="")
for j in range(n):
if i == 0 or i == n-1:
print("*", end="")
else:
if j == 0 or j == n-1:
print("*", end="")
else:
print(" ", end="")
if j == n-1:
print(" ", end="")
for j in range(n):
if i == 0 or i == n-1 or i == (n//2):
print("*", end="")
elif i < (n//2):
if j != n-1:
print(" ", end="")
else:
print("*", end="")
elif i > (n//2):
if j != 0:
print(" ", end="")
else:
print("*", end="")
if j == n-1:
print(" ", end="")
for j in range(n):
if j == n-1:
print("*", end="")
else:
print(" ", end="")
print()
1177 C语言实验题――打印数字图形
n = int(input())
for i in range(1, n+1):
for j in range(n-i):
print(" ", end="")
for j in range(1, 2 * i):
if j <= i:
print(j, end="")
k = j
else:
k = k - 1
print(k, end="")
print()
for i in range(1, n):
for j in range(i):
print(" ", end="")
for j in range(1, 2 * (n - i)):
if j <= (n - i):
print(j, end="")
k = j
else:
k = k - 1
print(k, end="")
print()
五、枚举
在很多时候,由于人类大脑的运算和处理能力相对有限,无法立刻得出某个问题的可能解或最优解,如复杂密码的破解。但是,人们可以利用计算机运算速 度快和存储容量大的特点,采用最原始的破解方法——枚举法。
6842: 整数的因子 给定整数n求其因子。
因子只能是1到它本身,我们可以依次遍历,如果是(n%i==0)则输出。
6842参考代码
n=int(input()) for i in range(1,n+1): if n%i==0: print(i)
通过后你可以尝试下以下题目
6788 找数字
m = int(input())
n = int(input())
count = 0
for i in range(m, n):
a = i % 100 // 10
b = i % 10
if a == b:
count = count + 1
print(count)
6628 回文之99倍数
m = int(input())
n = int(input())
count = 0
for x in range(m, n+1):
raw = str(x)
if list(raw) == list(reversed(raw)) and x % 99 == 0:
count = count + 1
print(count)
或:
m = int(input())
n = int(input())
count = 0
for x in range(m, n+1):
raw = str(x)
if raw == raw[::-1] and x % 99 == 0:
count = count + 1
print(count)
或:
m = int(input())
n = int(input())
count = 0
for x in range(m, n+1):
raw = list(str(x))
i = 0
j = len(raw)-1
while i <= j:
if raw[i] != raw[j]:
break
i = i + 1
j = j - 1
if i > j and x % 99 == 0:
count = count + 1
print(count)
或:
m = int(input())
n = int(input())
count = 0
for i in range(m, n+1):
raw = i
result = 0
while raw > 0:
result = result * 10 + raw % 10
raw = raw // 10
if result == i and i % 99 == 0:
count = count + 1
print(count)
6847 韩信点兵
for i in range(1000, 1101):
if i % 3 == 2 and i % 5 == 4 and i % 7 == 6:
print(i)
6855 寻找水仙花数
m = int(input())
n = int(input())
for i in range(m, n+1):
a = i // 100
b = i // 10 % 10
c = i % 10
if a ** 3 + b ** 3 + c ** 3 == i:
print(i)
百钱买鸡
我国古代数学家张丘建在《算经》中提出了如下的数学问题:鸡翁一,值钱五;鸡母一, 值钱三;鸡雏三,值钱一;百钱买百鸡,问翁、母、雏各几何?
意思就是:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用100文钱买 100只鸡,公鸡、母鸡、小鸡各买多少只?
设公鸡有 x 只、母鸡有 y 只,小鸡有 z 只。根据题意,若全部买公鸡,则最多可以买 100/5只,因此 x 的取值范围为 0 ≤ x ≤ 20 ;若全部买母鸡,则最多可以买 100/3 只,因此 y 的取值范围为 0 ≤ y ≤ 33 ;若全部买小鸡,则最多可以买 100×3只,但鸡总共只有 100 只,因此 z 的取值范围为 0 ≤ z ≤ 100 。
枚举公鸡只数x,母鸡只数y,小鸡只数为(100-x-y),判断5𝑥+3𝑦+13(100−𝑥−𝑦)=100即可
百钱买鸡参考代码
count=0 #循环计数 for x in range(21): for y in range(34): count = count + 1 if 5*x+3*y+(100-x-y)/3==100: print("公鸡:",x,"母鸡:",y,"小鸡:",100-x-y) print("循环运行次数:",count)
枚举算法总结
基本思想是把问题所有的可能解一一列举出来,并判 断每一个列举出的可能解是否为正确的解。枚举算法的步骤:
(1)确定枚举对象、范围和判定条件。
(2)逐一枚举可能的解,并验证每个解是否为问题的解。
通过后你可以尝试下以下题目
6854 n钱买百鸡
n = int(input())
for a in range(n//5+1):
for b in range(n//3+1):
c = 100 - a - b
if (5 * a + 3 * b + c / 3) == n and c >= 0 and c % 3 == 0:
print(a, b, c)
6449 小z与直角三角形
n = int(input())
flag = False
for a in range(1, n+1):
for b in range(1, n+1):
if a ** 2 + b ** 2 == n ** 2 and a < b:
print(a, b)
flag = True
if not flag:
print("None")
6829 零钱兑换
n = int(input())
count = 0
for i in range(n//20 + 1):
for j in range(n//10 + 1):
for k in range(n//5 + 1):
if i * 20 + j * 10 + k * 5 == n:
count = count + 1
print(count)
6830 寻找完全数
n = int(input())
for i in range(1, n+1):
s = 0
for j in range(1, i):
if i % j == 0:
s = s + j
if s == i:
print(i)
2779 明明的幸运数
n = int(input())
count = 0
for i in range(1, n+1):
raw = list(str(i))
if i % 3 == 0 or '3' in raw:
count = count + 1
print(count)
六、模拟
6741: 动动有奖 有1个非常复杂的规则领取钱,我们可以分别考虑。
1.先考虑规则1
每天走路的前1000步奖励0.3金,之后每2000步奖励0.1金(不足2000步没有奖励),每天最高奖励不超过3金。
可以写出如下代码
6741规则1参考代码
if x>=1000: t=0.3+((x-1000)//2000)*0.1 if t>3: t=3 else: t=0
2.再考虑规则2
每天必须到计步器页面点击“领奖”按钮,才能领取昨日走路奖金。
我们可以设置个f进行读入
6741规则2参考代码
if f==1: if x>=1000: t=0.3+((x-1000)//2000)*0.1 if t>3: t=3 else: t=0 else:
3.考虑规则3
如果连续3天领奖成功,从第4天起走路奖金翻1倍(乘以2),每天最高奖励不超过6金。翻倍期间若有1天没有领奖(即连续每天领奖行为中断),则翻倍权益取消,重新连续3天领奖成功才能继续翻倍。
我们可以设置一个c代表签到天数
6741规则3参考代码1
if f==1: ... else: c=0
f=1,连签签到天数+1,否则归零。
+t之前进行判断
连签每天最高奖励不超过6金,和规则1每天最高奖励不超过3金重复,可以不用判断。
6741规则3参考代码2
c=c+1 if c>=4: s=s+2*t else: s=s+t
自然语言描述
①输入总天数n
②表示天数的变量i初始化为1
③若i≤n,则转④,否则转⑦。
④输入第i天的数据(包括第i天走路步数X;,是否成功领取第i天“奖金”的标
记F;)
⑤根据当前输入的数据Ⅹ,F,统计该天领取的奖金并累加到总奖金 total中。
⑥表示天数的变量i增加1,然后转③。
⑦输出变量 total的值。
6741参考代码
n = int(input()) s,c = 0,0 for i in range(n): x,f=map(int,input().split()) if f==1: if x>=1000: t=0.3+((x-1000)//2000)*0.1 if t>3: t=3 else: t=0 c=c+1 if c>=4: s=s+2*t else: s=s+t else: c=0 print("%.1f"%s)
通过后你可以尝试下以下题目
6744 条形码
s = input()
lst = list(s[::-1])
lst = list(map(int, lst))
# lst = [int(x) for x in lst]
x = sum(lst[1::2]) * 3
y = sum(lst[2::2])
s = x + y
t = s
while s % 10 != 0:
s = s + 1
if (s - t) == lst[0]:
print("OK")
else:
print("Error")
6848 篮球得分预测问题
a, b = map(int, input().split(':'))
team = input()
t = int(input())
if a > b:
a -= 3
if team == 'A':
a += 0.5
else:
a -= 0.5
if a < 0:
a = 0
a = a ** 2
if a > t:
team = "A"
else:
team = "B"
else:
b -= 3
if team == 'B':
b += 0.5
else:
b -= 0.5
if b < 0:
b = 0
b = b ** 2
if b > t:
team = "B"
else:
team = "A"
print(team)
5604 Kannyi打印模板
n, k = map(int, input().split())
no = 1
while not (n == 0 and k == 0):
s = ((n + 1)//2 + k - 1) // k
f = 0
print("Case ", no, ":", sep='')
no = no + 1
for i in range(1, n+1, 2):
if f != (s - 1) and i != n and i != n-1:
print(i, ",", sep='', end='')
f = f + 1
else:
print(i)
f = 0
n, k = map(int, input().split())
4391 集气袋
while True:
try:
# n:任务数,m:怒气值上限
n, m = map(int, input().split())
s = 0
# gas:机器猫是否用了一次性的集气带
gas = False
# flag:使用了集气带,也没法完成任务
flag = False
while n > 0:
n = n - 1
# s:怒气值和,a:怒气值
a = int(input())
s += a
if a >= m and n > 0: # 怒气满,机器猫暴走
flag = True
if s >= m and gas and n > 0: # 怒气值满,且集气带也用过了
flag = True
if s >= m and not gas: # 怒气满,且集气带也没用过,清零处理
s = a
gas = True
if flag:
print("It's Imposible!")
else:
print(s)
except:
break
4790 津津的储蓄计划
money = 0 # 零花钱
mom = 0 # 交给妈妈的钱
month = 0 # 预算超支的月份
cost = 0 # 每个月的预算
for i in range(1, 13):
money += 300 # 每个月多300元
cost = int(input())
money -= cost # 减去预算
if money < 0: # 说明超支
month = -i # 记录月份
break # 退出循环,无需继续计算
mom += money // 100 * 100 # 整百交给的妈妈
money %= 100 # 自己留下的零钱
if money < 0:
print(month)
else:
print(int(money + mom * 1.2))
七、后记
在此对浙教版信息技术教材的编写者表示崇高的敬意,万分感谢帮助本文章完成的台州学院老师以及各位朋友,感谢你们对中学计算机教育付出的努力。同时也希望各位读者可以掌握Python编程这门技术,解放生产力,为我国的数字化进程添砖加瓦。若要继续学习,参见 Python编程与实际应用-待更新,对应为高中信息技术必修1、2中应用部分;Python编程与数据结构-待更新,对应为高中信息技术选择性必修1内容。
更多推荐
TZC Python编程入门教程 ————题解
发布评论