首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有输入验证的个人测试

带有输入验证的个人测试
EN

Code Review用户
提问于 2019-09-09 22:10:44
回答 1查看 251关注 0票数 1

代码的目标是提示用户进行测试,并收集g、y、0's和1's,如果有多个,则用户通过(否则,它们失败)。我是一个初学者,想知道是否有一个更有效的方向,这段代码进入。

代码语言:javascript
复制
from time import sleep
print(pic1)


def check(name):
    if name.lower() == "brandon":
        print("Welcome home master")
    else:
        print("Let's find some data")
        sleep(0.5)
        print("What is your favorite color?")
        color = input("fav_color>>> ")
        if color == "":
            print("No skipping!")
            print(check(input("Enter Name Here>>> ")))
        print("What is your dream car?")
        car = input("fav_car>>> ")
        if car == "":
            print("No skipping!")
            print(check(input("Enter Name Here>>> ")))
        print("What team are you on?")
        team = input("team_name>>> ")
        if team == "":
            print("No skipping!")
            print(check(input("Enter Name Here>>> ")))
        print("Who is your best friend?")
        crush = input("best_friend>>> ")
        if crush == "":
            print("No skipping!")
            print(check(input("Enter Name Here>>> ")))
        print("What color is your shirt?")
        shirt = input("shirt_color>>> ")
        if shirt == "":
            print("No skipping!")
            print(check(input("Enter Name Here>>> ")))
        print("You got clout?")
        clout = input("clout_level>>> ")
        if clout == "":
            print("No skipping!")
            print(check(input("Enter Name Here>>> ")))
        print("Do you think you passed the test?")
        passed = input("passed?>>> ")
        if passed == "":
            print("No skipping!")
            print(check(input("Enter Name Here>>> ")))
        print("Calculating...")
        sleep(2.5)

        def add():
            color_counted = color.count("g")
            car_counted = car.count("g")
            team_counted = team.count("g")
            crush_counted = crush.count("g")
            shirt_counted = shirt.count("g")
            clout_counted = clout.count("y")
            clout_counted2 = clout.count("1")
            clout_counted3 = clout.count("0")
            passed_counted = passed.count("y")
            total = color_counted + car_counted + team_counted + clout_counted3 + passed_counted
            total = crush_counted + shirt_counted + clout_counted + clout_counted2
            return total
        if add() > 1:
            print("passed")
        else:
            print("failed")
        print("Congrats on your result!")
        sleep(100)


check(input("Enter Name Here>>> "))
EN

回答 1

Code Review用户

回答已采纳

发布于 2019-09-10 03:02:52

欢迎来到CodeReview!这不是很好的代码,但这并不意味着这是一个糟糕的问题。我想你来对地方了。

Recursion

代码语言:javascript
复制
    if color == "":
        print("No skipping!")
        print(check(input("Enter Name Here>>> ")))

换句话说,check是在不必要的情况下调用自己的,如果用户试图“跳过”足够的次数,就会出现堆栈溢出。而不是这样做,只是循环,直到你有有效的输入。

伪延迟

代码语言:javascript
复制
    print("Calculating...")
    sleep(2.5)

没有什么事情比用户界面欺骗我更让我烦恼的了。这个输出表明,完成计算需要2.5秒,但事实并非如此。不要对你的用户撒谎-只需显示结果。

sleep(100)是非常有害的--用户需要Ctrl+C来杀死程序;否则它就坐在那里,阻止用户取回他们的shell终端。这个应该删除。

,不要重复,

程序中有许多地方是以重复的方式表示的,特别是用户输入(“不跳过”机制)、对count的调用以及获取total的添加。我建议如下:

代码语言:javascript
复制
def input_without_skip(prompt: str) -> str:
    while True:
        result = input(f'{prompt}>>>')
        if result:
            return result
        print('No skipping!')


def is_master() -> bool:
    return input_without_skip('Enter Name Here') == 'Hercules'


def get_counts():
    for question, prompt, chars in (
        (     'What is your favorite color?',   'fav_color', 'g'),
        (          'What is your dream car?',     'fav_car', 'g'),
        (            'What team are you on?',   'team_name', 'g'),
        (         'Who is your best friend?', 'best_friend', 'g'),
        (        'What color is your shirt?', 'shirt_color', 'g'),
        (                   'You got clout?', 'clout_level', 'y10'),
        ('Do you think you passed the test?',     'passed?', 'y')
    ):
        print(question)
        answer = input_without_skip(prompt)
        yield sum(answer.count(c) for c in chars)


def main():
    if is_master():
        print('Welcome home, master.')
        return

    print("Let's find some data!")
    total = sum(get_counts())

    if total > 1:
        print("passed")
    else:
        print("failed")
    print("Congrats on your result!")


if __name__ == '__main__':
    main()
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/227744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档