首页 > 解决方案 > 我使用了while循环,直到python抛出的随机数与输入匹配,为什么它不起作用?

问题描述

我让用户输入一个3位数字,让python抛出一个随机的3位数字,试试看这个随机数什么时候能匹配输入。但是,每次我在 cmd 上运行它时,它都会打印“Python 太累了”,这是我设置的一个语句,以防止它无限循环(我确实这样做了,直到我添加了这个尝试时间限制)。

import random

my_num = int(input('Type your 3-digit int number: '))

if my_num >= 100 and my_num < 1000:
    attempt = 0

    my_lottery = []
    my_lottery.append(int(num) for num in str(my_num))

    def lottery_throw():
        lottery = []
        i=0
        while i<3:
            lottery.append(random.randint(1,9))
            i+=1
            return(lottery)

    def check():
        global boo
        lottery_throw()
        if lottery == my_lottery:
            boo = 'true'
        else:
            boo = 'false'

    while attempt < 100000:
        check()
        attempt += 1
        if boo == 'true':
            print('you win')
            print(attempt)
            break
        elif attempt >= 100000:
            print('python is too tired')
            break

else:
    print('You must enter a 3-digit number.')

在 cmd 上运行,每次我运行它都会返回“Python 太累了”

但是可能的组合数(9C3)只有 84 个。python 不太可能真的没有抛出正确的数字。我该如何解决这个问题?

标签: pythonpython-3.x

解决方案


错误

  • 不要使用全局变量,除非你真的需要它们。如您所见,写入全局变量并不能正常工作
  • 012是一个有效的 3 位数字
  • 如果您将一个列表附加到另一个列表,您将获得一个嵌套列表(另一个列表中的列表):[[1, 2, 3]]
  • 当您可以创建数字本身时,为什么要创建每个数字的列表?
  • for循环应该用于固定次数的迭代,while当需要更复杂的条件从循环返回时循环。
  • return应该不带括号使用,因为它们是多余的(它不是函数)
  • TrueandFalse是布尔值,不要使用"true"and "false"(字符串)来表示它们。
  • if condition return true else return false(在伪代码中)与return condition
  • for循环也可以有一个else子句,只有在没有break找到时才会执行。

解决方案

import random

my_num = int(input("Type your 3-digit int number: "))


if 0 <= my_num < 1000:
    for attempt in range(1, 100001):
        if my_num == random.randint(0, 999):
            print(f"You win in {attempt} attempts.")
            break
    else:
        print("Python is too tired.")

else:
    print("You must enter a 3-digit number.")

推荐阅读