TZC Python编程入门教程 ————题解

本博客原文地址:Python编程入门教程(以在线评测平台为载体) - 暴力都不会的蒟蒻 - 博客园,原文体验更佳

如果你是一名浙江2020级及以后的高中生要学习Python,抑或是一位科学工作者要学习Python,抑或是一名熟悉C/C++想扩展自己的技术栈来学习Python,抑或是一位小朋友在学习Python,以下文章对你学习Python编程将非常有帮助。
天天快乐编程在线评测平台现有6000多题,且支持Python语言,各种层级题目均具备。所以这里以天天快乐编程TZOJ为例,带您一起尝试用Python刷在线评测平台(Online Judge),提升自己的编程技巧及解决问题的能力。天天快乐编程信息技术分类,以下文章所提到的题目均已按顺序在此分类里。

一、Python语言简介

Python由荷兰数学和计算机科学研究学会的Guido van Rossum 于1990 年代初设计,也就是龟叔,顺便一提,Van 这个姓氏代表是贵族后裔。

TZC Python编程入门教程 ————题解_第1张图片


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,并将你的代码粘贴进去,点击提交后即可看到结果。

TZC Python编程入门教程 ————题解_第2张图片


提交后显示红色的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”的索引标号如下所示

字符 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 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的情况。

TZC Python编程入门教程 ————题解_第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 guessnum:
        print("偏大")
        i=i+1
    else:
        print("正确,共猜测次数:",i+1)
        break

当然我们可以随机一个数,让他变得更有趣。random模块可以随机数字

import random
# 随机生成一个[1,100]的整数
num=random.randint(1,100)

循环控制语句

循环控制语句主要有 break 和 continue

  1. break语句
    功能:跳出当前循环,不再判断执行循环的条件是否成立。

  2. continue语句
    功能:结束当前的当次循环,但不跳出当前循环,继续判断执行循环的条件是否成立。

6825: 储蓄问题 已知某同学有一些零用钱,他想通过银行储蓄增值。问:存多少年,才能达到预期的数额?
下一年钱=本金+利息=本金+本金*利率,所以我们可以将获得钱做为条件
6825参考代码

i=0
p=float(input())
q=float(input())
while p 
  

通过后你可以尝试下以下题目
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 。

TZC Python编程入门教程 ————题解_第4张图片

枚举公鸡只数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内容。

你可能感兴趣的:(python刷题题单,python,开发语言)