【问题标题】:How to print previous/multiple lines?如何打印前/多行?
【发布时间】:2018-09-21 01:26:41
【问题描述】:
key = int(input("Choose a Christmas Gift from 1 to 5!"))
 if type(key) != type(0):
  print("Please enter a number.")
  exit()
 if not (1 <= key <= 5):
  print(key,"is an invalid number.")
  exit()

if key == 1:
 print("1 Partridge in a Pear Tree.")
elif key == 2:
 print("2 Turtle Doves.")
elif key == 3:
 print("3 French Hens.")
elif key == 4:
 print("4 Calling Birds.")
elif key == 5:
 print("5 Golden Rings.")

我已经做到了这一点(我对此很陌生,我做了我在课堂上看到的),但是当你输入一个数字时,我不知道如何打印前面的行。

假设我输入了 3。

输出应该是:

3 french hens.
2 turtle doves
1 partridge in a pear tree.

它应该对所有有效数字都这样做。

编辑:我将 eval 更改为 int。

任何建议都有帮助!谢谢。

【问题讨论】:

  • 如果你想要整数,请不要eval(input(...))。那只是要求输入错误以无意中破坏您的代码。 int(input(...)) 将使有效输入工作,并为无效输入引发可预测的ValueErrors,不需要eval
  • @ShadowRanger 哦,好的,谢谢,我会去解决这个问题!我仍然需要打印其他行的帮助。
  • @ShadowRanger 这更有意义。再次感谢您!

标签: python python-3.x


【解决方案1】:

反转你的测试,使它们基于&gt;=,而不是==,并且不要使用elif(这使得第一个通过的测试阻止任何其他测试执行),只是简单的if。现在,每个通过的测试都会按顺序打印。

if key >= 5:
    print("5 Golden Rings.")
if key >= 4:
    print("4 Calling Birds.")
if key >= 3:
    print("3 French Hens.")
if key >= 2:
    print("2 Turtle Doves.")
if key >= 1:
    print("1 Partridge in a Pear Tree.")

【讨论】:

  • 好的好的,知道了。非常感谢!
【解决方案2】:

我所做的是将它们反转,因此它们从最大到最小打印,如果大于该数字,则使 == 到 >= 打印它。

from sys import exit
key = int(input("Choose a Christmas Gift from 1 to 5!"))
if type(key) != type(0):
    print("Please enter a number.")
    exit()
if not (1 <= key <= 5):
    print(key,"is an invalid number.")
    exit()

if key >= 5:
    print("5 Golden Rings.")
if key >= 4:
    print("4 Calling Birds.")
if key >= 3:
    print("3 French Hens.")
if key >= 2:
    print("2 Turtle Doves.")
if key >= 1:
    print("1 Partridge in a Pear Tree.")

但是,如果您想扩展它,请执行以下操作:

from sys import exit
    key = int(input("Choose a Christmas Gift from 1 to 5!"))
    if type(key) != type(0):
        print("Please enter a number.")
        exit()
    if not (1 <= key <= 5):
        print(key,"is an invalid number.")
        exit()
gifts = ["1 partridge in a pair tree","2 turtle doves","etc..","etc..","etc.."]
printer = [print (val) for ind,val in enumerate (gifts) if ind >=key]

打印机通过使用列表理解来工作,这与说是一样的

for ind,val in enumerate(gifts):
   if ind >= key:
      print(val)

【讨论】:

  • 非常感谢!现在很清楚我做错了什么。这比我的助教试图教我们的更有意义-_-
  • 我赞成重构,但不要对副作用使用列表推导(如printing)。这只是意味着无缘无故地使临时的lists 充满None,而普通循环for ind, val in enumerate(gifts):if ind &gt;= key: print(val) 可以很好地完成这项工作。除了临时性之外,任何使用函数式编程工具(例如 listcomps)的副作用都是维护的噩梦;功能样式旨在最大限度地减少副作用和远距离操作。
  • 哦,快,我可以想象它是多么乏味!感谢您的建议。我会在以后的任务中牢记这一点!这个是在没有上下文或明确指示的情况下给我的。 :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 2021-08-11
  • 1970-01-01
  • 2020-02-11
相关资源
最近更新 更多