【问题标题】:Why am I getting an error and an infinite loop?为什么会出现错误和无限循环?
【发布时间】:2018-02-23 20:28:15
【问题描述】:

这是问题。 编写一个名为fruit_list.py 的shell(基于文本)程序,它创建水果名称列表('Apple'、'Orange'、'Banana'、'Water Melon'、'Pear')并要求用户选择一个从 1 到 5 的数字。然后程序会在列表中打印相应的项目。注意项目编号和列表索引之间的差异。请参见下面的示例。 示例:

PS C:\Users\ssiva\Desktop> python fruit_list.py
Pick a number between 1 and 5: 3
You got a Banana.
PS C:\Users\ssiva\Desktop>

这是我更新后的输入:

x = ['Apple', 'Orange', 'Banana', 'Water Melon', 'Pear']
y = [1, 2, 3, 4, 5]
fruits = str(raw_input())

while fruits > "5" or fruits <= "0":
print " Pick a number between 1 and 5:"
fruits = str(raw_input()) 

else:
 print x

错误是它正在打印所有的水果。我希望每个数字都与每个水果相关,但它们都在打印。

这是错误: mes-MacBook-Air:desktop me$ python fruit_list.py

选择一个介于 1 和 5 之间的数字: 0 选择一个介于 1 和 5 之间的数字:

选择一个介于 1 和 5 之间的数字: 7 选择 1 到 5 之间的数字: 2 ['苹果'、'橙子'、'香蕉'、'西瓜'、'梨子'] mes-MacBook-Air:桌面我$

【问题讨论】:

  • 你的意思是y = int(raw_input())
  • 它会引发 TypeError,因为您将 strint 进行比较
  • python 中的 for 循环涉及迭代可迭代对象(例如列表、元组、数组、生成器等)。 for y in x: 是语法错误,因为 y 已经定义。试试:for fruit in x: print(fruit).
  • 更好的是,进入老师的办公时间。这里发生了很多事情,你最好学会整理。
  • 不要使用 xy - 这些名称非常容易混淆 - 例如,请改用 fruits_listnumbers_listfor fruit in fruit_list: print fruit 更有意义,对吧?还。根据while list_integers &gt; 5 - 很明显这没有意义 - 不能说列表“大于”数字 - 只有数字可以大于数字。

标签: python python-2.7


【解决方案1】:

您发布的提示并不意味着需要循环。

fruit_list = ['Apple', 'Orange', 'Banana', 'Water Melon', 'Pear']
usr_num = int(input('Pick a number between 1 and 5.'))
print fruit_list[usr_num-1]

这对我有用。我不确定你在循环中的去向。请避免将 x 和 y 用于可以显式命名的项目 ('fruit_list')。

编辑:只是想补充一点,我从 usr_num 中减去 1,因为 python 索引从 0 而不是 1 开始。

【讨论】:

  • 是的,我看到了,但我试图做一个 while 循环,所以每当用户输入一个大于 5 的数字时,它会自动告诉他们输入一个介于 1 和 5 之间的数字。如果它介于这些范围比它会打印对应的水果。我正在运行 2.7,我的教授说有一个 while 循环,我只是坚持如何正确地做而不搞砸
  • 我仍然不明白为什么 while 循环会有用。您所描述的可以使用 if 语句来完成。
猜你喜欢
  • 2017-01-31
  • 2016-08-01
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
  • 2018-11-06
相关资源
最近更新 更多