2015-03-14 6 views
-2

Пытается написать функцию, которая вводит 4 цифры цифр и сравнивает их, вывод Ys и Ns, чтобы попытаться проверить, совпадают ли они. EG 1234 и 1235 будут выдавать YYYN. В то же время очень неэффективно продолжать использовать все эти команды добавления. Как я могу это упростить?Функция Python с использованием добавлений со списками не очень эффективна

def func(): 
results=[] 
firstn= str(input("Please enter a 4 digit number: ")) 
secondn= str(input("Please enter a 4 digit number: ")) 

listone= list(firstn) 
listtwo= list(secondn) 


if listone[0]==listtwo[0]: 
    results.append("Y") 
else: 
    results.append("N") 
if listone[1]==listtwo[1]: 
    results.append("Y") 
else: 
    results.append("N") 
if listone[2]==listtwo[2]: 
    results.append("Y") 
else: 
    results.append("N") 
if listone[3]==listtwo[3]: 
    results.append("Y") 
else: 
    results.append("N") 

print(results) 

Кроме того, как я могу проверить это на 4 цифры для длины и типа IE. Ничего больше или меньше длины четырех/только числового ввода? Я изучал функцию len, но не знаю, как я могу применить это для проверки самого входа?

+0

Пожалуйста, проверьте вкладки в коде - по-видимому, должно быть больше отступов. – Stuart

ответ

-2

Потому что вы не делаете его глобальной переменной, которая может использоваться из-за функции. Вот пример:

my_list = [] 
def my_func(): 
    global my_list 
    my_list.append(0) 
    return "Something..." 

my_list.append(1) 
print my_list 
+0

Вижу, поэтому мне нужно сделать список глобальным? А написать новую функцию? –

+0

Да. Если вы хотите использовать глобальную переменную в функции, вы должны определить ее как глобальную в функции. Если вы хотите создать список в функции для его использования из функции, вы должны вернуть список, затем создать переменную, которая равна функции. – Noyan

+1

Но нет необходимости, чтобы переменная была глобальной (возможно, эта путаница основана на отсутствии отступов в исходном сообщении), и это не является хорошим способом решения проблемы. – Stuart

1

Для проверки, вы можете написать функцию, которая будет задавать повторно в течение ряда до тех пор, пока не получит то, что имеет len 4 и все цифры (с использованием метода isdigit() строки).

Фактическое сравнение может быть выполнено в одной строке с использованием list comprehension.

def get_number(digits): 
    while True: 
     a = input('Please enter a {} digit number: '.format(digits)) 
     if len(a) == digits and a.isdigit(): 
      return a 
     print('That was not a {} digit number. Please try again.'.format(digits)) 

def compare_numbers(a, b): 
    return ['Y' if digit_a == digit_b else 'N' for digit_a, digit_b in zip(a, b)] 

first = get_number(4) 
second = get_number(4) 
print(compare_numbers(first, second)) 
1

Я думаю, что это должно сработать.

def compare(a,b): 
    a,b = str(a),str(b) 
    truthvalue = {True:"Y",False:"N"} 

    return "".join([truthvalue[a[idx]==b[idx]] for idx,digit in enumerate(a)]) 


print(compare(311,321)) #Returns YNY 
print(compare(321312,725322)) #Returns NYNYNY 
0
def two_fourDigits(): 
    results = [] 

    firstn = input("Please enter the first 4 digit number: ") 

    while firstn.isnumeric() == False and len(firstn) != 4: 
      firstn= input("Please enter the second 4 digit number: ") 

    secondn = input("Please enter a 4 digit number: ") 

    while secondn.isnumeric() == False and len(secondn) != 4: 
      secondn= input("Please enter a 4 digit number: ") 

    for i in range(0, len(firstn)): 
      if firstn[i] == secondn[i]: 
       results.append("Y") 
      else: 
       results.append("N") 

    print(results) 

Вам не нужно преобразовывать входные в строку, функция ввода() автоматически принимает значения как строки.

Во-вторых, я добавил подтверждение ввода для firstn и secondn, чтобы проверить, что они являются числовыми, и проверить правильность их длины (4). Кроме того, нет необходимости изменять ввод в список, потому что вы можете выполнять поиск по строкам.

Я попытался выполнить вашу функцию следующим образом. В принципе, функция использует длину первой строки для итерации по всем значениям каждого списка и возвращает Y, если они одинаковы, и N, если они не являются.

Смежные вопросы