Um pouquinho mais da sintaxe do Python

Um amigo meu está fazendo faculdade, e começando a aprender a programar (com Java.) Ele me mostrou semana passada um exercício que o professor passou:

  • Solicitar que o usuário informe um número inteiro que será usado como limite superior do contador.
  • O programa deverá exibir todos os números pares existentes entre 1 e o limite superior (informado via teclado pelo usuário).
  • Após a exibição dos números o programa deverá perguntar se o usuário deseja executar mais uma vez.

Por curiosidade, eu escrevi uma solução em Python:

continuar=True
while continuar:
  numero=int(raw_input("Informe o valor inicial da repeticao: "))
  print str(range(2,numero+1,2))[1:-1]
  continuar=raw_input("Continuar? (S/N) ").upper()!="N"

Update: inspirado nos comentários do Rafael Santini, uma solução com break fica mais elegante:

while 1:
  numero=int(raw_input("Informe o valor inicial da repeticao: "))
  print str(range(2,numero+1,2))[1:-1]
  if raw_input("Continuar? (S/N) ").upper()=="N":break
Elcio: Elcio é sócio fundador da Visie Padrões Web. Pioneiro no uso e divulgação dos padrões do W3C no Brasil, Elcio já treinou equipes de dezenas de empresas como Globo.com, Terra, Petrobras, iG e Locaweb. Além disso, tem dirigido as equipes da Visie no desenvolvimento de projetos web para marcas como Brastemp, Itaú Unibanco, Johnson & Johnson e Rede Globo.

View Comments (12)

  • Rafael, você pode usar &lt; para gerar o sinal <

    Isso acontece porque há algumas tags HTML que podem ser inseridas aqui, então o Wordpress faz controle de HTML.

  • Por curiosidade, escrevi essa solução em Java:

    import java.util.Scanner;
    public class Main {
    public static void main(String[] args) {
    while (true) {
    System.out.println("Informe o valor inicial da repeticao: ");
    int limite = (new Scanner(System.in)).nextInt();
    for (int i = 2; i <= limite; i = i + 2) System.out.println(i);
    System.out.println("Continuar? (S/N): ");
    if (!(new Scanner(System.in)).next().equalsIgnoreCase("S")) break;
    }
    }
    }

    Em número de linhas o Java perde porque é necessário declarar pelo menos uma classe e um método, mas o tamanho do código que de fato resolve o problema é praticamente o mesmo.

    Sobre a legibilidade do código, penso que é relativa. Como não conheço Python, tive que pensar um pouco para entender a linha "print str(range(2,numero+1,2))[1:-1]". Para quem trabalha com Java, certamente achará a solução em Java mais legível ;)

  • Por curiosidade, escrevi essa solução em Java:

    import java.util.Scanner;
    public class Main {
    public static void main(String[] args) {
    while (true) {
    System.out.println("Informe o valor inicial da repeticao: ");
    int limite = (new Scanner(System.in)).nextInt();
    for (int i = 2; i <= limite; i = i + 2) System.out.println(i);
    System.out.println("Continuar? (S/N): ");
    if (!(new Scanner(System.in)).next().equalsIgnoreCase("S")) break;
    }
    }
    }

    Em número de linhas o Java perde porque é necessário declarar pelo menos uma classe e um método, mas o tamanho do código que de fato resolve o problema é praticamente o mesmo.

    Sobre a legibilidade do código, penso que é relativa. Como não conheço Python, tive que pensar um pouco para entender a linha "print str(range(2,numero+1,2))[1:-1]". Para quem trabalha com Java, certamente achará a solução em Java mais legível ;)

  • Parece que há um bug no comentário. Acho que ele não faz o tratamento do sinal "menor que", ignorando o que vem depois.

  • Por curiosidade, escrevi essa solução em Java:

    import java.util.Scanner;
    public class Main {
    public static void main(String[] args) {
    while (true) {
    System.out.println("Informe o valor inicial da repeticao: ");
    int limite = (new Scanner(System.in)).nextInt();
    for (int i = 2; i

  • Karlisson,

    Acho que com 9 linhas você nem consegue declarar o pacote, importar bibliotecas e a sua classe java, muito menos fazer o código acima funcionar. Eu gastaria, com meu padrão de escrita, ao menos 50 linhas para resolver o problema proposto em java :(

  • Na verdade, em Java dava a mesma coisa:

    boolean continuar = true;
    while (continuar) {
    int numero = Integer.parseInt(Console.input("Informe o valor inicial da repetição: "));
    for (int x=2; x