有没有更干净的方法来编写这段代码?D&D di公司

2024-05-19 15:39:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我觉得这是非常直截了当和容易阅读的代码,但我想知道是否有一个简单或更有效的方法来写这个。 这是我第一个项目的开始。你知道吗

import random

command = "".lower()

def dice():
    while True:
        dice_entry = input(":> ").lower().strip()
        if dice_entry == "help":
            print("""
Valid commands include:
Coin, d4, d6, d8, d10, d12 or d20
in order to roll the corresponding dice
or flip a coin.

Type Quit to close program.""")

        elif dice_entry == "coin":
            print("".join(random.choices(['Heads', 'Tails'])))

        elif dice_entry == "d4":
            print(random.randint(1, 4))

        elif dice_entry == "d6":
            print(random.randint(1, 6))

        elif dice_entry == "d8":
            print(random.randint(1, 8))

        elif dice_entry == "d10":
            print(random.randint(1, 10))

        elif dice_entry == "d12":
            print(random.randint(1, 12))

        elif dice_entry == "d20":
            print(random.randint(1, 20))

        elif dice_entry == "quit":
            break
        else:
            print("Invalid command. Type \"Help\" for list of valid commands.")

Tags: orrandomdicelowercommandcommandsprintentry
2条回答

当然有:

变量命名:您的变量dice\u条目名称不正确。你也可以扔硬币,或退出,或键入与骰子无关的帮助。你知道吗

使用random.choices:您可以使用random.choice,而不要使用"".join

WET:有些代码被多次复制,您可以使用一个函数。你知道吗

无用代码:命令变量的作用是什么?尤其是"".lower()的意义是什么?为什么不干脆""

import random

def throw_dice(nb_faces):
    return random.randint(1, nb_faces)

def throw_coin():
    return random.choice(['Heads', 'Tails'])

def main():
    while True:
        entry = input(":> ").lower().strip()

        if entry == "help":
            print("""
Valid commands include:
Coin, d4, d6, d8, d10, d12 or d20
in order to roll the corresponding dice
or flip a coin.

Type Quit to close program.""")

        elif entry == "coin":
            print(throw_coin())

        elif entry in ["d4", "d6", "d8", "d10", "d12", "d20"]:
            nb_faces = int(entry[1:])
            print(throw_dice(nb_faces))

        elif entry == "quit":
            break

        else:
            print('Invalid command. Type "Help" for list of valid commands.')

一种选择是使用寻址字典:

import random

def dice():
    help_message = (
        "Valid commands include:\n"
        "Coin, d4, d6, d8, d10, d12 or d20 in order to roll the corresponding dice or flip a coin.\n"
        "Type Quit to close program.\n"
    )
    commands_dict = {
        "help": lambda: help_message,
        "coin": lambda: random.choice(("Heads", "Tails")),
        "d4"  : lambda: random.randint(1,  4),
        "d8"  : lambda: random.randint(1,  8),
        "d10" : lambda: random.randint(1, 10),
        "d12" : lambda: random.randint(1, 12),
        "d20" : lambda: random.randint(1, 20)
    }
    default = lambda: "Invalid command. Type \"Help\" for list of valid commands."
    while True:
        dice_entry = input(":> ").lower().strip()
        if dice_entry == "quit":
            break
        print(commands_dict.get(dice_entry, default)())

这是live example

相关问题 更多 >