Простая программа для подсчета количества повторений числа - PullRequest
0 голосов
/ 13 июня 2018

Я начинающий в изучении Python 3. Я столкнулся с проблемой.Пожалуйста, взгляните на код в трех звездочках:

s = input("Enter the value of N A B with white space in between ")
N, A, B=list(s.split())

def input_for_faces(*args):
    NumberOfA=0
    NumberOfB=0
    for x in args:
        if x == int(A):
            NumberOfA += 1
    for y in args:
        if y == int(B):
            NumberOfB += 1
    listAB=[NumberOfA, NumberOfB]
    return listAB

# ***
var=input("Enter the values on the faces of the cube seperated by commas ")
NA, NB=input_for_faces(var)
print(input_for_faces(var))
# ***

print("The probability of the chef winning is "+str((int(NA)/int(N)*(int(NB)/int(N))))

Этот метод ввода для *args не дал правильного вывода (он работал, но дал неправильный ответ).Но когда я дал прямые значения для аргументов, программа работала правильно.

Прямой ввод относится к:

s = input("Enter the value of N A B with white space in between ")
N, A, B=list(s.split())

def input_for_faces(*args):
    NumberOfA=0
    NumberOfB=0
    for x in args:
        if x == int(A):
            NumberOfA += 1
    for y in args:
        if y == int(B):
            NumberOfB += 1
    listAB=[NumberOfA, NumberOfB]
    return listAB

# ***
NA, NB=input_for_faces(1,1,1,1,1)
# ***

print("The probability of the chef winning is "+str((int(NA)/int(N))*(int(NB)/int(N))))

Скажите, пожалуйста, что я сделал не так.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Если вы не хотите или должны использовать * args, вы можете сделать это:

s = raw_input("Enter the value of N A B with white space in between ")
N, A, B=list(s.split())

def input_for_faces(inputList):
    NumberOfA=0
    NumberOfB=0
#You only need to loop through once for A and B, no need to do each separately
#You can still use the old one though if you want to
    for number in inputList:
        if number == int(A):
            NumberOfA += 1
        if number == int(B):
            NumberOfB += 1
    listAB =[NumberOfA, NumberOfB]
    return listAB

var =raw_input("Enter the values on the faces of the cube seperated by commas: ").split(",")
inputList = [int(i) for i in var]
NA,NB = input_for_faces(inputList)
print(input_for_faces(inputList))
print("The probability of the chef winning is "+str((int(NA)/int(N))*(int(NB)/int(N))))

или если у вас есть для использования *args:

s = raw_input("Enter the value of N A B with white space in between ")
N, A, B=list(s.split())

def input_for_faces(*args):
    NumberOfA=0
    NumberOfB=0
#You only need to loop through once for A and B, no need to do each separately
#You can still use the old one though if you want to
    for number in inputList:
        if number == int(A):
            NumberOfA += 1
        if number == int(B):
            NumberOfB += 1
    listAB =[NumberOfA, NumberOfB]
    return listAB

var =raw_input("Enter the values on the faces of the cube seperated by commas: ").split(",")
inputList = [int(i) for i in var]
NA,NB = input_for_faces(*inputList)
print(input_for_faces(*inputList))
print("The probability of the chef winning is "+str((int(NA)/int(N))*(int(NB)/int(N))))
0 голосов
/ 13 июня 2018

1, В своем коде в этой части в условии 'if' вы сравниваете строку с целым числом, чтобы условие стало ложным и не учитывалось 'NumberOfA'

for x in args:
        if x == int(A):
            NumberOfA += 1
    for y in args:
        if y == int(B):
            NumberOfB += 1
    listAB=[NumberOfA, NumberOfB]

вывод:

Enter the value of N A B with white space in between 1 1 1
Enter the values on the faces of the cube seperated by commas 1,1,1,1,1
[0, 0]
The probability of the chef winning is 0.0
>>> 

2, вы передаете одну строку в качестве ввода для * args , чтобы передать несколько аргументов, вы должны преобразовать ввод в виде списка lvar = var.split (',') , а затем, используя * lvar в вызове функции {NA, NB = input_for_faces (* lvar)}, передаст несколько аргументов один за другим изсписок

s = вход («Введите значение NAB с пробелом между ними») N, A, B = список (s.split ())

def input_for_faces(*args):
    NumberOfA=0
    NumberOfB=0
    for x in args:
        if x == A:
            NumberOfA += 1
    for y in args:
        if y == B:
            NumberOfB += 1
    listAB=[NumberOfA, NumberOfB]
    return listAB

# ***
var=input("Enter the values on the faces of the cube seperated by commas ")
lvar=var.split(',')
NA, NB=input_for_faces(*lvar)
print(input_for_faces(*lvar))
# ***

print("The probability of the chef winning is "+str((int(NA)/int(N)*(int(NB)/int(N)))))

вывод:

Enter the value of N A B with white space in between 1 1 1
Enter the values on the faces of the cube seperated by commas 1,1,1,1,1
[5, 5]
The probability of the chef winning is 25.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...