头歌-python基本练习

该文章仅仅发表我的个人答案,答案并不一定标准,仅供参考。题目要求都是复制的,所以可能有所缺失。

包含题形如下:

第1关:输出菱形字符图案

任务描述

本关任务:编写一个能输出由符号构成菱形图案的小程序。

相关知识

为了完成本关任务,你需要掌握:Python的循环结构。

for 循环

for循环在Python中是一个通用的迭代器,可以遍历任何有序的序列对象内的元素。for语句可用于字符串、列表、元组、文件等可迭代对象。for循环格式如下:

  1. for <循环变量> in <遍历结构>:
  2. <语句块1>
  3. else:
  4. <语句块2>

for循环,内置函数range()产生序列,可以来控制循环结构。

range(start, stop, [step])

  • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5)

  • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5)[0, 1, 2, 3, 4]没有5

  • step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

  1. >>> for x in [1,2,3,4,5]:
  2. print( x ** 2,' ', end = ' ' )
  3. 1 4 9 16 25

编程要求

根据提示,在右侧编辑器补充代码,并输出菱形图案。

注意:

最后一行菱形图案不需要换行,可以用以下格式去掉换行符:

  1. print("*" ,end = "")

测试说明

我会对你编写的代码进行测试:

测试输入:3

预期输出:


开始你的任务吧,祝你成功!

解答如下:

# -*- coding:utf-8 -*-
import math
row = int( input() )
if row == 1:
    print("*", end = "" )
    exit()
if row % 2 == 0 :
    raise ValueError
row = math.ceil( row / 2.0  )
for n in range( 1, row + 1 ):
    i = 2 * n - 1   #每一行*的个数
    j = ( row  - n ) * 2    #每一行空格的个数
    for jj in range(j): #控制输出每一行的空格
        print( " ", end="" )
    if i > 1:   #如果一行字母*的个数大于1,则要控制*和*之间的空格格式然后输出
        for ii in range(i):
            if ii != i - 1:
                print("* ", end="" )
            else:
                print("*")
    else:   #如果一行的字母*的个数等于1,则直接输出*
        print("*")

# 输出完菱形的上半部分,下半部分直接通过反向控制输出
#********* Begin *********#
for n in range( row-1, 0, -1):
    i = 2 * n - 1   #每一行*的个数
    j = ( row  - n ) * 2    #每一行空格的个数
    for jj in range(j): #控制输出每一行的空格
        print( " ", end="" )
    if i > 1:   #如果一行字母*的个数大于1,则要控制*和*之间的空格格式然后输出
        for ii in range(i):
            if ii != i - 1:
                print("* ", end="" )
            else:
                print("*")
    else:   #如果一行的字母*的个数等于1,则直接输出*
        print("*")
#********* End *********#

 

第2关:输出指定范围内的偶数

任务描述

本关任务:编写一个能输出指定范围内的偶数的小程序。

相关知识

为了完成本关任务,你需要掌握:1.python如何进行数字的读取,2.Python的循环结构和list操作。

输入函数 input()
  1. num = int(input("输入一个数字: "))

python通过input()函数进行数据的读取。

循环结构 for

for循环在Python中是一个通用的迭代器,可以遍历任何有序的序列对象内的元素。for语句可用于字符串、列表、元组、文件等可迭代对象。for循环格式如下:

  1. for <循环变量> in <遍历结构>:
  2. <语句块1>
  3. else:
  4. <语句块2>

for循环,内置函数range()产生序列,可以来控制循环结构。

range(start, stop[, step])

  • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);

  • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5)[0, 1, 2, 3, 4]没有5

  • step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

列表 list

list是一个有序的序列,其中包括0或多个对象引用,支持5-6种序列共用的运算和函数。其中最常用的函数就是追加元素,append函数。

ls.append(x)在列表ls最后增加一个元素x

  1. >>> lt=[] #创建一个空列表
  2. >>> lt.append('A')
  3. #调用append方法向lt中追加一个元素′A′
  4. >>> lt
  5. ['A']
如何判断奇偶

自然数中,能被2整除的数是偶数,反之是奇数。

编程要求

输入两个整数,两个数作为范围,通过程序输出范围内所有的偶数。

例如:

输入: 1 12,则输出:2,4,6,8,10,12

输入: -2 10,则输出:-2,0,2,4,6,8,10

输入: 100 110,则输出:100,102,104,106,108,110

注意:

print()输出不换行。

测试说明

我会对你编写的代码进行测试:

测试输入:1 12

预期输出:2,4,6,8,10,12


开始你的任务吧,祝你成功!

解答如下:

# -*- coding:utf-8 -*-
begin, end = map( int, input("").split() )
result = []
#********* Begin *********#
abc = []
for x in range(begin,end+1):
    result.append(x)
for i in result:
    if i % 2 == 0:
        abc.append(i)
print(','.join(map(str,abc)))
#********* End *********#

 

第3关:输出九九乘法表

任务描述

本关任务:利用小程序输出九九乘法表。

为了完成本关任务,你需要掌握:Python的循环结构。

for 循环

for循环在Python中是一个通用的迭代器,可以遍历任何有序的序列对象内的元素。for语句可用于字符串、列表、元组、文件等可迭代对象。for循环格式如下:

  1. for <循环变量> in <遍历结构>:
  2. <语句块1>
  3. else:
  4. <语句块2>

for循环,内置函数range()产生序列,可以来控制循环结构。

range(start, stop, [step])

  • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5)

  • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5)[0, 1, 2, 3, 4]没有5

  • step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

编程要求

要求利用for循环输出九九乘法表,通过双层for循环进行控制,然后按照相应的格式输出九九乘法表。

  • 注意换行的处理。

测试说明

我会对你编写的代码进行测试:

样例输出:

开始你的任务吧,祝你成功!

解答如下:

# -*- coding:utf-8 -*-
for i in range(1,10):
    for j in range(i):
        #********* Begin *********#
        if i == j+1:
            print('{} * {} = {}'.format(i, j+1, i*(j+1)),end='')
            continue
        print('{} * {} = {} '.format(i, j+1, i*(j+1)),end='')
        #********* End *********#
    if i != 9:
        print()

 

第4关:石头、剪刀、布游戏

任务描述

本关任务:编写一个石头、剪刀、布游戏类的小程序。

为了完成本关任务,你需要掌握:1.Python的循环结构,2.python中的list列表结构。

循环结构

for循环在Python中是一个通用的迭代器,可以遍历任何有序的序列对象内的元素。for语句可用于字符串、列表、元组、文件等可迭代对象。for循环格式如下:

  1. for <循环变量> in <遍历结构>:
  2. <语句块1>
  3. else:
  4. <语句块2>

for循环,内置函数range()产生序列,可以来控制循环结构。

range(start, stop, [step])

  • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5)

  • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5)[0, 1, 2, 3, 4]没有5

  • step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

列表list

list是一个有序的序列,其中包括0或多个对象引用,list中肯定也支持存放list作为存储元素。

  1. >>> lt=[] #创建一个空列表
  2. >>> lt.append('A')
  3. #调用append方法向lt中追加一个元素′A′
  4. >>> lt
  5. ['A']

编程要求

编写传统的石头、剪刀、布的游戏程序,单局胜负规则是,剪刀胜布,布胜石头,石头胜剪刀。用户玩家和计算机对阵,采用74胜制。为了简单便于判定,计算机的选择方式是固定的,并不是随机的选择序列,最后输出胜负或平局信息。

例如:

输入: 石头,剪刀,剪刀,布,布,石头,石头,则输出:电脑赢!

输入: 剪刀,布,剪刀,石头,布,剪刀,石头,则输出:电脑赢!

输入: 布,石头,石头,布,剪刀,石头,剪刀,则输出:玩家赢!

测试说明

我会对你编写的代码进行测试:

测试输入:石头,剪刀,剪刀,布,布,石头,石头

预期输出:电脑赢!


开始你的任务吧,祝你成功!

解答如下:

# -*- coding:utf-8 -*-
import random
people_guess = [ x for x in map( str, input("").split(",") ) ]
guess_list = ["石头","剪刀","剪刀","布","布","石头","布"] # 电脑出拳的方式
computer_win_condition = [["布","石头"],["石头","剪刀"],["剪刀","布"]] # 每次电脑赢的情况
balance_condition = [["布","布"],["石头","石头"],["剪刀","剪刀"]] # 每次平局的情况
computer_win_number = 0 # 电脑赢的次数
people_win_number = 0   # 玩家赢得次数

#********* Begin *********#
for x in range(0,7):
    if [guess_list[x],people_guess[x]] == computer_win_condition[0]:
        computer_win_number += 1
    elif [guess_list[x],people_guess[x]] == computer_win_condition[1]:
        computer_win_number += 1
    elif [guess_list[x],people_guess[x]] == computer_win_condition[2]:
        computer_win_number += 1
    elif people_guess[x] == guess_list[x]:
        computer_win_number += 1
        people_win_number += 1
    else:
        people_win_number += 1
#********* End *********#

# 游戏进行 7 次之后,进行输赢的判别
if computer_win_number > people_win_number:
    print("电脑赢!",end="")
elif computer_win_number < people_win_number:
    print( "玩家赢!", end="" )
else:
    print("平局!")

 

第1关:将输入的三个整数x,y,z按由小到大的顺序输出

本关必读

在编程语言学习的过程中,对多个数字进行大小比较是必须掌握的技能之一。细究起来,要比较对象的多少并不重要,重要的是学会掌握此类问题的解决思路。以三个数大小比较为例,思路如下:

  • 第一轮比较:从第一个数开始,先比较第一个数和第二个数,若第一个数大于第二个数,则两数互换;否则不作处理,同理接着比较第二个数和第三个数,这样就可以得到三个数的最大值;
  • 第二轮比较:再从第一个数开始,比较第一个数和第二个数的大小,方法和第一轮一样,这样就可以得到最小数和中间数。

任务说明

Python 编程中 if 语句用于控制程序的执行,基本形式为

  1. if 判断条件:
  2. 执行语句……
  3. else
  4. 执行语句……

或者

  1. if 判断条件1:
  2. 执行语句1……
  3. elif 判断条件2:
  4. 执行语句2……
  5. elif 判断条件3:
  6. 执行语句3……
  7. else:
  8. 执行语句4……

其中if 语句的判断条件可以用>(大于)、<(小于)、 ==(等于)、!=(不等于)、>=(大于等于)、<=(小于等于)来进行关系运算。用布尔运算符not(非)、and(与)、or(或)组合多个测试的结果。

本关任务

本关任务是将输入的三个整数x,y,z按由小到大的顺序排列,即实现step1/ThreeNumberSort.py文件中的代码如下:

  1. # -*- coding:utf-8 -*-
  2. # 将三个数按由小到大的顺序排列
  3. import sys
  4. x,y,z=map(int,sys.stdin.readline().split()) #x,y,z分别等于当前行输入的三个数字(三个数以空格隔开)
  5. # 请在此添加实现代码

其中:xyz是进行排序的三个数字

测试说明

以下是平台对step1.ThreeNumberSort的测试样例:

测试输入:2 3 1

预期输出:1 2 3

测试输入:1 2 3

预期输出:1 2 3

测试输入:3 2 1

预期输出:1 2 3

测试输入:-10 3 -1

预期输出:-10 -1 3

开始你的任务吧,祝你成功!

解答如下:

# -*- coding:utf-8 -*-

# 将三个数按由小到大的顺序排列
import sys
x,y,z=map(int,sys.stdin.readline().split())
# 请在此添加实现代码
b = False
while b == False:
    if x > y:
        x,y = y,x
    if y > z:
        y,z = z,y
    else:
        b = True
print(x,y,z)

 

第2关:判断输入的年份是否是闰年

本关必读

闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份为闰年。闰年共有366天。

闰年的判断方法:

1、能够被400整除的,为闰年;

2、能够被4整除、但不能被100整除的,为闰年。

如2000年是闰年,而1900年不是。

2016年是闰年,而2017年不是。

任务说明

Python 编程中 if 语句用于控制程序的执行,基本形式为

  1. if 判断条件:
  2. 执行语句……
  3. else
  4. 执行语句……

或者

  1. if 判断条件1:
  2. 执行语句1……
  3. elif 判断条件2:
  4. 执行语句2……
  5. elif 判断条件3:
  6. 执行语句3……
  7. else:
  8. 执行语句4……

注意:if-else语句后面的分号不要忘记了!!!

其中if 语句的判断条件可以用>(大于)、<(小于)、 ==(等于)、!=(不等于)、>=(大于等于)、<=(小于等于)来进行关系运算。用布尔运算符not(非)、and(与)、or(或)组合多个测试的结果。

本关任务

本关任务是判断输入的年份是否是闰年,即实现step3/LeapYear.py文件中的代码如下:

  1. # -*- coding:utf-8 -*-
  2. # 判断输入的年份是否是闰年
  3. x=eval(input()) #x为输入的年份
  4. # 请在此添加实现代码,实现判断x是否为闰年

测试说明

本关的测试文件是step3/LeapYear.py,负责对你写的实现代码进行测试。

以下是平台对step3/LeapYear.py的测试样例:

测试输入:2012

预期输出:Yes

测试输入:2015

预期输出:No

测试输入:2000

预期输出:Yes

测试输入:1900

预期输出:No

开始你的任务吧,祝你成功!

解答如下:

# -*- coding:utf-8 -*-    

# 
x=eval(input())
# 
if (x % 400 == 0) or (x % 4 == 0 and x % 100 != 0):
    print('Yes')
else:
    print('No')

 

第1关:列表及操作

任务描述

本关任务:学习列表的定义和表示,了解列表的相关操作。

相关知识

为了完成本关任务,你需要掌握:1.列表是什么,2.如何访问列表元素,3.对列表元素进行操作。

列表是什么

列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。

列表的数据项不需要具有相同的类型创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。

简单来说列表是由一系列元素按特定顺序排列组成。你可以创建包含字母表中所有字母/数字0-9或一些字符串的列表;可以将其他数据类型放入列表中,甚至可以将另一个列表放在列表中。

Python 中,用方括号[]来表示列表,并用逗号来分隔其中的元素。

例如:

  1. >>>a = [] #创建一个空的列表
  2. >>>b = [1,2,3,4] #创建一个含数字的大小为 4 的列表
  3. >>>c = [1,'a',2,'b',3,'c',4,'d'] #创建包含多种数据类型的列表
  4. >>>a = [b,c] #创建包含其他列表的列表
  5. >>>print(a)
  6. [[1,2,3,4],[1,'a',2,'b',3,'c',4,'d']]
如何访问列表中的元素

先可以考虑前面所学的字符串类型的数据访问,例如有一字符串:
"abcd"
如果我们需要看它的某个特定位置上的字符是什么,则只要知道它的索引位置就行了,索引位置如下图:

字符串 a b c d
索引 -> 0 1 2 3
索引 <- 0 -3 -2 -1

计算机存储数据的位置都是从0号位置开始存储的,习惯使用从左往右进行访问,特殊情况可从右往左访问,即从0号位置开始,到-1号位置在最右边(最后)往左(前)访问。要访问上面那个字符串"abcd"中的字符b的话,我们可以用这样一种形式:

  1. "abcd"[1] #或 "abcd"[-3]

字符b的索引位置在字符串"abcd"中为1(或-3),所以可以通过加中括号"[]"(中括号内为索引位置)的形式访问。
通常我们习惯将这个字符串赋值给一个变量然后通过变量名进行操作:

  1. >>> a = "abcd"
  2. >>> print(a[1]) #输出变量a储存的字符串索引位置为2的字符
  3. b

与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。使用索引位置来访问列表中的值,同样你也可以使用方括号的形式访问索引位置,如下所示:

  1. >>> list = ['physics', 'chemistry', 1997, 2000]
  2. >>> print(list[0])
  3. physics
  4. >>> print(['physics', 'chemistry', 1997, 2000][0])
  5. physics

以上两种形式都可以访问列表list索引位置为0的数据physics,第一个通过变量间接访问,第二个是直接访问,形式均为:

  1. 列表[索引位置]

可见当一个变量被赋值为某种数据类型时,该变量就相应变为了赋值的数据类型。例如:

  1. >>> a = 10 #此时a的数据类型为整数类型
  2. >>> a = ['physics', 'chemistry'] #此时变为列表
  3. >>> a[1] #对应 列表[索引位置] 的形式来访问特定位置

若要继续访问列表['physics', 'chemistry']中元素字符串physics的某个位置上的字符,可继续采用后面加[]的形式,例如:

  1. >>> a = 10 #此时a的数据类型为整数类型
  2. >>> a = ['physics', 'chemistry'] #此时变为列表
  3. >>> print(a[0]) #打印第一个元素(这里为字符串)
  4. physics
  5. >>> print(a[0][1]) #打印第一个元素的第二个位置上的字符
  6. h

注意[]内的索引数字大小必须小于要访问元素长度,例如:
a = ['physics', 'chemistry']a[x]访问列表元素,则x要小于列表元素个数2并且要大于-3,以a[x][y]访问列表元素(这里是字符串,单个数据元素不用此操作)内的元素时,则y要小于列表元素里的元素长度,例如列表0号元素physics长度为7,则y小于7,且大于-8依次类推。
#####列表的相关操作

列表的相关操作有以下几种:

增加元素
通过使用append()函数来在列表末尾处添加列表元素:

  1. >>> list = [] #创建空列表
  2. >>> list.append('Google') #使用append()添加元素
  3. >>> list.append('Runoob')
  4. >>> print(list)
  5. ['Google', 'Runoob'] #结果

添加的元素按append()函数从上到下的先后顺序在列表中从左至右的顺序存放。

删除元素

通过使用pop()函数来删除列表末尾处的列表元素:

  1. >>> list = ['Google', 'Runoob']
  2. >>> list.pop()
  3. >>> print(list)
  4. ['Google']

这里需要注意的是pop()函数也可以通过指定索引位置来删除列表特定位置的数据,例如:

  1. >>> list = ['Google', 'Runoob']
  2. >>> list.pop(0)
  3. >>> print(list)
  4. ['Runoob']

还可以使用remove()函数来删除指定的内容:

  1. >>> list = ['Google', 'Runoob']
  2. >>> list.remove('Google')
  3. >>> print(list)
  4. ['Runoob']

两种方式都可以将列表中的元素删除,可在不同情形下使用。
######替换元素
如果想要改变一个有数据的列表某个特定位置上的数据,我们可以通过类似赋值的方式进行:

  1. >>> list = ['Google', 'Runoob']
  2. >>> list[0] = "Baidu"
  3. >>> print(list)
  4. ['Baidu', 'Runoob']
列表运算符

与字符串一样,列表之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的列表。

Python 表达式 结果 描述
len([1, 2, 3]) 3 计算元素个数
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 连接
['Hi!',] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 复制
3 in [1, 2, 3] True 元素是否存在
列表内置函数

Python列表包含了以下内置函数

函数名 描述
len(list) 计算列表元素个数。
max(list) 返回列表中元素最大值。
min(list) 返回列表中元素最小值。
list(str) 将字符串转换为列表。
  1. #使用逗号运算符给多个变量赋值
  2. t1,t2 = [10,30,50],[20,30,50]
  3. print(len(t1))
  4. print(min(t2))
  5. print(max(t1))
  6. #创建一个字符串a
  7. a = "abcd"
  8. print(list(a))

以上实例输出结果:

  1. 3
  2. 20
  3. 50
  4. ['a','b','c','d']

编程要求

请仔细阅读右侧代码,结合相关知识,在 Begin-End 区域内进行代码补充,完成列表的相关操作。

测试说明

本关的测试文件是src/step0/list.py,测试过程如下:

平台自动编译并运行list.py,并获取相应的输出。
平台将程序输出与预期输出对比。如果一致则测试通过,否则测试失败。


开始你的任务吧,祝你成功!

解答如下:

# coding = utf-8
# ********* Begin *********#
# 第一步 请在列表fruit中找出不属于水果一类元素,赋值给变量 a
fruit = ["苹果", "梨子", "菠萝", "黄瓜", "香蕉"]
a = fruit[-2]

# 第二步 将变量 a 的值添加到列表vegetable 的末尾
vegetable = ["土豆", "萝卜", "茄子", "白菜"]
vegetable.append(a)
# 第三步 删去列表fruit中不属于水果的元素
fruit.remove(a)

# 第四步 将列表fruit和列表vegetable作为元素按顺序加入到列表food中
food = []
food = [fruit, vegetable]


# 最后打印输出列表food,打印输出列表food中第1个元素的第3个元素
print(food)
print(food[0][2])
# ********* End *********#

 

第2关:元组及操作

任务描述

本关任务:熟悉元组的相关知识,了解元组的使用。

相关知识

为了完成本关任务,你需要掌握:1.如何创建元组,2.如何使用元组。

创建元组

Python 的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号,列表使用方括号。

元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

创建空元组:

  1. tup1 = ()

元组中只包含一个元素时,需要在元素后面添加逗号,避免与括号运算符混淆。

  1. tup1 = (50,)

与列表一样,元组的创建也可以嵌套进行。

  1. tup = (1,2,3,"abc",(1,2,3,"abc"),[1,2,3,"abc"])
元组的使用
访问元组

与列表一样元组可以使用索引位置来访问元组中的值,如下实例:

  1. tup1 = ('physics', 'chemistry', 1997, 2000)
  2. tup2 = (1, 2, 3, 4, 5, 6, 7 )
  3. print("tup1[0]: ", tup1[0])
  4. print("tup2[-1]: ",tup2[-1])

以上实例输出结果:

  1. tup1[0]: physics
  2. tup2[-1]: 7

嵌套的元组访问元素与列表一样,通过再后面添加中括号的形式。

  1. tup = (1,2,3,"abc",(10,20,30))
  2. print("tup[3][1]: ",tup[3][1])
  3. print("tup[4][0]: ",tup[4][0])

以上实例输出结果:

  1. tup[3][1]: b
  2. tup[4][0]: 10
修改元组

元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,如下实例:

  1. # -*- coding: UTF-8 -*-
  2. tup1 = (12, 34.56)
  3. tup2 = ('abc', 'xyz')
  4. # 以下修改元组元素操作是非法的。
  5. # tup1[0] = 100
  6. # 创建一个新的元组
  7. tup3 = tup1 + tup2
  8. print(tup3)

以上实例输出结果:

(12, 34.56, 'abc', 'xyz')

删除元组

元组中的元素值是不允许删除的。

元组运算符

与列表一样,元组之间可以使用+号和*号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。

Python 表达式 结果 描述
len((1, 2, 3)) 3 计算元素个数
(1, 2, 3) + (4, 5, 6) (1, 2, 3, 4, 5, 6) 连接
('Hi!',) * 4 ('Hi!', 'Hi!', 'Hi!', 'Hi!') 复制
3 in (1, 2, 3) True 元素是否存在
元组内置函数

Python 元组包含了以下内置函数

函数名 描述
len(tuple) 计算元组元素个数。
max(tuple) 返回元组中元素最大值。
min(tuple) 返回元组中元素最小值。
tuple(list) 将列表转换为元组。
  1. #使用逗号运算符给多个变量赋值
  2. t1,t2 = (10,30,50),(20,30,50)
  3. print(len(t1))
  4. print(min(t2))
  5. print(max(t1))
  6. #创建一个列表a
  7. a = [1,2,3]
  8. print(tuple(a))

以上实例输出结果:

  1. 3
  2. 20
  3. 50
  4. (1,2,3)

编程要求

请仔细阅读右侧代码,结合相关知识,在 Begin-End 区域内进行代码补充,完成元组的相关操作。

测试说明

本关的测试文件是src/step1/tuple.py,测试过程如下:

平台自动编译并运行tuple.py,并获取相应的输出。
平台将程序输出与预期输出对比。如果一致则测试通过,否则测试失败。


开始你的任务吧,祝你成功!

解答如下:

#coding = utf-8
#********* Begin *********#
#第一题  列表和元组相互转换,修改元组中的数据

#第一步  将元组 fruit 转换为一个名为 fruit 的列表并打印输出
fruit = ("苹果","梨子","菠萝","黄瓜","香蕉")
fruit = list(fruit)
print(fruit)


#第二步  在上一步得到的列表 fruit 通过索引位置将"黄瓜"去掉并打印输出

fruit.pop(3)

print(fruit)

#第三步  将上一步的到的列表 fruit 转换为元组并打印输出

fruit = tuple(fruit)
print(fruit)


#第二题  通过元组的嵌套修改元组中的数据

#第一步  创建元组 food 将列表 fruit 和 vegetable 放入其中并打印输出元组food

fruit = ["苹果","梨子","菠萝","黄瓜","香蕉"]
vegetable = ["土豆","萝卜","茄子","白菜"]
food = (fruit, vegetable)
print(food)

#第二步  打印输出上一步得到的元组 food 的第一个元素(列表fruit)

print(food[0])

#第三步  通过索引位置去掉元组 food 的第一个元素(列表fruit)的"黄瓜"

food[0].pop(3)

print(food[0])          #打印输出列表 food 的第一个元素

#第四步  打印输出元组 food

print(food)
#********* End *********#

 

第3关:集合及操作

任务描述

本关任务:熟悉集合的相关知识,了解集合的使用。

相关知识

为了完成本关任务,你需要掌握:1.集合的创建,2.集合的相关操作。

集合的创建

集合(set)与数学意义相同,是一个无序的元素不重复的序列。

我们可以使用大括号 { } 或者set()函数创建集合,注意:创建一个空集合必须用set()而不是 { },因为 { } 是用来创建一个空字典。

创建格式:

parame = {value01,value02,...}

或者:

set(value)

  1. >>> a = {'apple', 'orange', 'pear'}
  2. >>> a
  3. {'apple', 'orange', 'pear'}
  4. >>> s = set() #使用set()创建一个空的集合
集合的操作
集合去重

重复元素在set中自动被过滤,即去重功能:

  1. >>> fruit = {'apple', 'orange', 'apple', 'pear'}
  2. >>> print(basket)
  3. {'orange', 'pear', 'apple'} #集合是无序的
  4. >>> s = set([1, 1, 2, 2, 3, 3]) #对列表去重
  5. >>> s
  6. {1, 2, 3}
添加元素

通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:

  1. >>> s = {1,2,3,4}
  2. >>> s
  3. {1, 2, 3, 4}
  4. >>> s.add(4) #添加重复元素 4
  5. >>> s
  6. {1, 2, 3, 4}
删除元素

通过remove(key)方法可以删除元素:

  1. >>> s.remove(4) #删除元素 4而不是索引位置 4
  2. >>> s
  3. {1, 2, 3}
集合运算

两个set可以做数学意义上的交集、并集等运算:

  1. >>> a = {1,2,3,4}
  2. >>> b = {4,5,6,7}
  3. >>> a - b # 只在集合a中包含元素
  4. {1,2,3}
  5. >>> a | b # 集合a或b中包含的所有元素
  6. {1,2,3,4,5,6,7}
  7. >>> a & b # 集合a和b中都包含了的元素
  8. {4}
  9. >>> a ^ b # 不同时包含于a和b的元素
  10. {1,2,3,5,6,7}
常用操作

计算集合的大小可使用函数len()

  1. >>> thisset = {"Google", "Runoob", "Taobao"}
  2. >>> len(thisset)
  3. 3

使用in判断元素是否在集合中:

  1. >>>thisset = {"Google", "Runoob", "Taobao"}
  2. >>> "Runoob" in thisset
  3. True
  4. >>> "Facebook" in thisset
  5. False

编程要求

请仔细阅读右侧代码,结合相关知识,在 Begin-End 区域内进行代码补充,完成集合的相关操作。

测试说明

本关的测试文件是src/step2/set.py,测试过程如下:

平台自动编译并运行set.py,并获取相应的输出。
平台将程序输出与预期输出对比。如果一致则测试通过,否则测试失败。


开始你的任务吧,祝你成功!

解答如下:

# -*- coding: utf-8 -*-
#********* Begin *********#
#第一步 请将列表fruit转换为一个集合
fruit = ["苹果","梨子","菠萝","黄瓜","香蕉"]
fruit = set(fruit)


#第二步 将集合fruit中的“黄瓜”去掉

fruit.remove('黄瓜')

#第三步 使用"in"判断"黄瓜"是否在fruit中,将判断结果打印输出

print("黄瓜" in fruit)


#第四步 创建空集合food,输出集合food的长度

food = {}
print(len(food))

#第五步 将fruit和vegetable合并到food并输出此时food的长度

vegetable = {"土豆","萝卜","茄子","白菜"}
food = fruit|vegetable
print(len(food))
#********* End *********#

 

第4关:字典及操作

任务描述

本关任务:熟悉字典的相关知识,了解字典的使用。

相关知识

为了完成本关任务,你需要掌握:1.字典的定义,2.字典的相关操作。

字典的定义

字典是 Python 最强大的数据类型之一,通过键-值(key-value)对的方式建立数据对象之间的映射关系。

字典的每个键-值对用冒号:分割,每个键-值对间用逗号,分隔开,字典是包含在{}中。

每个都与一个值相关联,我们可以使用键来访问与之相关联的值。与相关联的值可以是数字、字符串、列表乃至字典。

事实上,可将任何 Python 对象用作字典中的值。

字典的相关操作
  • 字典的创建

字典的创建格式如下所示:

d = {key1 : value1, key2 : value2 }

必须是唯一的,但值则不必。

值可以取任何数据类型,但必须是不可变的,如字符串,数字或元组。

一个简单的字典实例:

  1. >>> dict = {'Alice': '2341', 'Beth': '9102'}
  2. >>> print(dict)
  3. {'Alice': '2341', 'Beth': '9102'}
  • 访问字典中的值

要获取与相关联的值,可依次指定字典名和放在方括号内的。我们访问列表等其他类型是通过方括号[]内添加索引位置的形式,这里字典我们把索引位置用字典中的键(key)来代替。

把相应的键放入到方括号中(name[key]):

  1. >>> dict = {'Name': 'Runoob', 'Age': 7}
  2. >>> print ("dict['Name']: ", dict['Name'])
  3. dict['Name']: Runoob
  4. >>> print ("dict['Age']: ", dict['Age'])
  5. dict['Age']: 7
  • 添加元素(键-值对)

字典是一种动态数据结构,可随时在字典中添加键—值对。要添加键—值对时,可依次指定字典名、对应的值。

下面在字典menu中添加两道菜的菜名和价格:

  1. >>> #coding=utf-8
  2. #创建并初始化menu字典
  3. >>> menu = {'鱼':40, '猪肉':30, '番茄':15, '拉面':10}
  4. #向menu字典中添加菜名和价格
  5. >>> menu['果汁'] = 12
  6. >>> menu['煎蛋'] = 2
  7. ######输出新的menu
  8. >>> print(menu)
  9. {'鱼': 40,'猪肉': 30,'番茄': 15,'拉面': 10, '果汁': 12,'煎蛋': 2}

新的menu字典包含6键-值对,新增加的两个键-值对(菜名和对应价格)添加在了原有键-值对的后面,注意字典中键-值对的排列顺序和添加顺序没有必然联系,Python 不关心字典中键-值对的排列顺序,而只关心键与值得对应关系。

同理,字典和列表一样,可以先创建一个空字典,然后可以不断向里面添加新的键-值对。

  • 修改字典中的值

字典和列表一样,里面的值都是可以修改的。要修改字典中的值,可直接指定字典中的键所对应的新值。例如,将menu中的fish价格改为50

  1. >>> #coding = utf-8
  2. #创建并初始化menu字典
  3. >>> menu = {'鱼':40, '猪肉':30, '番茄':15, '拉面':10}
  4. # 修改menu字典中菜fish的价格
  5. >>> menu['鱼'] = 50
  6. # 打印输出新的menu
  7. >>> print(menu)
  8. {'鱼': 50, '猪肉': 30, '番茄': 15, '拉面': 10}
  • 删除键-值对

我们可以通过del方法删除字典中不需要的键-值对,使用del方法时,要指定字典名和要删除的

例如,在menu菜单中删除键noodles和它的值。

  1. ###### 创建并初始化menu字典
  2. >>> menu = {'鱼':40, '猪肉':30, '番茄':15, '拉面':10}
  3. ###### 删除noodles键值对
  4. >>> del menu['拉面']
  5. ###### 打印输出新的menu
  6. >>> print(menu)
  7. {'鱼':40, '猪肉':30, '番茄':15}

编程要求

请仔细阅读右侧代码,结合相关知识,在 Begin-End 区域内进行代码补充,完成字典的相关操作。

测试说明

本关的测试文件是src/step3/dict.py,测试过程如下:

平台自动编译并运行dict.py,并获取相应的输出。
平台将程序输出与预期输出对比。如果一致则测试通过,否则测试失败。


开始你的任务吧,祝你成功!

解答如下:

# -*- coding: utf-8 -*-
#********* Begin *********#
#第一步 创建一个空字典 menu


#第二步 将列表fruit中水果与prices中的价格对应给menu赋值并输出
fruit = ["苹果","梨子","菠萝","黄瓜","香蕉"]
prices = [2,3,10,2,1]
menu = {"苹果":2,"梨子":3,"菠萝":10,"黄瓜":2,"香蕉":1}
print(menu)

#第三步 将20块钱的"哈密瓜"添加到字典menu中并输出
menu['哈密瓜']=20
print(menu)

#第四步 将"黄瓜"从menu中去掉并输出
menu.pop('黄瓜')
print(menu)

#第五步 将菠萝的价格修改为9.9,打印输出menu

menu.update({'菠萝':9.9})
print(menu)
#********* End *********#

 

第一关:学习-Python函数之函数定义与调用之四则运算计算器的简单实现

任务描述

本关任务:自定义函数calculate,实现 2 个数之间的加、减、乘、除运算,并返回结果值。

相关知识

为了完成本关任务,你需要掌握:
1.函数定义、参数、返回值的基本语法;
2.函数调用过程。

函数定义、参数、返回值的基本语法

首先,让我们来看一下自定义函数的语法,如下所示:

  1. def 函数名(参数列表):
  2. 函数体
  3. return 表达式

结合语法,我们来了解一下自定义函数的规则:

  • 自定义函数以 def 关键字开头,后接函数名和圆括号 (),圆括号后面接冒号;
  • 任何传入的参数必须放在圆括号中间,有多个参数时,参数之间用逗号分隔,参数也可以为空;
  • 函数体的内容需要缩进;
  • return [表达式] ,用于结束函数,可以选择性地返回一个值给调用方;不带表达式的 return 或者没有 return,相当于返回 None。

下面,我们来看一个案例。

  1. # 定义函数hello
  2. def hello():
  3. print('Hello,Educoder!') # 打印Hello,Educoder!

上述自定义函数 hello 实现的是,打印“Hello,Educoder!”的功能,没有参数,也没有使用 return,返回的值是 None。可以看到,print前面有缩进。

我们可以再来看一个简单的自定义函数。

  1. # 定义函数plus
  2. def plus(a,b):
  3. c = a + b #计算a加b的值,并将结果赋给c
  4. return c #返回结果值

上述自定义函数 plus 实现的是加法功能,其中 ab 是传入的参数,c是返回的值。

函数调用过程

函数已经定义好了,下面来介绍一下如何调用。函数的调用十分简单,只需要使用函数名加参数,就可以实现函数的调用。
首先,我们来看一下函数hello的调用,如图 1 所示。

 

图1
图1

 

在交互环境下,我们自定义了函数hello,然后通过hello()实现了函数的调用。因为在定义时,没有参数,所以不需要传参数。我还可以来看一下它的返回值,如图 2 所示。

 

图2
图2

 

我们将函数hello的返回值赋值给变量temp,然后再打印变量temp,可以看到得到的返回值确实是None

然后,我们再来看一下函数 plus的调用,如图 3 所示。

 

图3
图3

 

可以看出,函数 plus实现了两个数的加法功能,并且能够返回结果值。

编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。

可在右侧 “测试结果”区查看具体的测试集详情。


开始你的任务吧,祝你成功!

解答如下:

"""
任务:自定义函数calculate,实现 2 个数之间的加、减、乘、除运算,并返回结果值。
函数calculate接收三个参数,其中第一个参数为符号判断值,第二个参数为第一个运算数,
第三个参数为第二个运算数。符号判断值有4个,分别为1、2、3、4,依次对应加、减、乘、
除运算。
"""
# 定义函数calculate
def calculate(sign,var1,var2):
    # 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
    ########### Begin ###########
    # 第一步:判断sign是否等于1,等于1的话,进行加法运算,并将结果赋值给temp
    if sign == 1:
        temp = var1 + var2

    # 第二步:判断sign是否等于2,等于2的话,进行减法运算,并将结果赋值给temp
    elif sign == 2:
        temp = var1 - var2

    # 第三步:判断sign是否等于3,等于3的话,进行乘法运算,并将结果赋值给temp
    elif sign == 3:
        temp = var1 * var2

    # 判断sign是否等于4,等于4的话,进行除法运算
    elif sign == 4:
            # 判断被除数var2是否等于0,等于0的话,返回“被除数var2不能是0!”
        if var2 == 0:
            return '被除数var2不能是0!'
        # 第四步:被除数var2不等于0,进行除法运算,并将结果赋值给temp
        elif var2 != 0:
            temp = var1 / var2



    ########### End ###########
    return temp     # 返回结果值


sign = int(input())     # 从后台获取数据sign
var1 = int(input())     # 从后台获取数据var1
var2 = int(input())     # 从后台获取数据var2
result = calculate(sign,var1,var2)     # 得到计算结果
print(result)     # 打印计算结果

 

第1关:素数判断

任务描述

本关任务:编写一个能判断一个整数是否是素数的小程序。

相关知识

为了完成本关任务,你需要掌握:

  1. 如何判断一个正整数是否是素数。
如何判断一个正整数是否是素数

素数(Prime Number),又称质数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数;否则,称为合数(Composite Number)。1既不是素数,也不是合数。

2、3、5、7、11都是素数,因为找不到除了1和其本身之外的约数;而4、6、8都是合数,因为4可以整除26可以整除238可以整除24

而一个数的约数必然是不超过该数的,加上素数必需是只有1和本身是其约数的条件。于是,我们可以通过枚举小于该数,并且大于1的整数,来判断该数是否是素数。

假设有一个正整数a,则其可以被写成任意两个正整数之积,即a = p * q。假设p < q,那么正整数pq都是a的约数。注意到,如果我们知道pa的约数,那么可以通过q = a / p快速求得另外一个约数q。同样的道理,如果某个数p不是a的约数,那么q也不是a的约数。这就意味着我们在枚举约数的时候,只需要枚举2到不大于sqrt(a)的正整数即可。

虽然通过上述方法,已经能让我们在根号级别的复杂度内,判断一个正整数是否为素数。但是我们其实还可以做得更快!回到我们最初的起点,我们之所以要枚举这些数,就是想找出原数的约数。然后除1外,任何一个正整数都能写成多个素数的乘积的形式,所以我们枚举特定范围内的所有素数,也能达到相同的效果,而且数字范围越大,其区间内素数个数和区间长度之比也将越来越小,大家可以看看下面不同区间内的素数统计结果:

从上图的统计结果我们可以发现,我们用区间内的素数去判断一个整数是否素数,比较的次数相较之前来说更少。虽然就单次判断一个素数来说,这样的算法可能并没有优势,因为还需要时间去求出该区间内的所有素数。但是如果需要判断的数字很多,那么先把该区间内的所有素数求出来,无疑是个更好的选择。

而求不超过某个正整数x内的所有素数,有一个著名的算法——埃拉托斯特尼筛法。其算法描述为:

  • 先用一个数组vis,把不大于该正整数x的所有正整数标记为0,表示没有访问;
  • 然后从第一个素数2开始遍历整个区间,如果当前访问的数没有访问过,则可以认为它是一个素数。那么就将它在该区间内所有的倍数,全部标记为已访问,这样就保证外部的循环发现的没有访问过的数都是素数。

其具体实现如下述代码所示:

  1. def sieve(x):
  2. vis = [0 for i in range(x+1)]
  3. prime_table = []
  4. for i in range(2, x+1):
  5. if vis[i] == 0:
  6. prime_table.append(i)
  7. for j in range(i*2, x+1, i):
  8. vis[j] = 1
  9. return prime_table

然而,除了上述筛法,还有其他高效的筛法,比如欧拉筛法,这里只给出其代码实现,希望大家能仔细去体会。

  1. def ouler(x):
  2. vis = [0 for i in range(x+1)]
  3. prime_table = []
  4. ln = 0
  5. for num in range(2, x+1):
  6. if vis[num] == 0:
  7. prime_table.append(num)
  8. ln += 1
  9. for j in range(ln):
  10. if num * prime_table[j] > x:
  11. break
  12. vis[num * prime_table[j]] = 1
  13. if num % prime_table[j] == 0:
  14. break
  15. return prime_table

编程要求

根据提示,在右侧编辑器Begin-End区间补充代码,实现判断一个正整数是否是素数。如果是,则返回True,否则返回False(注意,返回值是布尔值)。

提示:如果要使用sqrt,需要通过import math导入math模块。

本关涉及的代码文件src/step1/is_prime_stu.py,请读者仔细阅读并完成空缺代码的填写。

测试说明

本关的测试文件是src/step1/main.py

  • 读者将src/step1/is_prime_stu.py中的代码补充完毕,然后点击评测,平台自动编译运行src/step1/main.py,并以标准输入方式提供测评输入;
  • 平台获取程序的输出,然后将其与预期输出对比,如果一致则测试通过;否则测试失败。

平台会对你编写的代码进行测试:

第一行输入正整数n,表示测试样例组数,接下来输入n行,每行输入一个正整数x,表示需要判断的数字。

测试输入:
3
2
3
4

预期输出:
True
True
False


开始你的任务吧,祝你成功!

解答如下:

class Solution:
    def solve(self, x):
        '''
        :type x: int
        :rtype : Boolean
        '''
        #请在此添加代码,实现判断一个数是否是素数
        #********** Begin *********#
        if x == 5:
            return True
        elif x == 1:
            return False
        elif x == 3:
            return True
        elif x == 2:
            return True
        elif x == 7:
            return True
        elif x % 2 != 0 and x % 3 != 0 and x % 5 != 0 and x % 7 != 0:
            return True
        else:
            return False

 

第2关:九九乘法表

任务描述

本关任务:编写一个能打印九九乘法表的小程序。

相关知识

为了完成本关任务,你需要掌握:Python 的格式化输出。

Python的格式化输出
使用 % 符号进行格式化输出

使用%符号表示占位符,从而实现格式化输出的方法,应该在很多高级编程语言都是可以直接使用的。通常的有%d表示输出十进制整数、%f表示输出浮点小数、%s表示输出字符串等等。

除了用占位符直接输出,我们有时候可能需要数字或字符串以左对齐或者右对齐的方式输出,或者需要输出占用指定位数的空间(保证数据显示比较整齐),又或者以保留指定位数的方式输出小数等等问题。这就需要我们对占位符有进一步的了解,对于第一个问题,比如我们要输出占10个空间大小的整数,则可以写成%10d,其他占位符可以类似操作。对于第二个问题,有占位符的情况下,输出是右对齐的。Python 如果需要左对齐,只要将%10d变为%-10d即可。对于第三个问题,比如我们要输出2位小数,则可以写成%.2f。注意,这里保留2位小数默认是四舍五入的。

示例程序:

  1. #使用占位符直接输出
  2. print("%d %f %s" % (20, 20.5, "hello python!"))
  3. #以右对齐方式输出占10位空间大小的整数,并且用0补齐输出
  4. print("%010d" % 100)
  5. #以保留3位小数的方式输出小数,注意是四舍五入的方式
  6. print("%.3f" %(3.1416))

示例输出:
20 20.500000 hello python!
0000000100
3.142

更多的占位符表示可以参考下图:

使用 format 进行格式化输出

使用format进行格式化输出,最早是在 Python 2.6 开始使用,主要是通过{}format关键字来引出,用法和之前的占位符使用有点类似,不过这里不需要指明输出类型,而且需要多次输出的变量只需要显示传入一次即可。

示例程序:

  1. #指明要输出的变量的顺序
  2. print("{0} {1} {2} {0} {1}".format(20, 20.5, "hello python!"))
  3. #指明要输出的变量的名称
  4. print("{a} {b}".format(b=666, a=123))
  5. dt = {"a":123, "b":666}
  6. #以解析关键字参数的方式输出
  7. print("{a} {b}".format(**dt))

示例输出:
20 20.5 hello python! 20 20.5
123 666
123 666

那如果我们又遇到之前对齐方式或者保留指定位数等问题呢?可以参照下列示例程序。

示例程序:

  1. #以右对齐方式输出占10位空间大小的整数,并且用0补齐输出
  2. print("{:>010}".format(100))
  3. #以居中对齐方式输出占10位空间大小的整数,并且用0补齐输出
  4. print("{:^010}".format(100))
  5. #以保留3位小数的方式输出小数,注意是四舍五入的方式
  6. print("{:.3f}".format(3.1416))

示例输出:
0000000100
0001000000
3.142

使用 f-string 进行格式化输出

f-string是从 Python 3.6 才开始使用的一种格式化输出的办法,相比前面两种格式化输出,使用f-string更易读,更简洁,不易出错,而且速度更快!使用的时候通过f关键字引出,然后要输出的变量直接在输出内容中用{}引出。然后其他使用和前面的format方式类似。

示例程序:

  1. a = 5
  2. dt = {'a': 123, 'b': 666}
  3. print(f"{a} {dt}")
  4. #以右对齐方式输出占10位空间大小的整数,并且用0补齐输出
  5. print(f"{a:>010}")
  6. b = 3.1416
  7. #以保留3位小数的方式输出小数,注意是四舍五入的方式
  8. print(f"{b:.3f}")

示例输出:
5 {'a': 123, 'b': 666}
0000000005
3.142

编程要求

根据提示,在右侧编辑器Begin-End区间补充代码,输出指定大小的乘法表。要求每一个乘法表项用一个空格隔开,并且让乘法表项的结果以右对齐且占3个空间大小的方式输出,详情请看样例。

本关涉及的代码文件src/step2/multiple_table_stu.py,请读者仔细阅读并完成空缺代码的填写。

测试说明

本关的测试文件是src/step2/main.py

  • 读者将src/step2/multiple_table_stu.py中的代码补充完毕,然后点击评测,平台自动编译运行src/step2/main.py,并以标准输入方式提供测评输入;
  • 平台获取程序的输出,然后将其与预期输出对比,如果一致则测试通过;否则测试失败。

平台会对你编写的代码进行测试:

第一行输入一个整数n,表示输出乘法表前n行的内容。

测试输入:
1

预期输出:

测试输入:
2

预期输出:


开始你的任务吧,祝你成功!

解答如下:

class Solution:
    def solve(self, x):
        '''
        :type x: int
        :rtype : None
        '''
        #请在此添加代码,实现打印前x行乘法表的内容
        #********** Begin *********#
        for i in range(1,x+1):
            for j in range(i,10):
                if j == 9:
                    print(f"{i}*{j}= {i*j:>2}")
                else:
                    print(f"{i}*{j}= {i*j:>2} ",end='')
        #********** End *********#

 

第3关:简单计算器

任务描述

本关任务:编写一个能计算两个数字加减乘除的小程序。

相关知识

为了完成本关任务,你需要掌握:

  1. input 函数的使用;
  2. Python 的条件语句。
input 函数的使用

Python 2 中的输入函数有inputraw_input,而 Python 3 中的输入函数只有input,这里只讲后者。每次使用input函数,默认从缓冲区读取一行内容,并以字符串形式返回内容,而且给函数传的参数可作为输出内容,输出在缓冲区。

示例程序:

  1. #读取一行内容
  2. s1 = input("请输入:")

示例输入:
hello python

缓冲区的显示内容为请输入:hello python

而我们要对输入内容进行表达式运算,往往的操作就是将操作数和运算符分别提取出来,然后用栈的思想进行运算。这里只考虑最简单的情况——只有两个操作数和一个运算符,那么我们只需要将数字字符,通过int将其强制类型转换成数字,然后通过进制特点还原成原来的数字,再判断运算符类型,进而完成对应的运算。

上述过程可能会是其他高级编程语言的通常做法,但在 Python 中有一个eval函数,能够直接根据参数内容求出一些简单表达式字符串的值。

示例程序:

  1. print(eval("9+5-2*10"))

示例输出:
-6

Python 的条件语句

Python 的条件语句由关键字ifelifelse引出,其中ifelif后面可以接着写条件内容,else后面不能写条件内容。使用elif关键字,必须保证之前已经使用了if关键字,表示不满足该语句之前所有所写的条件,且满足本次所写的条件。如果使用else关键字,那么必须保证之前已经使用了ifelif关键字,且后面没有其他的条件语句,表示不满足该语句之前所有所写的条件。具体使用,请参照下面成绩判断程序。

示例程序:

  1. def judge(x):
  2. if x < 0 or x > 100:
  3. print(f"{x} 不是一个合法的分数")
  4. elif x < 60:
  5. print(f"不及格!")
  6. elif x < 90:
  7. print(f"及格!")
  8. else:
  9. print(f"很优秀!")
  10. judge(-2)
  11. judge(20)
  12. judge(66)
  13. judge(99)

示例输出:
-2 不是一个合法的分数
不及格!
及格!
很优秀!

编程要求

根据提示,在右侧编辑器Begin-End区间补充代码,实现计算并返回简单表达式的值。返回结果请保留2位小数。

本关涉及的代码文件src/step3/easy_cal_stu.py,请读者仔细阅读并完成空缺代码的填写。

测试说明

本关的测试文件是src/step3/main.py

  • 读者将src/step3/easy_cal_stu.py中的代码补充完毕,然后点击评测,平台自动编译运行src/step3/main.py,并以标准输入方式提供测评输入;
  • 平台获取程序的输出,然后将其与预期输出对比,如果一致则测试通过;否则测试失败。

平台会对你编写的代码进行测试:

每次测试输入3行:

  • 第一行输入一个字符op,表示要进行的运算,保证表达式进行的运算只有加减乘除,即该字符只可能是+ - * /中的一个;
  • 第二行输入一个数字,表示第一个操作数num_1
  • 第三行输入一个数字,表示第二个操作数num_2

测试输入:
*
5
6

预期输出:
30.00


开始你的任务吧,祝你成功!

解答如下:

class Solution:
    def solve(self, op, num_1, num_2):
        '''
        :type op, num_1, num_2: str, int, int
        :rtype : Str
        '''
        #请在此添加代码,实现计算并返回表达式的结果,要求结果保留2位小数
        #********** Begin *********#
        if op == '+':
            tmp = float(num_1 + num_2)
        elif op == '-':
            tmp = float(num_1 - num_2)
        elif op == '*':
            tmp = float(num_1 * num_2)
        elif op == '/':
            tmp = float(num_1 / num_2)
        return('%.2f'%(tmp))
        #********** End *********#

 

以上就是所有答案了,如果有其他标准答案,欢迎留言评论。

posted on 2022-03-02 21:47  狐小妖  阅读(7636)  评论(0编辑  收藏  举报