Multiplos Whiles

1. Multiplos Whiles

Rafael
Matixx

(usa Debian)

Enviado em 16/06/2018 - 10:40h

Boas a todos,
tenho esse excerto de código, objetivo é recolher os dados (comprar/vender, nome das acções e numero de acções) e junta-los numa string
contudo os whiles para verificar as entradas, não estão a funcionar corretamente
algem consegue dar uma ajuda?


while 2:
while cv != "comprar" or "vender": #feito
cv = input("comprar ou vender:")
break


if cv == "comprar":
print(" ctt --> correios de portugal\n fcp --> futebol clube do porto\n ren --> redes energéticas nacionais")
while acoes != "ctt" or "fcp" or "ren":
acoes = input('quais a acções que pretende comprar:')

while (valor <= 0):
valor = input("Quantidade de acções da " + acoes + " quer comprar:")




elif cv == "vender":
print(" ctt --> correios de portugal\n fcp --> futebol clube do porto\n ren --> redes energéticas nacionais")
while acoes != "ctt" or "fcp" or "ren":
acoes = input('quais a acções que pretende vender:')

while (valor <= 0):
valor = input("Quantidade de acções da " + acoes + " quer vender:")

s = str(cv, acoes, valor)
print(s)



  


2. Re: Multiplos Whiles

Marco Aurélio
macarena

(usa Linux Mint)

Enviado em 17/06/2018 - 04:01h

Vixe! Vamos por partes amigo.... os whiles aí são o menor dos seus problemas!
Tem algumas confusões que você cometeu no código. Se está começando a estudar python, tente fazer programinhas mais simples antes....
Vou comentar as linhas com problema no seu código. NÃO vou dar nenhum exemplo de código funcional... Vou te dar dicas, tente construir sozinho.
while 2: 

Esse while 2 não faz muito sentido... o while espera um booleano, o 2 é um inteiro e portanto será interpretado como True. O problema é que 2 será sempre True, e isso resultará num loop infinito!! Se vc quer que o loop se repita duas vezes apenas, crie uma variável que conta até dois, ou até zero começando em dois, tanto faz.... O importante é você conseguir manipular o booleano de True (loop ativo) para False (fim do loop).


   while cv != "comprar" or "vender":    #feito
cv = input("comprar ou vender:")
break
Nada feito!! hahhahha...

1 - vc não pode usar o OR como opções para a expressão de comparação, o OR deve ficar entre as expressões! Algo como:
while cv != "comprar" or cv !="vender": 
só que nesse caso o que você quer então é o AND, não o OR.... ou seja, ambas as comparações precisam ser verdadeiras para repetir o loop. Se cv for "comprar", então cv != "comprar" será falso, e assim o loop encerra. O mesmo vale se vc for "vender".
2 - a variável cv não existe ainda! não será possível comparar ela com nada.... É possível resolver isso de diversas formas mudando a lógica do programa. Para manter simples (sem mudar a lógica), crie a variável antes com cv = None, ou cv = "", cv = 0, o que você preferir.....
3 - break solto num loop é inútil! Era melhor não ter feito o loop. break é usado dentro de um if, ou seja, para parar o loop se alguma condições for satisfeita.
   cv = None
while cv != "comprar" and cv != "vender":
cv = input("comprar ou vender:")


Continuando....

      while acoes != "ctt" or "fcp" or "ren":
acoes = input('quais a acções que pretende comprar:')

while (valor <= 0):
valor = input("Quantidade de acções da " + acoes + " quer comprar:")

Mesmas situações de antes...
acoes ainda não existe, valor ainda não existe. Esse parênteses no while, não é python! Outras linguagens usam, no python não.
Quanto ao OR, ele deve ser usado entre booleanos, não strings! Você pode fazer como eu disse antes, mas uma forma mais elegante no python que me agrada, ainda mais quando vc tem uma grande quantidade de verificações (imagina se vc tivesse 10 ações para comprar no lugar de apenas 3!), é a seguinte:
while acoes not in ["ctt", "fcp", "ren"]:

Assim, no lugar de verificar se acoes é diferente de todas as possibilidade de valor da variável acoes, vc verifica se acoes não está numa lista de possíveis valores. Computacionalmente, da na mesma, porém fica mais elegante, mas fácil de entender, e vc ainda tem a vantagem de poder alterar dinamicamente os valores possívels, manipulando a lista numa variável. Por ex:
lista_de_acoes = ["ctt", "fcp", "ren"]
while acoes not in lista_de_acoes:

Agora, atenção a variável valor. Ela DEVE SER um inteiro. o comando input retorna uma string, não um inteiro. vc deve converter em algum momento.
Assim:

while int(valor) <= 0:
valor = input("Quantidade de acções da " + acoes + " quer comprar:")

Ou assim:
      while valor <= 0:
valor = int(input("Quantidade de acções da " + acoes + " quer comprar:"))


Tudo que falei para o bloco de compra vale para o bloco de venda.
No fim, o comando str() está sendo usado errado.

   s = str(cv, acoes, valor)


Veja o que diz a documentação:
class str(object='')
class str(object=b'', encoding='utf-8', errors='strict')

ou seja, vc pode passar um objeto qualquer (1 parâmetro), ou passar um objeto bytes, o enconding e error (3 parâmetro). Você passou as 3 strings, como se querendo converter as 3 strings para uma única string. Se vc tem 3 strings, não precisa converter nada, basta concatenar usando o +.
   s = cv + acoes + valor

Porém, veja bem... elas vão fica coladas sem espaço... Você tem no seu código uma maneira de concatenar strings deixando espaço entre elas....


CUIDADO! Talvez a variável valor não seja string. então vc pode usar str(valor) somente nela, ou usando o método string.format()
   s = "{} {} {}".format(cv,acoes,valor)

esse método automaticamente converte inteiro em string. Ele troca cada {} de uma string pelos argumentos passado. Por exemplo:
nome = "Fulano"
idade = "72"
texto = "Me chamo {} e tenho {} anos.".format(nome, idade)
print(texto)

Esse código vai imprimir o texto "Me chamo Fulano e tenho 72 anos."

Acho que é isso. Espero ter ajudado. Boa parte desses erros poderiam ser resolvidos lendo o erro do python ao tentar executar o programa.



3. Re: Multiplos Whiles

Rafael
Matixx

(usa Debian)

Enviado em 17/06/2018 - 09:47h

Sim ajudou muito. Obrigado!!

macarena escreveu:

Vixe! Vamos por partes amigo.... os whiles aí são o menor dos seus problemas!
Tem algumas confusões que você cometeu no código. Se está começando a estudar python, tente fazer programinhas mais simples antes....
Vou comentar as linhas com problema no seu código. NÃO vou dar nenhum exemplo de código funcional... Vou te dar dicas, tente construir sozinho.
while 2: 

Esse while 2 não faz muito sentido... o while espera um booleano, o 2 é um inteiro e portanto será interpretado como True. O problema é que 2 será sempre True, e isso resultará num loop infinito!! Se vc quer que o loop se repita duas vezes apenas, crie uma variável que conta até dois, ou até zero começando em dois, tanto faz.... O importante é você conseguir manipular o booleano de True (loop ativo) para False (fim do loop).


   while cv != "comprar" or "vender":    #feito
cv = input("comprar ou vender:")
break
Nada feito!! hahhahha...

1 - vc não pode usar o OR como opções para a expressão de comparação, o OR deve ficar entre as expressões! Algo como:
while cv != "comprar" or cv !="vender": 
só que nesse caso o que você quer então é o AND, não o OR.... ou seja, ambas as comparações precisam ser verdadeiras para repetir o loop. Se cv for "comprar", então cv != "comprar" será falso, e assim o loop encerra. O mesmo vale se vc for "vender".
2 - a variável cv não existe ainda! não será possível comparar ela com nada.... É possível resolver isso de diversas formas mudando a lógica do programa. Para manter simples (sem mudar a lógica), crie a variável antes com cv = None, ou cv = "", cv = 0, o que você preferir.....
3 - break solto num loop é inútil! Era melhor não ter feito o loop. break é usado dentro de um if, ou seja, para parar o loop se alguma condições for satisfeita.
   cv = None
while cv != "comprar" and cv != "vender":
cv = input("comprar ou vender:")


Continuando....

      while acoes != "ctt" or "fcp" or "ren":
acoes = input('quais a acções que pretende comprar:')

while (valor <= 0):
valor = input("Quantidade de acções da " + acoes + " quer comprar:")

Mesmas situações de antes...
acoes ainda não existe, valor ainda não existe. Esse parênteses no while, não é python! Outras linguagens usam, no python não.
Quanto ao OR, ele deve ser usado entre booleanos, não strings! Você pode fazer como eu disse antes, mas uma forma mais elegante no python que me agrada, ainda mais quando vc tem uma grande quantidade de verificações (imagina se vc tivesse 10 ações para comprar no lugar de apenas 3!), é a seguinte:
while acoes not in ["ctt", "fcp", "ren"]:

Assim, no lugar de verificar se acoes é diferente de todas as possibilidade de valor da variável acoes, vc verifica se acoes não está numa lista de possíveis valores. Computacionalmente, da na mesma, porém fica mais elegante, mas fácil de entender, e vc ainda tem a vantagem de poder alterar dinamicamente os valores possívels, manipulando a lista numa variável. Por ex:
lista_de_acoes = ["ctt", "fcp", "ren"]
while acoes not in lista_de_acoes:

Agora, atenção a variável valor. Ela DEVE SER um inteiro. o comando input retorna uma string, não um inteiro. vc deve converter em algum momento.
Assim:

while int(valor) <= 0:
valor = input("Quantidade de acções da " + acoes + " quer comprar:")

Ou assim:
      while valor <= 0:
valor = int(input("Quantidade de acções da " + acoes + " quer comprar:"))


Tudo que falei para o bloco de compra vale para o bloco de venda.
No fim, o comando str() está sendo usado errado.

   s = str(cv, acoes, valor)


Veja o que diz a documentação:
class str(object='')
class str(object=b'', encoding='utf-8', errors='strict')

ou seja, vc pode passar um objeto qualquer (1 parâmetro), ou passar um objeto bytes, o enconding e error (3 parâmetro). Você passou as 3 strings, como se querendo converter as 3 strings para uma única string. Se vc tem 3 strings, não precisa converter nada, basta concatenar usando o +.
   s = cv + acoes + valor

Porém, veja bem... elas vão fica coladas sem espaço... Você tem no seu código uma maneira de concatenar strings deixando espaço entre elas....


CUIDADO! Talvez a variável valor não seja string. então vc pode usar str(valor) somente nela, ou usando o método string.format()
   s = "{} {} {}".format(cv,acoes,valor)

esse método automaticamente converte inteiro em string. Ele troca cada {} de uma string pelos argumentos passado. Por exemplo:
nome = "Fulano"
idade = "72"
texto = "Me chamo {} e tenho {} anos.".format(nome, idade)
print(texto)

Esse código vai imprimir o texto "Me chamo Fulano e tenho 72 anos."

Acho que é isso. Espero ter ajudado. Boa parte desses erros poderiam ser resolvidos lendo o erro do python ao tentar executar o programa.





4. Re: Multiplos Whiles

Diego Mendes Rodrigues
diegomrodrigues

(usa Ubuntu)

Enviado em 17/06/2018 - 11:15h

Você conseguiu resolver o problema e criar o script Python?
Abraço,
Diego M. Rodrigues


5. Re: Multiplos Whiles

Rafael
Matixx

(usa Debian)

Enviado em 17/06/2018 - 11:20h

ainda nao acabei
diegomrodrigues escreveu:

Você conseguiu resolver o problema e criar o script Python?
Abraço,
Diego M. Rodrigues









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts