Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查列表中的某些元素是否相同_Python_Python 3.x - Fatal编程技术网

Python 检查列表中的某些元素是否相同

Python 检查列表中的某些元素是否相同,python,python-3.x,Python,Python 3.x,因此,我已经在这个问题上坐了一段时间,在搜索了多个其他问题后,找不到我需要的答案 我已经设置了一个任务,使一个4位随机数发生器,然后用户必须尝试和猜测的数字。他们每试一次,都会说他们有多少数字是正确的,他们处于什么位置。 此外,号码需要位于正确的位置 这是我当前的代码 import random as r def GetNumber(): number = [r.randint(0, 9), r.randint(0, 9), r.randint(0, 9), r.randint(0, 9

因此,我已经在这个问题上坐了一段时间,在搜索了多个其他问题后,找不到我需要的答案

我已经设置了一个任务,使一个4位随机数发生器,然后用户必须尝试和猜测的数字。他们每试一次,都会说他们有多少数字是正确的,他们处于什么位置。 此外,号码需要位于正确的位置

这是我当前的代码

import random as r
def GetNumber():
    number = [r.randint(0, 9), r.randint(0, 9), r.randint(0, 9), r.randint(0, 9)]
    return number

def Choices():
    randomNumber = GetNumber()
    userChoice = list(input("Enter 4 numbers\n")) #Allows the user to input a number 4 digits long
    userChoice = [int(i) for i in userChoice]
    if userChoice == randomNumber:
        print("Congratulations! You chose the right number")
提前感谢:)

您可以选择随机数和用户的选择,并比较配对:

>>> number = [4, 3, 9, 1]
>>> choice = [1, 3, 4, 1]
>>> [n == c for n, c in zip(number, choice)]
[False, True, False, True]
>>> sum(n == c for n, c in zip(number, choice))
2
要获得匹配号码的总数,无论其位置如何,您都可以通过a输入号码和用户的选择,并获得它们与
&
的交点:

>>> from collections import Counter
>>> Counter(number) & Counter(choice)
Counter({1: 1, 3: 1, 4: 1})
>>> sum((Counter(number) & Counter(choice)).values())
3
这是我的看法

import random as r


def GetNumber():
    return [r.randint(0, 9) for i in range(4)]


def Choices():
    randomNumber = GetNumber()
    userChoice = [int(i) for i in list(input("Enter 4 numbers\n"))]
    n = 0
    while userChoice != randomNumber:
        hits = [str(i+1) for i in range(4) if userChoice[i] == randomNumber[i]]
        if hits:
            print('You got position(s) {} correct'.format(', '.join(hits)))
        else:
            print('You got all of them wrong!')
        userChoice = [int(i) for i in list(input("Enter 4 numbers\n"))]
        n += 1
    print("Congratulations! You found the right number in {} turns!!".format(n))

Choices()
代码被重新构造成循环,直到用户真正找到密码为止。这只是一个框架,您可以在此基础上进行一些实验,并尝试在用户交互或其他方面进一步优化它


如果有什么不清楚的地方,请告诉我。干杯

我认为解决这个问题的关键是使用一串数字,而不是数字数据类型。这里有一个有效的例子。您可以通过比较数字来实现这一点,但在本例中,我们不太关心数值,而是关心字符的模式

from random import choice
from string import digits


def is_digits(string):
    """Return true if all characters are digits, otherwise false"""

    return all([char.isdigit() for char in string])


def get_number(length):
    """Return a string of digits with the number of characters equal to length"""

    return ''.join(choice(digits) for i in range(length))


def guess():
    """Receive and evaluate guesses for match to randomly generated number"""

    guess = ''
    miss_char = '-'
    miss_message = 'Try again.'
    win_message = 'Congratulations! You chose the right number.'
    answer_length = 4
    answer = get_number(answer_length)
    while guess != answer:
        guess = raw_input('Enter {0} numbers: '.format(len(answer)))
        if len(guess) != len(answer) or is_digits(guess) is False:
            continue
        matches = [answer[i]
                   if answer[i] == guess[i]
                   else miss_char
                   for i in range(len(answer))]
        matches_string = ''.join(matches)
        message_base = 'Matched digits: {0}.'.format(matches_string)
        if guess != answer:
            print(' '.join([message_base, miss_message]))
            guess = ''
        else:
            print(' '.join([message_base, win_message]))

guess()

如果你想要一个4位数的随机数,为什么不
r.randint(10009999)
呢?所以你正在尝试编写智囊团游戏的代码。。到目前为止,您的代码非常好。你也可以一个人做这件事。@Chris_Rands我也想有机会成为第一个数字0@Ev.Kounis我正在制作智囊团游戏,但是我的大部分代码都非常低效,我想让它尽可能的高效possible@Jake啊,我看到使用
[r.randint(0,9)表示范围(4)中的I]
然后感谢您的快速回复,对它进行了一次测试,结果很好perfectly@Tobias_k他的回答也很有趣。您可能希望将这两者融合在一起,以提示用户在错误的位置上输入正确的数字,或者soWell,它不符合问题的要求,它是一个没有任何解释的纯代码答案,在Python 3中无法正常工作,并且它会无缘无故地创建一个单元素列表。@interjay thx,我修复了这个问题,但我一直在关注这个问题并解决当前的问题,我的意思是这不是代码审查,你在这里发布的代码应该是好代码,因为这是人们学习的内容。无论如何,您已经解决了我列出的一个问题,但这仍然不能满足问题的要求(检查哪些数字是正确的)。thx@interjay,已修复,仍然不适用于Python3(输入和原始输入)
sum(n==c代表n,zip中的c(数字,选项))
返回2非常漂亮
from random import choice
from string import digits


def is_digits(string):
    """Return true if all characters are digits, otherwise false"""

    return all([char.isdigit() for char in string])


def get_number(length):
    """Return a string of digits with the number of characters equal to length"""

    return ''.join(choice(digits) for i in range(length))


def guess():
    """Receive and evaluate guesses for match to randomly generated number"""

    guess = ''
    miss_char = '-'
    miss_message = 'Try again.'
    win_message = 'Congratulations! You chose the right number.'
    answer_length = 4
    answer = get_number(answer_length)
    while guess != answer:
        guess = raw_input('Enter {0} numbers: '.format(len(answer)))
        if len(guess) != len(answer) or is_digits(guess) is False:
            continue
        matches = [answer[i]
                   if answer[i] == guess[i]
                   else miss_char
                   for i in range(len(answer))]
        matches_string = ''.join(matches)
        message_base = 'Matched digits: {0}.'.format(matches_string)
        if guess != answer:
            print(' '.join([message_base, miss_message]))
            guess = ''
        else:
            print(' '.join([message_base, win_message]))

guess()