Forum >> Principianti >> Banale: IF e PyQT

Pagina: 1

Salve a tutti.
Ho provato a scrivere un banale script per farvi un breve esempio che vi possa far capire il mio dubbio(banale-elementare-tutto ammesso... non trattatemi troppo male...)
Vi allego lo script poi vengo alle domande.
nome=raw_input("Scrivi come ti chiami: ") #Stringa
eta=raw_input("Scrivi la tua eta: ")  #Numero unicode!!!Perche se uso "input" invece che "raw_input" che mi ritorna un integer posso fare operazioni matematiche ma l"if" non mi funziona?
##if type(nome)<>str:
##    str(nome)
##print nome
print type(eta)
##print eta+2

if eta<=18: #Perche se non valuta se un intero è < o > o = ad un altro intero?????? Funziona solo con un unicode?
    print "Ciao"+" "+nome
else:
    diff=(18-int(eta))
    print "Ci dispiace"+" "+nome+"\n"+"Per poter giocare devi essere maggiorenne"+"\n"+"Torna tra "+str(diff)+" anni"
Domanda:
- Perchè se uso "input", invece che "raw_input", che mi ritorna un integer posso fare operazioni matematiche ma l"if" non mi funziona? (Premetto che uso Python 2.x)
Se volessi dare un "vestito" allo script come posso fare?
Dettaglio meglio la mia domanda scrivendo una specie di lista dei desideri...
Mi piacerebbe che lo script si aprisse come un file .exe e una volta "lanciato" si aprisse una maschera con due campi dove poter inserire ciò che mi viene chiesto. Tutto corredato da i classici pulsanti "Ok" per far partire il programma e "Annulla" per chiudere tutto.
Mi sono letto la guida delle PyQt ma non ho proprio capito come poter passare alle librerie i valori delle variabili. E' spiegato molto bene come si fanno le varie maschere ma non ho proprio capito il resto che mi interessa.


Grazie in anticipo a tutti... e scusate la banalità dei miei dilemmi.



--- Ultima modifica di titino2 in data 2016-11-06 16:54:41 ---
In python2 input non ritorna necessariamente un intero, equivale a: eval(raw_input()) che può ritornare (o peggio eseguire) qualsiasi cosa.

Se si vuole acquisire un intero meglio usare int(raw_input())

La base di partenza è sempre raw_input che acquisisce una stringa.

Unicode è un altro discorso, inserendo solo dei numeri non c'entra.

Detto questo non è chiaro il comportamento che descrivi dell'if, mi sembra che funzioni regolarmente:

>>> eta = input()
18
>>> if eta <= 18:
...     print 'ciao'
... 
ciao



*** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione ***
Ciao,
perdona-perdonate il ritardo... nel ringraziarti-vi

Hai ragione... funziona alla perfezione... lasciamo perdere cosa sbagliavo... diciamo che quando ci provavo era sera tardi ed ero stanco :)

Vi chiedo nuovamente aiuto..

Ho un oggetto(lista o tupla) cosi formato:

a=['A3_20160817','A3_20161019','A3_20161117','A3_20161120','A5_20160917','A5_20160919','A5_20161117']

Ecco cosa vorrei fare:

- Vorrei estrarre da questa lista i primi caratteri fino l' "_" ed inserirli all'interno di un'altra lista.

- Vorrei estrarre ogni gruppo(per me i gruppi sono identificati dalle cifre fino l' "_") l'oggetto più "giovane"(dopo "_" è una data). es. per il gruppo A3 --> 'A3_20161120' per il gruppo A5 --> 'A5_20161117'. Una volta identificati inserirli all'interno di una nuova lista.

Ho provato e riprovato ma sinceramente tutte le prove e provine che ho fatto sono state un chiaro fallimento.

Mi potete dare delle dritte? Non vi chiedo di scrivermi il codice.. quello lo voglio fare da solo... pero non so più da che parte farmi...



Ciao, per il primo problema la soluzione sembra semplice: dato che le stringhe hanno simile struttura ti basta lavorare con gli indici per prendere quello che ti serve.
ecco un esempio
lista=[]
>>> for elem in a:
    lista.append(elem[0:3])


- Vorrei estrarre da questa lista i primi caratteri fino l' "_" ed inserirli all'interno di un'altra lista.
Se sono sempre di 3 caratteri, "_" compreso, il consiglio che ti hanno dato è corretto. In caso contrario hai alcuni strumenti come find() che ti fornisce la posizione di quanto stai cercando, oppure se il divisore è sempre "_" puoi usare split(). Ma puoi agire davvero in maniere diverse, che magari ritieni più pertinenti, compresa l'eliminazione dei doppioni, perché no utilizzando set().


- Vorrei estrarre ogni gruppo(per me i gruppi sono identificati dalle cifre fino l' "_") l'oggetto più "giovane"(dopo "_" è una data). es. per il gruppo A3 --> 'A3_20161120' per il gruppo A5 --> 'A5_20161117'. Una volta identificati inserirli all'interno di una nuova lista.

Un volta che hai la nuova lista con i tuoi indici, puoi creare un ciclo su questa nuova lista e trovare gli elementi corrispondenti nella lista con un startswith() ad esempio, così da ottenere e manipolare solo i valori che ritieni opportuni. Per controllare le date puoi usare librerie come time e datetime e sicuramente riuscirai ad ottenere quanto cerchi di fare.

Dai che sei sulla buona strada, posta i risultati che stappiamo una bottiglia insieme.

Cya
Grazie per la risposta...
si hai ragione con il tuo consiglio avrei potuto risolvere se i "gruppi" avessero tutti la stessa lunghezza ma a volte sono di lunghezza diversa. (es. A1B1, A2B2, A3, A4B4, A5, B6, B9, ecc..)

Io ho provato con la funzione string.split ma continuo ad avere problemi... vi allego il codice che come potete vedere mi da degli errori che ancora non ho superato..

import string
delivery=['A1B1 20160213','A1B1 20161001','B2_20160202','B2_20161010','F3_20160203']
dely=string.split(str(delivery),"_")
l=len(dely)
##print l
list(dely)
print type(dely)
d=[]
print type(d)
for i in range(0,l,2):
    print i
    if i==0:
        d=dely
        list(d)
        print type(d)
    else:
        print type(d)
        list(d)
        print type(d)
        d.append(dely)
        print d
print d
Questo era il "fanta codice" che ho provato a creare per estrarre il "nome del blocco".

Poi sto cercando di fare quello che estratto il nome del blocco mi identifica quello con la data più recente (qui mi perdo dopo 3 sec.).




Ciao e grazie
si hai ragione con il tuo consiglio avrei potuto risolvere se i "gruppi" avessero tutti la stessa lunghezza ma a volte sono di lunghezza diversa. (es. A1B1, A2B2, A3, A4B4, A5, B6, B9, ecc..)
Se come credo le date hanno tutte la stessa lunghezza, allora potresti prendere "tutti i caratteri tranne gli ultimi 8". Vedi [il capitolo sulle stringhe del tutorial] ( https://docs.python.org/2.7/tutorial/introduction.html#strings ) per capire come fare.

Poi sto cercando di fare quello che estratto il nome del blocco mi identifica quello con la data più recente (qui mi perdo dopo 3 sec.).

Sei fortunato: le tue date sono ordinabili semplicemente confrontando le stringhe:

>>> d=['20160213','20161001','20160202','20161010','20160203']
>>> d.sort()
>>> print(d)
['20160202', '20160203', '20160213', '20161001', '20161010']



THE 🍺-WARE LICENSE (Revision ㊷):
<carlo@🐍.it> wrote this post. As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you
think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝
Grazie a tutti...
quando ho caricato la mia risposta non ho visto quello che mi aveva scritto Daniele aka Palmux.

Ora provo a seguire tutti i vostri consigli e vi faccio sapere...




Ciao..


Pagina: 1



Esegui il login per scrivere una risposta.