本博客原文地址: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.cn")
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.cn","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”的索引标号如下所示
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内容。
|