2015-12-19 2 views
0

Ici deux mêmes codes en C++ et Python: la fonction doit être répétée jusqu'à l'absence d'entrée. Le code C++ passe, mais le code Python ne passe pas les testcases. quel est le problème sur le code python? grâcePython: pourquoi "break while loop si pas d'entrée" ne passe pas testcase

code python:

def func(n): 
    if n==1: 
     return 1 
    else: 
     s=(n+1)//2 
     return s*s + func(n//2) 

while True: 
    n=input() 
    if n=='': 
     break 
    else: 
     print(func(int(n))) 

C++ Code:

#include <bits/stdc++.h> 
using namespace std; 
long long fun(long long n){ 
    if(n==1) 
     return 1; 
    long long s=(n+1)/2; 
    return s*s+fun(n/2); 
} 
int main(){ 
    long long n; 
    while(cin>>n) 
    cout<<fun(n)<<endl; 
} 
+0

Expliquer ce que "passer le cas d'essai" pour toi. Est-ce que les critères pour "passer" le TC sortent simplement de la boucle? – ray

+0

Pourquoi utilisez-vous '// 2' dans le code python? – aliasm2k

+0

@ aliasm2k: Pour ... faire une division entière par deux? – Ryan

Répondre

0

je convertir ce que vous avez à un sentinel loop

def func(n): 
    if n==1: 
     return 1 
    else: 
     s=(n+1)//2 
     return s*s + func(n//2) 
val = input() 
## ^^^^ ^^ This can be anything not '' 
while val!='': 
     print(func(int(val))) 
     val=input() 
+0

Tweak mineures pour le goût personnel, mais il ne change pas de fonctionnalité ou répondre à la question. – tdelaney

+0

'' briser en boucle si aucune entrée "ne passe pas le cas de test '. Je crois qu'il fait – intboolstring

+0

OP casse si aucune entrée déjà. 'si n == '': rompre – tdelaney