python - 在 Python 中,有没有办法创建一个同时接受整数和/或字符串输入的函数?
问题描述
感谢您查看我的消息,我对 Python 非常陌生,因此遇到了一个特定问题。我正在尝试创建一个类似于轮盘赌的功能。用户只能输入以下内容作为投注:
- 字符串“奇数”或“偶数”和..
- 整数 0-36
我一直在尝试在我的函数中设置条件检查,以确保玩家输入正确的赌注,但我似乎无法创建正确的工作检查。这是我到目前为止所拥有的……</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'
任何帮助将不胜感激,我很高兴能进一步了解和扩大我的学习范围。谢谢!
解决方案
您遇到的问题是,如果字符串'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
推荐阅读
- rust - rust 中 u32 整数类型的使用
- postgresql - 使用网络引导程序 + postgres 设置corda NETWORK
- c# - 如果特定的 Windows 窗体打开,如何停止媒体播放器?视觉工作室 C#
- ruby - 在 Mac 上使用 serverless-ruby-package 的 ruby 应用程序的 Serverless Deploy 崩溃
- python-3.x - 使用 python 为子子项解析 XML
- python-3.x - 读写GML时标签和id的NetworkX问题
- flutter - 如何在 ListView 中本地存储增量计数器?扑
- javascript - 如何在 react-firebase-hooks 中实现缓存?
- oracle-nosql - how to stop debug information when using oracle functions and NoSQLCS
- neo4j - 将多个列表组合成一个列表并为每一行输出