首页 > 编程语言 >CS50-Python实验5,6

CS50-Python实验5,6

时间:2023-04-06 18:22:20浏览次数:57  
标签:__ assert return CS50 Python sys 实验 import def

Week 5 Unit Tests

Testing my twittr

题目描述:

测试Problem Set2中Setting up my twttr程序;

题解:

twttr.py

def main():
    print("Output: ", shorten(input("Input: ")))



def shorten(word):
    ans = ""
    for i in word:
        if i.lower() not in ['a', 'e', 'i', 'o', 'u']:
            ans+=i
    return ans

if __name__ == "__main__":
    main()

test_twttr.py

from twttr import shorten

def test_shorten():
    assert shorten("aeiou") == ""
    assert shorten("AEIOU") == ""
    assert shorten("Twitter") == "Twttr"
    assert shorten("What's your name?") == "Wht's yr nm?"
    assert shorten("CS50") == "CS50"

Back to the Bank

题解:

bank.py

def main():
    str = value(input("Greeting: "))
    print(f"${str}")

def value(greeting):
    greeting = greeting.strip().lower()
    if greeting.startswith("hello"):
        return 0
    elif greeting.startswith("h"):
        return 20
    else:
        return 100

if __name__ == "__main__":
    main()

test_bank.py

from bank import value

def test_bank():
    assert value("Hello") == 0
    assert value("Hello, Newman") == 0
    assert value("How you doing?") == 20
    assert value("What's happening?") == 100

Re-requesting a Vanity Plate

题解:

plates.py

def main():
    plate = input("Plate: ")
    if is_valid(plate):
        print("Valid")
    else:
        print("Invalid")


def is_valid(s):
    if len(s) < 2 or len(s) > 6:
        return False
    if not s[0].isalpha() or not s[1].isalpha():
        return False
    if not all(ch.isalnum() for ch in s):
        return False

    flag = False
    for ch in s:
        if ch.isdigit():
            flag = True
        if ch.isalpha() and flag:
            return False

    for ch in s:
        if ch.isdigit():
            return ch != "0"

    return True


if __name__ == "__main__":
    main()

test_plates.py

from plates import is_valid

def test_plates():
    assert is_valid("CS50") == True
    assert is_valid("CS05") == False
    assert is_valid("CS50P") == False
    assert is_valid("PI3.14") == False
    assert is_valid("H") == False
    assert is_valid("123456") == False
    assert is_valid("OUTATIME") == False

Refueling

题解:

fuel.py

def main():
    print(gauge(convert(input("Fraction: "))))


def convert(fraction):
    while True:
        try:
            x, y = map(int, fraction.split("/"))
            if y == 0:
                raise ZeroDivisionError
            if x > y:
                raise ValueError
            return round(x / y * 100)
        except (ValueError, ZeroDivisionError):
            pass


def gauge(percentage):
    if percentage <= 1:
        return "E"
    elif percentage >= 99:
        return "F"
    else:
        return f"{percentage}%"


if __name__ == "__main__":
    main()

test_fuel.py

from fuel import convert, gauge
import pytest


def test_convert():
    assert convert("3/4") == 75
    assert convert("0/100") == 0
    assert convert("100/100") == 100
    assert convert("99/100") == 99

    with pytest.raises(ValueError):
        convert("x/y")

    with pytest.raises(ZeroDivisionError):
        convert("1/0")


def test_gauge():
    assert gauge(0) == "E"
    assert gauge(1) == "E"
    assert gauge(100) == "F"
    assert gauge(99) == "F"
    assert gauge(2) == "2%"

Week6 File I/O

Lines of Code

题目描述:

计算.py文件代码有多少行;

题解:

import sys

## 判断输入是否合法
if len(sys.argv) != 2 or not sys.argv[1].endswith(".py"):
    sys.exit("Invalid arguments.")

## 读取文件
try:
    with open(sys.argv[1]) as file:
        sum = 0

        ## 排除注释
        for line in file:
            if line.strip() and not line.lstrip().startswith("#"):
                sum += 1

        ## 输出结果
        print(sum)
except FileNotFoundError:
    sys.exit("File does not exist.")

Pizza Py

题解:

from tabulate import tabulate
import csv
import sys

## 判断输出是否合法
if len(sys.argv) != 2 or not sys.argv[1].endswith(".csv"):
    sys.exit("Invalid arguments.")

## Note that the tabulate package comes with just one function, per pypi.org/project/tabulate. You can install the package with:
## pip install tabulate

try:
    with open(sys.argv[1]) as file:
        print(tabulate(csv.DictReader(file), headers="keys", tablefmt="grid"))
except FileNotFoundError:
    sys.exit("File does not exist.")

Scourgify

题目描述:

题解:

import csv
import sys

## 判断输出合法性
if len(sys.argv) != 3 or not sys.argv[1].endswith(".csv"):
    sys.exit("Invalid arguments.")

try:
    with open(sys.argv[1]) as input, open(sys.argv[2], "w", newline="") as output:
        reader = csv.DictReader(input)
        writer = csv.DictWriter(output, fieldnames=["first", "last", "house"])
        writer.writeheader()
        
        for row in reader:
            last_name, first_name = row["name"].strip().split(", ")
            writer.writerow(
                {"first": first_name, "last": last_name, "house": row["house"]}
            )

except FileNotFoundError:
    sys.exit("File does not exist.")

CS50 P-Shirt

题解:

from PIL import Image, ImageOps
import sys

if len(sys.argv) != 3:
    sys.exit("Invalid arguments.")

input = sys.argv[1]
output = sys.argv[2]
types = (".jpg", ".jpeg", ".png")
if (
    not input.endswith(types)
    or not output.endswith(types)
    or input.split(".")[1] != output.split(".")[1]
):
    sys.exit("Invalid arguments.")


shirt = Image.open("shirt.png")
try:
    with Image.open(input) as im:
        im = ImageOps.fit(im, shirt.size)
        im.paste(shirt, shirt)
        im.save(output)
except FileNotFoundError:
    sys.exit("File does not exist.")

标签:__,assert,return,CS50,Python,sys,实验,import,def
From: https://www.cnblogs.com/sinowind/p/17293723.html

相关文章

  • python系列007
    //使用类进行设备控制类文件内容importpyvisaimportnumpyasnpimporttimeclassPiDevice:def__init__(self):self.device_id=None#默认无设备连接deffind_device_address(self,device_id):rm=pyvisa.ResourceMa......
  • 20230406-Python-if判断-day4
    条件语句4月6场景假设:网吧上网去⽹吧进⻔想要上⽹必须做的⼀件事是做什么?(考虑重点)为什么要把身份证给⼯作⼈员?是不是就是为了判断是否成年?是不是如果成年可以上⽹?如果不成年则不允许上⽹?其实这⾥所谓的判断就是条件语句,即条件成⽴执⾏某些代码,条件不成⽴则不执⾏这些......
  • Python学习——Day1
      学习python与C语言相似,第一件事也是输出一个”HelloWorld"。  但是相比C语言,python的输出要简洁好多,他没有换行符\n也能自动换行,print()函数里字符串无论是使用单引号还是双引号结果都能正常输出且输出结果一样。  第二个就是注释,python则与C语言不同,这里用到......
  • 【Python从零到壹】Python条件语句详解
    欢迎大家来到互联网老辛的专栏《Python从零到壹》,在这里我将分享约300篇Python系列文章,所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。从事教学工作以来,越来越觉得时间的宝贵,每届学生都要讲重复的课,......
  • 关于python安装模块之后pychram仍然提示没有安装模块的问题
    项目场景:如图所示:需要安装的包已经安装好,但是到了pycharm里就没法使用,相信很多小伙伴遇到过这个问题。原因分析:遇到这个问题的主要原因是你的电脑里安装了两个pycharm解释器,你安装后,实际上是安装到了你电脑的Python3而非pycharm解释器。解决方案:所以我们可以在pycharm里面直......
  • WinCE5.0下实现透明背景按钮(.net C#) 个人实验
    参考了WinCE5.0下实现透明背景按钮(.netC#)这篇文章后,本着不模仿的态度去做,结果发现还是原先作者的思路比较好,自己的做法虽然比较简单当时图片得做很多张,效果其实也差不多,而且可维护性并不强,先把我自己做的贴出来。希望自己多敲敲,能找出更简单的方案来目录试图:效果: 直接贴代码:us......
  • python requests-html
    #pipinstallrequests-html '''目标网站:https://pic.netbian.com'''fromrequests_htmlimportHTMLSessionimportre,osimportrequestsfromtqdmimporttqdmfromfunctoolsimportpartialfrommultiprocessingimportPools......
  • python系列006
    先使用一个文件控制设备importtime#importpyvisafrompimiimportPiDevicedevice=PiDevice("ASRL3::INSTR")#创建实例,并手动写入地址参数,可以借助NIMax读取whoisPower=device.PiPower()#调用类中的方法,电源地址#Sendacommandtotheinstrument#......
  • python中动态导入文件的方法
    1.简介在实际项目中,我们可能需要在执行代码的过程中动态导入包并执行包中的相应内容,通常情况下,我们可能会将所需导入的包及对象以字符串的形式传入,例如test.test.run,下面将介绍如何动态导入。假设存在如下包:其中test.py的内容如下:count=1defrun():print("run")......
  • opencv-python 4.12. 模板匹配
    理论模板匹配是一种在较大图像中搜索和查找模板图像位置的方法。为此,OpenCV附带了一个函数cv.matchTemplate()。它只是在输入图像上滑动模板图像(如在2D卷积中),并比较模板图像下的输入图像的模板和补丁。在OpenCV中实现了几种比较方法。它返回一个灰度图像,其中每个像素表示该像素的......