首页 > 解决方案 > 在 Python 中,有没有办法创建一个同时接受整数和/或字符串输入的函数?

问题描述

感谢您查看我的消息,我对 Python 非常陌生,因此遇到了一个特定问题。我正在尝试创建一个类似于轮盘赌的功能。用户只能输入以下内容作为投注:

我一直在尝试在我的函数中设置条件检查,以确保玩家输入正确的赌注,但我似乎无法创建正确的工作检查。这是我到目前为止所拥有的……</p>

def test(bet):
  if (bet == "Odd" or bet == "Even") or (bet >= 0 and bet <= 10):
    print("Let's Play")
  else:
    print("Must be Odd, Even or between 0 - 10")
    return 0
#returns “Let’s Play”
test("Odd")
#returns “Let’s Play”
test(5)
#returns “Must be Odd, Even or between 0-10”
test(-1)

一切正常,除非我键入以测试无效的接受字符串输入(“奇数”或“偶数”以外的任何内容)。

test(“lol”)

这是我收到此错误的时候:


Traceback (most recent call last):
  File "script.py", line 12, in <module>
    test("lol")
  File "script.py", line 6, in test
    if (bet == "Odd" or bet == "Even") or (bet >= 0 and bet <= 10):
TypeError: '>=' not supported between instances of 'str' and 'int'

任何帮助将不胜感激,我很高兴能进一步了解和扩大我的学习范围。谢谢!

标签: pythonconditional-statements

解决方案


您遇到的问题是,如果字符串'Odd''Even'匹配,该if语句将停止评估其余条件。这称为短路,是 Python 中实现的效率之一。

当传递不同的字符串时,它会通过前 2 次检查(均为 False)并进入数字检查。这会引发您看到的错误:将字符串与整数进行比较。

您可以检查输入实例以将条件拆分为字符串和整数,或者您可以拥有一组允许的输入,并检查输入是否在该集中。

方法一:

def test(bet):
    if isinstance(bet, str) and (bet == "Odd" or bet == "Even"):
        print("Let's Play")
    elif isintance(bet, int) and (bet >= 0 and bet <= 10):
        print("Let's Play")
    else:
        print("Must be Odd, Even or between 0 - 10")
        return 0

方法二:

def test(bet):
    allowed_bets = set(["Odd", "Even"] + list(range(11)))
    if bet in allowed_bets:
        print("Let's Play")
    else:
        print("Must be Odd, Even or between 0 - 10")
        return 0

推荐阅读