【问题标题】:How to use while loop inside a function?如何在函数内使用while循环?
【发布时间】:2014-01-12 11:30:31
【问题描述】:

我决定修改下面的 while 循环并在函数中使用它,这样循环就可以取任何值而不是 6。

i = 0
numbers = []
while i < 6:
    numbers.append(i)
    i += 1

我创建了以下脚本,以便可以使用变量(或更具体地说是参数)而不是 6。

def numbers(limit):
    i = 0
    numbers = []
    
    while i < limit:
        numbers.append(i)
        i = i + 1
    print numbers
user_limit = raw_input("Give me a limit ")      
numbers(user_limit)

当我没有使用 raw_input() 并简单地从脚本中输入参数时,它工作正常,但现在当我运行它(在 Microsoft Powershell 中)时,光标在raw_input() 中的问题被问到后不断闪烁。然后我必须点击 CTRL + C 来中止它。可能在raw_input() 之后没有调用该函数。

现在它给出了如图所示的内存错误。

【问题讨论】:

  • 输入后有没有按enter
  • 如果你升级到 Python 3.x 就会报错你应该考虑是否真的需要运行这么古老的 Python 版本。
  • 您正在执行无限循环,请参阅下面的答案。你的 i
  • @Duncan 我正在关注一本书,现在它可以工作了
  • 当然,您的numbers 函数复制了内置的range 函数。

标签: while-loop python-2.x raw-input


【解决方案1】:

您需要将user_limit 转换为Int

raw_input() 返回值为str,语句使用i,即int

def numbers(limit):
    i = 0
    numbers = []

    while i < limit:
        numbers.append(i)
        i = i + 1
    print numbers

user_limit = int(raw_input("Give me a limit "))
numbers(user_limit)

输出:

Give me a limit 8
[0, 1, 2, 3, 4, 5, 6, 7]

【讨论】:

  • Cf CPython 手册:CPython 实现细节:除数字外的不同类型的对象按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。整数总是“小于”字符串。测试:1
  • @Raphaël Braud 是的,你是对的,这就是为什么它是一个无限循环。
  • 这就是为什么它给了我一个内存错误。谢谢!现在它工作正常!
猜你喜欢
  • 2019-05-02
  • 2023-04-05
  • 2014-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 2021-02-27
相关资源
最近更新 更多