递归调用函数以获取用户输入

2023-12-07

我正在尝试制作一个石头剪刀布游戏 并正在尝试验证输入。

def player1():
    x = (raw_input("please select: Rock(r)/Paper(p)/Scissors(s): ")).lower()
    if x == 'r' or x == 'p' or x == 's' or x == 'rock' or x == 'paper' or x == 'scissors':
        return x[0]
    else:
        print "Error - wrong input!"
        player1() #I know I can run a While loop, but I need to run it this way.

print(player1())

如果我第一次尝试输入正确的内容,一切都会正常。 但是如果我第一次输入错误,第二次输入正确,我得到None在输出中,而不是 RPS 选项的第一个字母。

我缺少什么?


您将需要循环输入。您当前正在做的事情是递归调用player1,并且递归情况没有显式返回值(因此,None被返回)。

方法很简单:当输入无效时,再次提示。我正在使用“while True Break”风格的修改版本;它实现了同样的目标。我们无限循环,如果我们想要的条件有效,我们就返回;否则,我们会提示输入并再次循环。

def player1():
    while True:
        x = raw_input("please select: Rock(r)/Paper(p)/Scissors(s): ").lower()
        if x == 'r' or x == 'p' or x == 's' or x == 'rock' or x == 'paper' or x == 'scissors':
            return x[0]
        else:
            print "Error - wrong input!"

作为替代方案if声明,有一种稍微更简洁的方式可以通过in操作员。

if x in ('r', 'p', 's', 'rock', 'paper', 'scissors'):

作为您原来问题的附录(因为它说您必须递归地执行此操作),我必须强烈警告您不要这样做any通过递归进行输入评估。 Python 的调用堆栈大小约为 1,000,这意味着在程序无法恢复地崩溃之前,您的尝试次数非常有限(但相当大)。

不仅如此,您的操作堆栈还将不必要地充满行为方式与循环类似的方法调用。为了便于记忆,除了绝对递归上限之外,不要为此使用递归。

If you 绝对必须,我再次强烈建议against这样做,那么您只需从迭代案例中返回即可。

def player1():
    x = (raw_input("please select: Rock(r)/Paper(p)/Scissors(s): ")).lower()
    if x == 'r' or x == 'p' or x == 's' or x == 'rock' or x == 'paper' or x == 'scissors':
        return x[0]
    else:
        print "Error - wrong input!"
        return player1() #I know I can run a While loop, but I need to run it this way.

print(player1())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递归调用函数以获取用户输入 的相关文章

  • Django:如何测试“HttpResponsePermanentRedirect”

    我正在为我的 django 应用程序编写一些测试 在我看来 它使用 HttpResponseRedirect 重定向到其他一些网址 那么我该如何测试呢 姜戈TestCase类有一个方法assertRedirects https docs d
  • 在 Numpy 中切片后确定结果数组的形状

    我很难理解在 numpy 中切片后如何确定结果数组的形状 例如 我使用以下简单代码 import numpy as np array np arange 27 reshape 3 3 3 slice1 array 1 2 1 slice2
  • 一次将Python dict的内容分配给多个变量?

    我想做这样的事情 def f return a 1 b 2 c 3 a b f or a b f IE 这样 a 被分配为 1 b 被分配为 2 并且 c 是未定义的 这与此类似 def f return 1 2 a b f 依赖于变量名称
  • 如何确定非阻塞套接字是否真正连接?

    这个问题不仅限于Python 这是一个一般的套接字问题 我有一个非阻塞套接字 想要连接到一台可访问的机器 在另一端 该端口不存在 为什么 select 仍然成功 我预计会超时 sock send 因管道损坏而失败 select 之后如何确定
  • 如何从 PyCharm 项目中获取我的“exe”[重复]

    这个问题在这里已经有答案了 通过 PyCharm 在 Python 上编写一些项目 我想从中获取一个exe文件 我尝试过 另存为 gt XXX exe 但是 当我尝试执行它时出现错误 此类操作系统不支持该文件 附注 我有win7 x64 它
  • Python BeautifulSoup XML 解析

    我编写了一个简单的脚本来使用 BeautifulSoup 模块解析 XML 聊天日志 标准 soup prettify 工作正常 只是聊天日志中有很多绒毛 您可以在下面看到我正在使用的脚本代码和一些 XML 输入文件 Code import
  • 优化 Keras 以使用所有可用的 CPU 资源

    好吧 我真的不知道我在说什么 所以请耐心听我说 我正在使用 Theano 后端运行 Keras 以在 MNIST 图像上运行基本的神经网络 目前只是一个教程 过去 我一直使用我的旧 HP 笔记本电脑 因为我有 Windows 和 Ubunt
  • Pandas重置索引未生效[重复]

    这个问题在这里已经有答案了 我不确定我在哪里误入歧途 但我似乎无法重置数据帧上的索引 当我跑步时test head 我得到以下输出 正如您所看到的 数据帧是一个切片 因此索引超出范围 我想做的是重置该数据帧的索引 所以我跑test rese
  • 错误:permission_manager_qt.cpp(82) 不支持的权限类型:13

    我正在开发具有内置浏览器功能的 python 代码 PyQt 5 13 import sys from PyQt5 QtCore import from PyQt5 QtGui import from PyQt5 QtWidgets imp
  • 如果字段值在外部列表中,Django 会注释布尔值

    想象一下我有这个 Django 模型 class Letter models Model name models CharField max length 1 unique True 还有这个列表 vowels a e i o u 我想查询
  • 如何从 Dockerfile 安装 Python 3.7 和 Pip

    我正在尝试构建基于 Ubuntu 18 04 的自定义 Docker 映像 Ubuntu 预装了 Python 3 6 但我想 1 安装 Python 3 7 2 将其设置为默认 Python 版本 这样就可以使用python代替pytho
  • Python igraph:从图中删除顶点

    我正在使用安然电子邮件数据集 并尝试删除没有 enron com 的电子邮件地址 即我只想拥有安然电子邮件 当我尝试删除那些没有 enron com 的地址时 一些电子邮件由于某些原因被跳过 下面显示了一个小图 其中顶点是电子邮件地址 这是
  • 在径向(树)网络x图中查找末端节点(叶节点)

    给定下图 是否有一种方便的方法来仅获取末端节点 我所说的端节点是指那些具有一个连接边的到节点 我认为这些有时被称为叶节点 G nx DiGraph fromnodes 0 1 1 1 1 1 2 3 4 5 5 5 7 8 9 10 ton
  • 获取列表中倒数第二个元素[重复]

    这个问题在这里已经有答案了 我可以通过以下方式获取列表的倒数第二个元素 gt gt gt lst a b c d e f gt gt gt print lst len lst 2 e 有没有比使用更好的方法print lst len lst
  • 如何在Python和Selenium中通过标签名称或id获取元素[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Python 和 Selenium 获取输入 但它向我显示错误 我该如何解决这个错误 inputElement send keys getStock getStocklFunc 0 Error i
  • 将输入发送到 python 子进程而不等待结果

    我正在尝试为一段代码编写一些基本测试 该代码通常通过 stdin 无休止地接受输入 直到给出特定的退出命令 我想检查程序是否在给出一些输入字符串时崩溃 经过一段时间来考虑处理 但似乎无法弄清楚如何发送数据而不是陷入等待我不知道的输出关心 我
  • 无法截取宽度为 0 的屏幕截图

    我正在尝试截取 Bootstrap 模态内元素的屏幕截图 经过一番努力 我终于想出了这段代码 driver get https enlinea sunedu gob pe driver find element by xpath div c
  • 在 MacO 和 Linux 上安装 win32com [重复]

    这个问题在这里已经有答案了 我的问题很简单 我可以安装吗win32com蟒蛇API pywin32特别是 在非 Windows 操作系统上 我一直在Mac上尝试多个版本pip install pywin32 都失败了 下面是一个例子 如果你
  • Python 3.2 中 **kwargs 和 dict 有什么区别?

    看起来Python的很多方面都只是功能的重复 除了我在 Python 中的 kwargs 和 dict 中看到的冗余之外 还有什么区别吗 参数解包存在差异 许多人使用kwargs 并通过dict作为论据之一 使用参数解包 Prepare f
  • 如何在sphinx中启用数学?

    我在用sphinx http sphinx pocoo org index html与pngmath http sphinx pocoo org ext math html module sphinx ext pngmath扩展来记录我的代

随机推荐

  • Apache Beam 管道中的连续状态

    我正在为数据流运行器开发光束管道 我的用例中需要以下功能 从 Kafka 主题读取输入事件 每个Kafka消息值都派生 userID Event pair For each userID I need to maintain a profi
  • sphinx 可以忽略 python 文档字符串中的某些标签吗?

    我正在使用 sphinx 记录我的项目 并使用 sphinxcontrib napoleon 扩展 它允许我使用谷歌风格的文档字符串 这是我的项目中的一个函数 def nn normalized weight normweight fn q
  • 如何将十六进制字符串转换为十进制?

    如果您能告诉我如何转换十六进制字母 我将不胜感激NSString e g 50A6C2 使用 Objective C 转换为小数 提前致谢 最简单的方法是使用NS扫描仪 具体方法scanHexInt or scanHexLongLong 另
  • 如何从晨星上抓取数据

    所以我对网络抓取世界还是个新手 到目前为止我只真正使用 beautifulsoup 从网站上抓取文本和图像 我想我应该尝试从图表上刮掉一些数据点来测试我的理解 但我对此有点困惑graph 在检查了我想要提取的数据的元素后 我看到了这一点 s
  • 如何使用 jQuery 单击事件基于 JSON 查询异步更改 href 值

    我正在使用bit ly 网址缩短服务缩短发送到 在 Twitter 上分享 功能的某些 URL 我想仅在用户实际按下共享按钮时加载 bit ly url 由于 bit ly 的最多 5 个并行请求限制 Bit ly 的 REST API返回
  • SQL Server ISDATE() 函数 - 有人能解释一下吗?

    因此 我查看了 SQL Server 中 ISDATE 函数的文档 并在示例中看到了这一点 SET DATEFORMAT mdy SELECT ISDATE 15 04 2008 Returns 0 SET DATEFORMAT mdy S
  • C# - 关键字使用 virtual+override 与 new

    在基类型中声明方法有什么区别 virtual 然后使用 在子类型中覆盖它override 关键字而不是简单地使用 new 子类型中声明匹配方法时的关键字 我总是发现这样的事情用图片更容易理解 再次 采用约瑟夫 戴格尔的代码 public c
  • VBA 调试器仅显示集合的 256 个元素

    我正在研究 Excel 宏 调试器是否有一个选项可以像数组一样显示所有元素 如果不是 唯一的解决方法是在膨胀集合后将我的类对象存储在数组中吗 你可以使用debug print并将输出写入立即窗口并以此方式绕过限制 我几乎可以肯定没有办法增加
  • 如何在twig模板中显示包含HTML的字符串?

    如何在 twig 模板中显示包含 HTML 标签的字符串 我的 PHP 变量包含以下 html 和文本 word b a word b 当我在我的树枝模板中执行此操作时 word 我明白了 lt b gt a word lt b gt 我想
  • 使用 Yahoo SMTP 以 PHP 发送邮件

    我如何通过以下方式发送电子邮件Yahoo PHP 中的 SMTP 服务器 你应该使用类似的东西斯威夫特 梅勒 or PHP邮件程序 以下示例适用于 Swift message Swift Message newInstance gt set
  • UnauthorizedAccessException:更改 AD 密码时访问被拒绝

    我尝试编写 C 代码来更新 Server 2012 中的域用户密码 我根据以下代码使用以下代码这个堆栈溢出答案 using var context new PrincipalContext ContextType Domain test c
  • 从 Cocoa 中的文件读取时间戳?

    我想读取文件创建 或上次修改 的时间 如 Finder 修改日期 中所示 Cocoa中有没有现有的方法可以做到这一点 谢谢 如果您使用的是 10 5 或更高版本 则可以使用 NSFileManager attributesOfItemAtP
  • 在 doPost() 中访问请求标头

    要验证 Webhook 我需要从请求标头获取参数 到目前为止 我找不到任何信息是否确实可以在应用程序脚本中访问这些标头 到目前为止唯一有效的是访问发布请求的正文 function doPost e something like this v
  • Google Cloud ML Engine - 作业因内部错误而失败。无法执行作业

    这是我之前训练成功的一个ml job 但当我今天尝试时 它不起作用 所以在那之后我尝试删除桶中的所有东西并重新开始 但它仍然不起作用 给出以下错误 发生内部错误 请在几分钟后重试 如果您仍然遇到错误 请联系 Cloud ML None
  • .prev(选择器)不起作用

    这是问题所在 实时复制 CSS div border 1px solid black HTML div div br div div br div class test Should have a blue border div br di
  • 如何垂直移动JApplet内的图像?

    我已经在 J Applet 中显示了一个图像 球 现在我希望图像以垂直方式 上下 移动 问题是我不知道该怎么做 有人对这个问题有想法吗 您需要将该图像的位置设置为某个计算值 意味着您使用时间 速度和其他限制来计算垂直位置 如何设置该位置取决
  • Ljava.lang.Object;无法转换为 [Ljava.lang.Integer

    我编写了一个泛型类 下面是该类的构造函数 我想做这样的事情 如行中所写 elements E new Object size 因为我不知道运行时的泛型类型 所以它会抛出异常 public class Stack
  • (x==0) 能比 (0==x) 更有效吗? [复制]

    这个问题在这里已经有答案了 可能的重复 if flag 0 和 if 0 flag 哪个执行得更快 我通常将平等条件写为 if 0 x 正如很多人所做的那样 而不是 if x 0 这样当我不小心输入 而不是 时 编译器会告诉我 有人告诉我
  • 在 C# 中将字符串转换为位图

    我想将字符串转换为位图或可以在像素框中显示的内容 我的字符串看起来像这样 string rxstring 0100100100200200200300300300400400400500500500600600600700700700800
  • 递归调用函数以获取用户输入

    我正在尝试制作一个石头剪刀布游戏 并正在尝试验证输入 def player1 x raw input please select Rock r Paper p Scissors s lower if x r or x p or x s or