2015-04-12 5 views
2

Я пытаюсь написать код на Python, где пользователю предлагается ввести количество чисел в последовательности, а затем сами цифры. И, наконец, программа выводит количество пар смежных нечетных чисел. Вот пример вывода:Расчет числа смежных нечетных чисел

Введите длину последовательности: 6
Введите номер 1: 3
Введите номер 2: 4
Введите номер 3: 7
Введите номер 4: 9
Введите номер 5: 3
Введите номер 6: 5
число пар смежных нечетных чисел 3

Я придумал следующий код:

length = eval(input("Enter the length of the sequence: ")) 

for i in range(1,length+1): 
    ask = eval(input("Enter number: "+str(i)+ ": ")) 
    for m in range(0,length+1,2): 
     ask2 = ask 

h = ask%2 
f = ask2%2 

if h>0 and f>0: 
    k = (len(str(ask) + str(ask2))) 
    print(k) 

else: 
    pass 

Хотя вывод для подсказок верен, я не могу подсчитать количество пар смежных нечетных чисел. Пожалуйста, помогите мне исправить мой код или построить его; это будет высоко оценено. Как вы, должно быть, заметили, я использовал базовые инструкции if, циклы и строки для написания кода. Было бы здорово, если бы вы могли придерживаться этого для моего лучшего понимания.

Извините за длинный пост.

Спасибо большое

+2

не использовать eval. лить в int. –

+0

Пробовал делать это, еще не повезло – Jspake

ответ

1

Это решит вашу проблему.

Сначала введите вход, указанный пользователем, в список, называемый numList. Храните переменную count для подсчета количества смежных нечетных чисел. Пронумеруйте numList один за другим и определите нечетные числа, проверив остаток, когда делится на 2. (он проверяется условием if). Затем вы можете просто напечатать количество смежных нечетных чисел в списке.

length=int(input("Enter the length of the sequence: ")) 
numList=[] 
count=0 
for i in range(length): 
    num=int(input("Enter number "+str(i+1)+ ": ")) 
    numList.append(num) 

for x in range(len(numList)-1): 
    num1=numList[x] 
    num2=numList[x+1] 
    if((num1%2==1) and (num2%2==1)): 
     count=count+1 
    else: 
     continue 

print("The number of pairs of adjacent odd numbers is "+str(count)) 

Это ответ, если вы хотите решить эту проблему без использования списков. Вы должны обрабатывать входы как и когда они принимаются.

length=int(input("Enter the length of the sequence: ")) 
count=0 
num1=int(input("Enter number "+str(1)+ ": ")) 
for i in range(length-1): 
    num2=int(input("Enter number "+str(i+2)+ ": ")) 
    if((num1%2==1) and (num2%2==1)): 
     count=count+1 
    num1=num2 


print("The number of pairs of adjacent odd numbers is "+str(count)) 
+0

Поскольку я еще не рассматривал списки в своем классе программирования, я не должен использовать это. Есть ли способ сделать это без справочных списков? – Jspake

+0

@ Jspake Solved :) –

+0

Отлично! Это то, что я искал. Но я не понимаю одну часть кода. Не могли бы вы объяснить это мне? Согласно тому, что я знаю, функция диапазона в цикле for работает следующим образом: \ br ** для i в диапазоне (a) ** \ br цикл будет выполняться до (a-1) \ br В вашем часть кода: ** для i в диапазоне (длина-1): **, цикл должен выполняться до (a-2), правильно? Но это не так! Я был бы признателен, если бы вы могли объяснить это мне. Большое спасибо! – Jspake

1

проверить, если текущий элемент и следующая четным и сумма:

length = int(input("Enter the length of the sequence: ")) 

nums = [int(input("Enter number: {}: ".format(i))) for i in range(1, length + 1)] 


print(sum(ele % 2 and nums[i] % 2 for i,ele in enumerate(nums, 1))) 

enumerate(nums, 1) начинается индекс в 1 так ele % 2 and nums[i] % 2 проверяет текущий элемент, как мы перебрать Nums со следующим соседним номером.

Использовать int(input.., если вы хотите использовать int, используя eval, это не очень хорошая идея. Вероятно, вы также должны использовать цикл while и проверить ввод пользователя с помощью try/except.

без использования списков:

length = int(input("Enter the length of the sequence: ")) 
total = 0 
# get a starting number 
ask = int(input("Enter number: {}".format(1))) 
# will keep track of previous number after first iteration 
prev = ask 
for i in range(2, length + 1): 
    ask = int(input("Enter number: {}".format(i))) 
    # if current and previous are both odd increase count 
    if ask % 2 and prev % 2: 
     total += 1 
    # update prev 
    prev = ask 

print(total) 
+0

Вы использовали списки, чтобы решить эту проблему? Если да, я не должен использовать списки, потому что мы еще не рассмотрели это в моем классе программирования. Есть ли способ решить его без помощи списков? – Jspake

+0

@Jspake, да, безусловно, используйте списки. Что вы можете использовать? –

+0

@Padriac Мне было дано указание не использовать списки для кодирования. Я уверен, что есть способ решить это без использования списков – Jspake

0

Вот способ сделать это с помощью простых for петель. Как и Padraic's solution, он использует список для накопления входов, поскольку он проще, чем пытаться проверить пары, когда вы их читаете. Как упоминает Padraic, вы действительно должны проверить правильность ввода.

length = int(input("Enter the length of the sequence: ")) 

seq = [] 
for i in range(1, length + 1): 
    ask = int(input("Enter number " + str(i) + ": ")) 
    seq.append(ask) 

count = 0 
for i in range(length - 1): 
    if seq[i] % 2 == 1 and seq[i+1] % 2 == 1: 
     count += 1 

print("The number of pairs of adjacent odd numbers is", count) 
+0

Поскольку я еще не рассматривал списки в своем классе программирования, я не должен использовать это. Есть ли способ сделать это без справочных списков? – Jspake

+0

@ Jspake: Я не буду беспокоиться о версии без списка, поскольку я вижу, что другие уже сделали это. Но IMHO Python без списков - это как катание на лыжах с одной рукой, привязанной за спиной - возможно, но неудобно. :) –

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