Darkling Posted July 26, 2015 at 05:02 PM Report #586408 Posted July 26, 2015 at 05:02 PM (edited) Boas, ja postei o meu problema em alguns sites mas ainda ninguem me soube dar resposta. Eu sou noob em python (geralmente programo em C ou C++) e andava aqui a mexer um bocado com ele para ver o que ele pode fazer. E então resolvi criar um pequeno script para basicamente calcular todas as combinações em um vector de 3 posições. O meu problema é que me dá esse erro ai em cima no titulo do tópico na linha 20 "Array[2] = string.uppercase(index)" e eu ainda não consegui perceber porque. Ja pesquisei e a conclusão que cheguei é que isso acontece quando definimos uma variavel que ja esta definida pelo python, mas no meu script não vejo esse problema. Quem me poder ajudar, fico desde ja agradecido e peço desculpa se o codigo nao estiver bem identado (mas penso que não havera esse problema). #!/usr/bin/python2.7 import string Array = ['A','A','A'] def Exp(): index = 0 count = 0 while Array[1]!=9: if Array[2]==9: Array[1] = string.uppercase(count) count = count + 1 Array[2]='A' index = 0 else: while Array[2]!=9: Array[2] = string.uppercase(index) index = index + 1 if Array[2] == 'Z': Array[2] = 0 while Array[2] < 9: Array[2] = Array[2] + 1 print "done" Exp() Edited December 30, 2015 at 04:36 PM by pwseo syntax highlight
pwseo Posted July 26, 2015 at 06:52 PM Report #586409 Posted July 26, 2015 at 06:52 PM Darkling, Como podes ver na documentação de string, uppercase é uma string constante e não um método/função: $ python2 >>> import string >>> type(string.uppercase) <type 'str'> De resto, não verifiquei o teu código no que diz respeito à abordagem que estás a fazer à questão; vi apenas o problema relativo aos tipos de dados
Darkling Posted July 26, 2015 at 07:08 PM Author Report #586410 Posted July 26, 2015 at 07:08 PM Sim, eu sei, é uma string que contem as letras de A a Z certo? A ideia era que ele percorrese essa string incrementando o index. Eu tinha feito um outro script mais simples com python e funcionou bem desta forma...por isso é que eu não estou a perceber o problema. Edit: Li outra vez o que disseste (desculpa, é do cansaço xD) e troquei os parenteses "()" por "[]". Ao fazer isso ele diz-me o seguinte: " File ./combine.py", line 14, in Loligaging Array[1] = string.uppercase[count] IndexError: string index out of range" Eu tinha feito um script mais simples (como disse em cima) e não troquei os parenteses pelas chavetas e funcionou bem...dai também não estar a perceber o porque de agora estar a dar erro
Solution pwseo Posted July 26, 2015 at 08:11 PM Solution Report #586412 Posted July 26, 2015 at 08:11 PM Isso acontece porque algures no teu script a variável count assume valores que fogem aos limites da string.uppercase, como por exemplo o valor 26. Uma pequena pergunta: estás a tentar criar um script que construa todas as combinações das letras do alfabeto com 3 posições? Se sim, por que não utilizar 3 ciclos?
Darkling Posted July 26, 2015 at 08:45 PM Author Report #586413 Posted July 26, 2015 at 08:45 PM (edited) Isso acontece porque algures no teu script a variável count assume valores que fogem aos limites da string.uppercase, como por exemplo o valor 26. Uma pequena pergunta: estás a tentar criar um script que construa todas as combinações das letras do alfabeto com 3 posições? Se sim, por que não utilizar 3 ciclos? Hmm..estou a ver..mas eu no script que tinha feito antes tinha ele feito percorrer o alfabeto (ou seja de A a Z, sendo entao de 0 a 25) da mesma forma e ele não tinha dado problema. A ideia era pegar nas ultimas duas posições (ou seja na 1 e 2) e fazer a terceira (2) avançar de A até Z..e depois avançar a mesma de 0 ate 9. Estanto isto feito avançava o A para B na segundo posição (ou seja na posição 1) e voltava a repetir o ciclo ate a segunda posição ser 9. Depois falta ainda a primeira posição mas essa ainda não fiz. Edit: Esqueci-me de responder a tua pergunta xD. Por exemplo em C eu usaria ciclos for e depois usaria os if's para trocar para 0 e assim..mas no python..o for dele faz-me confusão xD...por causa do "in"..é algo que ainda estou a estudar xD...então resolvi fazer com while's Edited July 26, 2015 at 09:03 PM by Darkling
pwseo Posted July 26, 2015 at 09:11 PM Report #586415 Posted July 26, 2015 at 09:11 PM (edited) Não seria mais simples criares uma string assim: values = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ...e depois fazer os ciclos? Exemplo: values = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" for a in values: for b in values: for c in values: print('[{}, {}, {}]'.format(a, b, c)) E aqui ficaria o output: $ python darkling.py [A, A, A] [A, A, B] [A, A, C] ... [A, A, 9] [A, B, A] [A, B, B] ... [A, 9, 9] [b, A, A] [b, A, B] ... [9, 9, 7] [9, 9, 8] [9, 9, 9] Edited July 26, 2015 at 09:21 PM by pwseo Adicionado (e editado) exemplo.
Darkling Posted July 26, 2015 at 09:29 PM Author Report #586416 Posted July 26, 2015 at 09:29 PM É eu custumo ter esse problema...geralmente vou sempre pelas alternativas mais dificeis xD..vou fazer assim obrigado 😄 ..mas ja agora, se souberes a explicação para isto não estar a dar como eu estava a fazer, partilha que eu estou sempre disposto a aprender 🙂
FFY00 Posted October 8, 2015 at 09:29 PM Report #588736 Posted October 8, 2015 at 09:29 PM Seguindo a documentacao: string.uppercase A string containing all the characters that are considered uppercase letters. On most systems this is the string 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. The specific value is locale-dependent, and will be updated when locale.setlocale() is called. string.upercase nao eh uma funcao e sim uma string equivalente a "ABCDEFGHIJKLMNOPQRSTUVWXYZ", explica o que estas a tentar fazer com esse codigo para que eu te possa ajudar 😄
pwseo Posted October 9, 2015 at 08:12 AM Report #588754 Posted October 9, 2015 at 08:12 AM FFY00, Se reparares bem, a dúvida já foi esclarecida há algum tempo (aquilo que tinhas escrito já tinha sido dito anteriormente também).
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now