【问题标题】:Send the user an error message when they input anything apart from 4, 6 or 12当用户输入除 4、6 或 12 之外的任何内容时,向用户发送错误消息
【发布时间】:2014-04-01 17:20:10
【问题描述】:

在下面的代码中,我想添加一些内容,当用户输入除 4、6 或 12 之外的任何内容时会向用户发送错误消息:

import random
dice = input("""Hello there!
Welcome to the dice roll simulator.
There are three types of dice which you can roll:
a 4 sided die, a 6 sided die and a 12 sided die.
Please enter either 4,6 or 12 depending on which die you would like to roll.""")

if dice : 4 or 6 or 12
print("You have rolled a " + dice + " sided dice, with the result of : " +    str((random.randrange(1,int(dice)))))

【问题讨论】:

标签: python


【解决方案1】:
if dice in (4, 6, 12):
    print("...")
else:
    print("error")

这比我之前的更pythonic,但你应该记住,Python 中的or 并不像你想象的那样直观;即x == 6 or 7必须写成x == 6 or x == 7

如下所述,如果您在 Python 2.x 中使用 input(),则不必将其转换为 int,但如果您在 2.x 中使用 raw_input() 或在3.x,你必须强制转换,否则会导致TypeError

编辑:由于您使用的是输入,因此您必须将其转换为 int,因为input 将返回一个字符串。

正如两位炼金术士所说,在 Python 2.x 中,raw_input() 等同于 Python 3.x 中的 input()

Python 2.x 中的input() 等价于 Python3.x 中的eval(input())

有关 Python 2.x 与 3.x 中输入类型的差异,请参阅Differences between input commands in Python 2.x and 3.x

【讨论】:

  • 取决于 Python2/Python3。 Python2 尝试 eval input 的返回值。
【解决方案2】:

您正在寻找的是else 声明。

我建议你在开始在这里提问之前先做一个基本的 Python 教程。

dice = int(dice)

if dice in {4, 6, 12}:
    print("..." + str(dice))
else:
    print("error message")

【讨论】:

  • 这里为什么是集合而不是元组? (会做同样的事情,只是从未见过有人这样写。)
  • 嗯,对于 3 个元素,查找可能会更慢...这只是我的代码风格。
  • 可能对集合进行哈希处理需要更长的时间。在这种情况下,元组比列表更快(根据我的阅读)
  • 不过,它可能更清晰一些。我的意思是我们真正的意思是“如果结果不在包含 4、6 和 12 的集合中”,而不是一些有序的三元组,或者您通常会解释为 3 元组。
  • 您需要在第一条消息中将dice 转换为str
【解决方案3】:

我认为您可能对: 的含义感到困惑。

: 表示这一行是一个块的开头,下一行要么缩进(请 4 个空格),要么都在 1 行。

您所写的 (4 or 6 or 12) 实际上是在布尔上下文中评估这些数字。由于在 Python 中任何非 0 数字都是 True,因此实际计算结果为:True or True or True

当然,它什么也不做,它只是坐在那里 - 因为 if dice: 实际上是它被评估的地方。

你可能想要的是if dice in (4, 6, 12):...

【讨论】:

    猜你喜欢
    • 2016-03-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    相关资源
    最近更新 更多