2015-11-03 3 views
3

В приведенной ниже программе предлагается ввести «количество тестовых примеров», а затем ввести номер, чтобы выполнить операцию на нем. В конце я хочу напечатать результат для каждой операции в цикле.Как распечатать весь результат каждого цикла один раз в python

Это код:

test_case = int(raw_input()) # User enter here the number of test case 
for x in range(test_case): 
    n = int(raw_input()) 

while n ! = 1: # this is the operation 
    print n,1, # 
    if n % 2 == 0:  
     n = n//2 
    else:     
     n = n*3+1 

Ниже выход, если я введу «2» в тесте и 2 номера в каждом конкретном случае. Так, например 22 и 64, это будет так:

2 
22 # the first number of the test case 
22 1 11 1 34 1 17 1 52 1 26 1 13 1 40 1 20 1 10 1 5 1 16 1 8 1 4 1 2 1 # it prints the result immediately 
64 # second test case 
64 1 32 1 16 1 8 1 4 1 2 1 # it prints it immediately as the first 

Ниже ожидаемый выход:

2 
22 
64 

Выходной сигнал после того, как пользователь вводит тестовый пример и все числа тестового случая:

22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 
64 32 16 8 4 2 1 

Как это решить?
Примечание. Я попытался сохранить результат в списке и распечатать его, но он печатает все результаты в одной строке.

+1

'для результата в результатах: печать result' –

+0

пожалуйста, вы можете поместить его в свой код и добавить его, пожалуйста, я не знаю, где я положу его и спасибо –

ответ

1
#Gets the number of test cases from the user 
num_ops = int(raw_input("Enter number of test cases: ")) 

#Initilze the list that the test cases will be stored in 
test_cases = list() 

#Append the test cases to the test_cases list 
for x in range(num_ops): 
    test_cases.append(int(raw_input("Enter test case"))) 

#Preform the operation on each of the test cases 
for n in test_cases: 
    results = [str(n)] 
    while n != 1: # this is the operation 
     if n % 2 == 0:  
      n = n//2 
     else:     
      n = n*3+1 
     results.append(str(n)) 
    print ' '.join(results) 

Вывод точно так, как вы описали, но с подсказками ввода для дополнительной ясности.

enter number of test cases: 2 
enter test case: 22 
enter test case: 64 
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 
64 32 16 8 4 2 1 
+0

фантастическое Большое спасибо вам –

-2

У вас есть проблемы с вашим отступом, но я предполагаю, что это только в вопросе, а не в реальной программе.

Итак, вы хотите сначала ввести все тестовые примеры, выполнить их и, наконец, показать результаты. Для получения тестовых случаев вы можете сделать что-то вроде

num_test_cases = int(input()) 
test_cases = [0] * num_test_cases 
for x in range(num_test_cases): 
    test_cases.append(input()) 

После этого вы можете выполнить вы алгоритм с тем же кодом у вас есть, но сохранение результатов в виде списка (как вы упомянули)

... 
results = {} 
for x in test_cases: 
    n = int(x) 
    results[x] = [] 
    while n != 1: 
     results[x].append(n) 
     ... 

И наконец, вы можете распечатать результаты

for result in results 
    print(results) 
+0

свой первый блок кода Doesnt отражать то, как он хочет для ввода тестовых случаев (с запросом на ввод много раз), и вы должны, вероятно, показать, как вы инициализировали «результаты»/вы не инициализировали «результаты», что означает, что вызов 'results [x]' приведет к ошибке –

+0

Хорошо, исправлены те проблема. – fcortes

+0

no i doest исправить это, пожалуйста, вы можете загрузить мой код еще раз и поместить его редактирование, которое вы делаете –

-2

Если вы хотите напечатать последовательность на одной и той же линии, вы можете сделать следующее.

test_case=int(raw_input()) # User enter here the number of test case 
for x in range(test_case): 
    n=int(raw_input()) 
    results = [] 
    while n != 1: # this is the operation 
     results.append(n) 
     if n % 2 == 0:  
      n=n//2 
     else:     
      n=n*3+1 
    print(' '.join(results)) # concatenates the whole sequence and puts a space between each number 

Я думаю, что это довольно близко к тому, что вы хотите.

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