【问题标题】:For loop with raw_input, If-statement should increase input by 1 [duplicate]对于带有 raw_input 的循环,If 语句应将输入增加 1 [重复]
【发布时间】:2018-11-12 12:57:41
【问题描述】:

大家! 我目前正在学习 Python(没有先前的编码技能 - 至少不足以提及它们)并且我正在努力解决我们应该为家庭作业做的彩票机中的 for 循环。 在过去的两个小时里,我一直在谷歌上搜索这个,但我找不到任何可以暗示我朝着正确方向前进的东西。

我希望循环创建一个包含随机数的列表。打印给用户的随机数数量应由用户输入定义,并且不应使用重复项。每次创建副本时,它应该简单地选择一个不同的数字。关于我在这里搞砸的任何提示? (请注意它是 Python 2.x)

谢谢大家! :)

代码:

from random import randint

lotterylist = []

print "Welcome to the lottery machine!"

mynumbers =  int(raw_input("How many numbers should be drawn?\n"))

for i in range(0, mynumbers):

    lottery_numbers = randint(0, 48)

    if lottery_numbers not in lotterylist:
        lotterylist.append(lottery_numbers)

    else:
        mynumbers += 1
        continue

print lotterylist

print "End"

【问题讨论】:

  • 也许使用 while 而不是 if else。
  • 使用 random.sample() 代替,没有循环,例如lottery_numbers = random.sample(range(48), mynumbers).
  • 您还应该发布输入和生成的输出。无论如何,您正在做的是运行循环“x”次,添加一个新的随机数,如果相同则什么也不做。因此,流程有点缺陷。
  • @vasilis-g 提供了完美的解决方案,但我建议使用循环进行打磨,以供学习。
  • @NitinPawar 确实,使用循环和条件对 OP 学习更有益。

标签: python for-loop if-statement random


【解决方案1】:

您可以这样做,因为老实说,当前的代码没有多大意义。

for _ in range(0, num):
  snum = randint(0, 48)
  while snum in numlist:
    snum = randint(0, 48)
  numlist.append(snum)

这将继续创建一个新数字,直到选择了不在列表中的数字,然后它退出 while 循环并将该数字附加到生成的数字列表中。无需不断增加范围;展望未来,您应该明白,如果您的逻辑需要类似的东西,那么这意味着它有缺陷。你目前的方法没有意义。

【讨论】:

  • 感谢您的解决方案!工作,我明白如何!还有一件事:如果-出于任何原因-我想像我打算做的那样增加循环的范围-有什么办法吗? (比如:如果这个和那个循环 5 次而不是 4 次)
  • @lichtgarage 是的,您的问题已被标记为重复。在那里可以找到答案。
  • 啊,不错的功能!谢谢! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 2014-02-19
  • 2016-01-05
相关资源
最近更新 更多