实验楼python3学习挑战项目

实验楼python3学习挑战项目

在实验楼学习python3做的挑战项目做的代码整理。

链接:https://www.shiyanlou.com/courses/596

1、圆的面积

题目:

能够计算出一个半径为2的圆的面积,并且把面积打印出来,保留小数点后10位。

不要使用 input 等方法获得输入,程序不需要输入任何参数,可以使用 python3 CircleArea.py 执行,并直接输出 半径为2 的圆的面积数字。

提示语:

  • import math

  • format

  • 注意脚本名称和路径

知识点:

  • 导入模块

  • 打印输出

  • 运算符和表达式

代码实现:

#!/usr/bin/env python3
import math
r=2
print("{:.10f}".format(math.pi*r**2))

代码实现手动输入半径:

#!/usr/bin/env python3
import math
r=float(input("Enter the r: "))
print("{:.10f}".format(math.pi*r**2))

2、字符串操作

题目:

创建一个 名为 FindDigits.py 的Python 脚本,请读取一串字符串并且把其中所有的数字组成一个新的字符串,并且打印出来。我们提供的字符串可以通过在命令行中输入如下代码来获取。

提示语:

  • 使用循环来访问字符串中的单个字符

  • isdigit()

  • 记得把新的字符串打印出来,print()函数记得要加括号(这里是Python3 的主场!敲黑板)

知识点:

  • 循环

  • 字符串操作

代码实现:

#!/usr/bin/env python3
file=open('/home/shiyanlou/Code/String.txt')
str_file-file.read()
num=""
for i in range(len(str_file)):
    if str_file[i].isdigit():
        num+=str_file[i]

print("%s"%num) 

3、玩转函数

题目:

实现一个函数 Hours(),将用户输入的 分钟数 转化为 小时数和分钟数,并要求小时数尽量大。讲结果以 XX H, XX M 的形式打印出来。(注意打印格式中的空格)

要求

  • 用户能够通过命令行输入分钟数,程序需要打印出相应的小时数和分钟数

  • 如果用户输入的是一个负值,程序需要报错 ValueError

  • 需要进行 try…except 操作来控制异常。如果异常,在屏幕上打印打印出 ValueError: Input number cannot be negative 提示用户输入的值有误

提示语:

  • import sys

  • raise语句

  • try…except 语句

知识点:

  • 异常

  • 文件处理

  • if-else

代码实现:

#!/usr/bin/env python3
import sys
def Hours(num):
    hour=int(num/60)
    minute=int(num%60)
    print(hour,"H,",minute,"M")

if len(sys.argv)<2:
    sys.exit(1)
else:
    if int(sys.argv[1])<0:
        try:
            raise ValueError("A value error happened.")
        except ValueError:
            print("ValueError: Input number cannot be negative")
    else:
        Hours(int(sys.argv[1]))

4、类和Collection

题目:

改写我们在第11节类这个模块当中 2.3 继承 部分的 student_teacher.py 脚本,在Person()类中增添函数get_grade()。对于教师类,该函数可以自动统计出老师班上学生的得分情况并按照频率的高低以A: X, B: X, C: X, D: X 的形式打印出来。对于学生类,该函数则可以以Pass: X, Fail: X 来统计自己的成绩情况(A,B,C 为 Pass, 如果得了 D 就认为是 Fail)。

student_teacher.py 文件可以通过在Xfce 终端中输入如下代码来获取

wget http://labfile.oss.aliyuncs.com/courses/790/student_teacher.py

要求

  • 请把最终的student_teacher.py 代码文件放在 /home/shiyanlou/Code/ 路径下

  • 根据命令行中的第一个参数 teacher 或者 student 来判断最终输出的格式。

  • 命令行中第二个输入的参数是需要统计的字符串

提示语:

  • import sys

  • collections 中的 Counter 子类

  • format() 以及 join

知识点:

  • Collection 模块

  • 注意最终的打印形式

代码实现:

#!/usr/bin/env python3
import sys
from collections import Counter

class Person(object):

    def __init__(self, name):
        self.name = name

    def get_details(self):
        return self.name

    def get_grade(self,grade):
        if self.name=='teacher':
            list=Counter(grade).most_common()
            item=["{}:{}".format(x,y) for x,y in list]
            return ','.join(item)
        elif self.name=='student':
            return "Pass:{},Fail:{}".format(len(grade)-grade.count("D"),grade.count("D"))

class Student(Person):

    def __init__(self, name, branch, year):
        Person.__init__(self, name)
        self.branch = branch
        self.year = year

    def get_details(self):

        return "{} studies {} and is in {} year.".format(self.name, self.branch, self.year)


class Teacher(Person):

    def __init__(self, name, papers):
        Person.__init__(self, name)
        self.papers = papers

    def get_details(self):
        return "{} teaches {}".format(self.name, ','.join(self.papers))



if __name__=='__main__':
    if len(sys.argv)<2:
        sys.exit(-1)
    else:
        person=Person(sys.argv[1])
        print(person.get_grade(sys.argv[2]))

你可能感兴趣的:(python学习)