【问题标题】:Getting an Integer Input in a Range获取范围内的整数输入
【发布时间】:2012-07-23 03:57:58
【问题描述】:

我正在尝试获取原始输入并检测它是否在一个范围内。
这是我的代码。

def gold_room():
    print "This room is full of gold. How much do you take?"

    next = raw_input("> ")
    if next == int in range(50):
        how_much = int(next)
    else:
        dead("Man, learn how to type a number.")

    if how_much < 50:
        print "Nice, you're not greedy, you win!"
        exit(0)
    else:
        dead("You greedy bastard!")

当我输入一个数字时,它会给我一个 else:“伙计,学习如何输入一个数字。”
我猜这行不通是“if next == int in range(50):
谁能帮帮我?
提前致谢!
编辑:
我是个菜鸟,所以那条线只是我在打球。
我想它接下来会检查它是否是数字 0-50 范围内的整数。

【问题讨论】:

  • 请解释您认为next == int in range(50) 会做什么。请更新这个表达式的分步解释问题。也许您应该在&gt;&gt;&gt; 提示符下尝试一下,以确认它的作用。
  • 不要隐藏内置函数next
  • “那条线只是我的球停车”。坏习惯。使用&gt;&gt;&gt;提示,请确认代码做了(或不做)什么。

标签: python


【解决方案1】:

如果你想“获得一个范围内的整数输入”,你需要两件事:

  1. 检查输入是否为int
  2. 检查它是否在您的范围内

检查输入是否为int

try/except 在这里会很完美:

n = raw_input('> ')
try:
    n = int(n)
except ValueError:
    dead() # or what you want

为什么这很好?
因为如果nint,您将把它转换为整数,如果不是异常,您可以调用dead() 函数。

检查是否在您的范围内

如果你到了这一点,这意味着它之前的异常没有被引发并且n被转换为一个整数。

所以你只需要这样做:

if 0 <= n <= 50:
    print 'You win'
else:
    print 'You lose'

不要这样做:

if n in range(50):
    # ...

因为它会免费构建一个包含 50 个数字的列表。

注意:不要使用next作为变量,因为它会影响内置的next()

【讨论】:

    【解决方案2】:

    由于 raw_input 返回的是字符串,所以需要先转换为 int。尝试用这个替换该行:

    if int(next) in range(50):
    

    【讨论】:

    • 这不是检查数字是否在 0 到 50 之间的好方法。
    • 同上。有更好的方法来检查这一点。
    【解决方案3】:

    raw_input() 的结果将是一个字符串,所以首先你需要检查next 是否全是数字。有几种方法可以做到这一点,最简单的是使用str.isdigit() 函数:

    next = raw_input("> ")
    if next.isdigit():
        how_much = int(next)
    else:
        dead("Man, learn how to type a number.")
    

    请注意,您不需要检查 next 的值是否在 0 到 50 的范围内,因为您的下一个 if 语句已经检查该值是否小于 50,负数将是被next.isdigit() 排除在外。

    【讨论】:

    • EAFP:try: int(next) except ValueError: dead(...)
    【解决方案4】:

    测试“next == int in range(50)”的计算结果为“(next == int) and (int in range(50))”,这是相当没有意义的,并且总是等于 false。

    你可以试试

    try:
        how_much = int(next)
        if not (0<=how_much<50):
           print 'Too greedy'
    except ValueError:
        dead("Man, learn how to type a number.")
    

    【讨论】:

      【解决方案5】:

      使用 try .. except 可以确保输入的值是 int。 # raise 是您处理非整数条件的占位符:

      try:
          next = int(raw_input("> "))
      except ValueError:
          # raise
      
      if not 0 <= next <= 50:
          print 'Too greedy'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-04
        • 1970-01-01
        • 2020-11-10
        • 2022-01-08
        • 2014-04-08
        • 2021-09-21
        • 2015-10-22
        相关资源
        最近更新 更多