Sintassi If Else Python

a = 0
b = 0
a=1; b=2 if a==0 else 3; 4
print a, b

output:
1 3

che la sintassi non andava bene l’ho avevo messo in conto, ma è questo risultato mi fa strano. . .

Non conosco e non uso python… ma guardando qua dovrebbe essere così:

a = 0
b = 0

if a == 0:
   a = 1
   b = 2
else:
   a = 3
   b = 4

print a, b

output
1 2

ciao Riccardo

certo, il metodo che hai postato è quello classico, quello da me postato è il metodo comprehension

che viene usato anche per le liste, infatti se provi con:

a=1 if a==0 else 3

funziona. io stavo provando ad inserire una ulteriore variabile
mi è sembrato strano che viene eseguito senza errore ma il risultato non’é quello atteso

ora mi chiedo del perché mi torna quel risultato? è corretto nella logica e quindi mi manca il suo ragionamento, oppure è qualcosa di intorcigliato che incasina il risultato. . .

Oh ok, ho capito.
Curioso questo “comprehension” … però personalmente è una di quelle cose che mi fa allontanare ancora di più da python.


È corretto.

Analizzando passo passo cosa succede con i comandi che hai messo:

Comando Valore a Valore b Commento
a = 0 0 / … b ancora non esiste
b = 0 0 0
a = 1 1 0
b=2 if a==0 else 3 1 3 Dato che a=1, scatta l’else e b viene impostato a 3
4 1 3 “4” non è un comando… ma ok…
print a, b 1 3

Il punto e virgola ; su python serve a delimitare un comando da un’altro, dovrebbe avere lo stesso effetto del carattere “a capo riga” (enter)

1 Mi Piace

grande Riccardo ottima analisi e ricostruzione :+1:

si questo lo sapevo, ma non avevo considerato che in questo caso mi dividesse il primo risultato dalla condizione If il mio ragionamento era proprio tenendo conto di dover andare da capo come nel metodo classico che hai postato inizialmente:

[quote=“RiccardoMajewski, post:2, topic:4702”]

if a == 0:
   a = 1
   b = 2

quindi considerando che " ; " va a capo riga e che in comprehension il risultato voluto deve essere messo prima della condizione ho usato questa sintassi, ma come si vede nei fatti il ragionamento non vale.

inizialmente avevo provato con un qualcosa come questo:

a=1 and b=2 if a==0

ma in questo caso mi da proprio errore

adesso eseguendo il codice non in Rhino ma sull’emulatore del sito python:

a=0; b=0
a=1; b=2 if a==0 else 3; 4
4
alla fine come dicevi il 4 me lo ritorna come risposta
infatti nel terminale/shell di python se scrivi un numero e premi invio ti viene riportato il numero scritto.

e vabbè come non detto, speravo di riuscire a comprimere la compressione di If
ma a come sembra più compresso di cosi non si può

si infatti è un pò contorto inizialmente però vedendo gli esempi con le liste
fanno cose complesse utilizzando una sola riga di comando

grazie ancora per la spiegazione :+1:

1 Mi Piace

… suggerimento spassionato: se non usi python in altri contesti, e un po alla volta pensi di “scriptare” sempre più spesso su rhino, valuta c#.
Le librerie di rhino e pure di grasshopper sono programmate in c#.
Trovi molti più esempi in c# che python (nel contesto rhino/gh) e in generale è un linguaggio che permette di andare più in profondo, a mio parere.
c# è anche molto più veloce in certi contesti, più fiscale, più chiaro sulla grammatica (ma anche più pignolo).

Su rhino 8 ci sarà lo scripting in c#, e ci si aprirà un mondo.

Attualmente python è un “mezzo” per accedere alle librerie c# rhinocommon.
Nel forum internazionale tutti gli script “tosti” sono fatti in c#, python è comodo per chi lo conosce già da altri contesti e non deve perdere tempo a imparare un altro linguaggio.
Ma se devi metterti ad imparare da zero un linguaggio “typed”, e lo fai per rhino/gh, non ha senso non scegliere c#.

1 Mi Piace

certamente che l’ho pensato di avvicinarmi a C# è un pezzo che ci provo
solo che ogni volta che in rete vedo un metodo che potrebbe fare a caso mio
e vado a vedere la guida online non riesco nemmeno a comprendere la sintassi

quando ho iniziato a seguire questa comunità avevo delle basi in VBA e Python
poi con Lucio in VBS ed Emilio in Python mi hanno iniziato agli Script in Rhino
è già per me li si era aperto un mondo osservando la differenza con le macro

poi già agli inizi quando qualcosa era complicato mi si presentava una soluzione con C#
solo che a differenza dei primi due non riesco a capire come splittare la sintassi di quest’ultimo
in VBS e Python ci sono esempi per ogni metodo/comando mentre in C# nella guida c’é tipo questo:

public static Result Get2dRectangle(
bool solidPen,
out Rectangle rectangle,
out RhinoView rectView

mi è difficile comprendere come gestire vari e incrociare vari metodi tra loro senza esempi chiari

ps ci vorrebbe una persona che mi facesse capire per lo meno come capire la guida
e dove poter trovare vari esempi pratici e nel caso quando necessario mi aiuti nelle lacune

comunque mi piacerebbe riuscire per lo meno a destreggiarmi un pochino in C# ne sarei contento.

Io non ho mai usato guide. (linkami quella a cui ti riferisci, sono curioso)
Credo che sia molto più diretto vedere passo passo piccoli pezzi di codice dai vari utenti nel forum.
Quando qualcuno chiede qualcosa in specifico, altri rispondono con piccoli script che risolvono solo quel problema specifico, ed ecco che è facile capire lo script in un contesto circoscritto.
(questo nel forum internazionale… )

Ovvio che se si prova a leggere uno script da 200 righe ci si perde subito (e questo, qualsiasi il linguaggio).
Io mi perdo pure a leggere i miei stessi script, qualche giorno dopo averli fatti…


Ad ogni modo se vuoi dare a c# un’altra chance, qua nel forum anche italiano qualcuno che risponde lo trovi di sicuro. Se hai qualche “esercizio” da provare, chiedi… e taggami pure.
(parlo di c# dentro GH … di c# su rhino significherebbe fare plugin o macro su Rhino8… per ora io mai fatto…)

https://developer.rhino3d.com/api/RhinoCommon/html/M_Rhino_Input_RhinoGet_Get2dRectangle.htm

avevo preso un metodo a caso sulla guida ufficiale di Rhino, a volte mi è capitato anche di individuare
il metodo giusto da usare solo che con questo tipo di guida non riesco proprio a trovare la quadra

questa invece è la guida di Python:

import rhinoscriptsyntax as rs
plane = rs.WorldXYPlane()
plane = rs.RotatePlane(plane, 45.0, [0,0,1])
rs.AddRectangle( plane, 5.0, 15.0 )

viene importata la libreria necessaria
impostato un piano e poi ruotato
ed in fine creato il rettangolo

quindi è chiara è diretta

ahahahah a chi lo dici, beh dopo qualche giorno proprio no, però quando vado a riaprire script fatti sei mesi fa o anche altri più vecchiotti mi chiedo “ma questo codice chi l’ha scritto” meravigliandomi anche :slight_smile:

ok grazie per la disponibilità credo che inizialmente anche dare un’occhiata a dei piccoli script per fare cose semplici tipo: creare punti spostarli collegarli con una curva e cose simili sarebbe già una ottimo

un saluto allora ci conto :+1:

Ciao Salvio

… si risparmiano alcune righe di codice a scapito della leggibilità.
In merito a qualsiasi linguaggio tu voglia programmare, la cosa
fondamentale è partire dalle basi esercitandosi con applicazioni
console (applicazioni su finestra command per intenderci).
Una volta acquisita la padronanza del linguaggio tutto sarà più
semplice e immediato. Ci sono tantissime pagine web e video che
spiegano i linguaggi di programmazione . A titolo di esempio ti suggerisco:

A mio parere un buon punto di partenza per semplicità e chiarezza.

Sergio

ciao Sergio, si conosco questo canale YT lo seguito tempo fa proprio su Py come anche altri canali

la gestione di base grosso modo ormai la conosco e quando vedendo cose nuove che poi vado a modificare che riscontro problemi. purtroppo sono un tipo che non mi basta ciò che vedo ma cerco altre strade.

ma forse tu parlavi del linguaggio C#

confermo, infatti per entrare nella mentalità delle comprehension ci ho messo un bel pò di tempo
e con tutto ciò che ormai ne ho fatte diverse sia di if che for nelle liste non riesco a padroneggiare ancora questo metodo, infatti per scriverle quelle più contorte le faccio prima classiche e poi le nidifico.

ps
C# non saprei forse sono io che mi faccio impressionare troppo da questo linguaggio
ma già quando prima di scrivere il codice mi ritrovo tutte quelle scritte e parentesi graffe :scream: :scream:

Salvio, stai paragonando mele e arance, come suol dirsi.
Per Python parli di rhinoscriptsyntax e per C# parli di RhinoCommon.
Imparare allo stesso tempo il linguaggio e la libreria e’ difficile.
Se vuoi usare C# su Rhino ti consiglio di impratichirti prima con RhinoCommon utilizzando Python, che gia’ conosci.
E inoltre, come ti ha detto Sergio, di imparare le basi della sintassi C# con semplici programmi da console.
Dopo aver capito come funzionano a grandi linee sia C# che RhinoCommon, avra’ senso provare a mettere insieme le due cose in ambiente Rhino.

ciao Emilio, ma dove si può trovare qualche esempio di codice non semplice ma semplicissimi
anche come hai sottolineato quindi sia in C# che RhinoCommon che in effetti confondo e mi confondo

Ciao Salvio

Come esempio per RhinoCommon potresti guardarti rhinoscriptsyntax, che ovviamente e’ scritta in RhinoCommon, e c’e’ il vantaggio che sai gia’ a cosa servono le varie funzioni.

rhinoscriptsyntax/Scripts/rhinoscript at rhino-6.x · mcneel/rhinoscriptsyntax · GitHub

Per C# non so indicarti degli esempi, anche perche’ personalmente mi trovo meglio con i manuali.
Inoltre non prevedo di aver occasione di usare C# in futuro … :wink: .
Ma Riccardo ti ha detto di chiedere pure sul forum, io ne approfitterei, cominciando da zero, cose come variabili, funzioni, input/output, operatori, cicli, flusso … e credo che per C# sia anche necessario un minimo di OOP. Ma questo te lo diranno gli esperti … :grinning:
Vedrai che i concetti sono in pratica gli stessi di Python, cambia solo un po’ la sintassi, ma nemmeno poi cosi’ tanto. Entrambi i linguaggi in fondo derivano dal C (Python un po’ meno).

Emilio ogni volta che entriamo in questo discorso: linguaggi di programmazione ecc
mi tiri fuori sempre qualche novità in merito ahahahah adesso cosè questo OOP. . .

ps ho dato un’occhiata al tuo link postato, non sono tanto semplici come codici
speravo di qualcosa molto più basilari e nel caso usando solo RhCommon

a proposito in teoria con RhCommon è possibile realizzare completamente uno script?
nel senso, vedo sempre importata la libreria di RhCommon insieme ad altre librerie o sbaglio. . .

edit:
ps ok programmazione per oggetti, ma se non erro python non fa parte di questa categoria?

Diciamo che usando le librerie di rhinocommon, già si ha a che fare con un sacco di oggetti diversi e i loro metodi…


Perdonatemi se “polemizzo”…

Opinione molto soggettiva:
Python, se non si ha in mente di usarlo anche altrove (web, app, ecc ecc), ma solo in contesto Rhino, conviene dimenticarlo il prima possibile. È sporco, disordinato, inefficiente, lento.
Con Rhino8/WIP abbiamo pure le macro in c#. Ci si dimenticherà in fretta di python.

C# io lo conosco solo all’interno di grasshopper, non l’ho mai usato in altri contesti.
Lo ho imparato solo “smontando” altri script presi dal forum.
Si passa da script monoriga a una decina di righe, a roba più complessa, ma ritengo che si possa fare anche tutto direttamente da grasshopper. Il percorso “didattico”, intendo.

Il parametro “out” contiene gli output di Print() e altro, non si sente la mancanza di una console.
Ho provato Visual Studio, è sempre c# ma mi sono perso in un attimo. Mille menu e sotto-menu, una UI che ti assale.
Imparare c# da dentro grasshopper lo ritengo un escamotage utilissimo. È una “culla” perfetta.
Per me lo è stato.

1 Mi Piace

Ciao Riccardo.

Hahaha … povero Python. :wink:
In effetti e’ un classico scripting language, molto flessibile, semplice da usare ma certo non veloce.
Anche se ultimamente stanno aggiungendo la possibilita’ di dichiarare i tipi dei dati, cosa che dovrebbe aiutare a renderlo piu’ veloce … mah. :grinning_face_with_smiling_eyes:

Quindi concordo su inefficiente e lento.
Ho qualche dubbio in piu’ su sporco e disordinato, ma penso c’entrino molto gusti e abitudini personali. :slight_smile:

Ma per quanto riguarda Rhino, che per quanto ne so io (poco) significa RhinoCommon, un aspetto importante e’ che non si possa usare una vera libreria Python, ma tocchi ‘abbassarsi’ a usare una libreria C#.
Per me questo taglia la testa al toro, meglio usare C# se possibile (e fino a Rhino 7 purtroppo per gli script Rhino non era possibile).
Poi ci saranno certo i cervelloni che si divertono a fare queste cose (usare librerie C# da Python), ma io guardo la cosa da un punto di vista molto piu’ terra terra. :blush:

Se capisco bene tu suggerisci di imparare il C# da GH, senza interessarsi di Rhino all’inizio, per poi ‘aggiungere’ RhinoCommon in seguito … Be’, si’, mi sembra una buona idea. :slight_smile:

Tra l’altro Salvio e’ esperto di GH quindi puo’ partire subito e concentrarsi sul linguaggio.

Haha … si’, e’ vero. :grinning_face_with_smiling_eyes:
Ma anche per questo, se non ricordo male, Salvio ha gia’ utilizzato le classi con Python, quindi non dovrebbe essere niente di cosi’ nuovo.

Vediamo cosa ne pensa Salvio … :grinning:

1 Mi Piace

Si’, e’ vero, anche Python usa classi e oggetti. :slight_smile:

Ci sono funzioni complicate ma anche funzioni semplici, prova a cercare.
ad esempio, dentro geometry.py c’e’ AddPoints(): solo 4 linee di codice.

A quanto ne so rhinoscriptsyntax e’ scritta usando RhinoCommon, a cosa ti riferisci ?

Con Python si’, con C# non sono sicuro, puo’ essere che serva qualche libreria per utilizzare, ad esempio, alcuni tipi di dati.

Cambiando discorso, Riccardo suggerisce di impratichirsi con C# usando GH.
Mi sembra una buona idea, tu GH lo conosci e puoi iniziare subito a sperimentare.
Io direi all’inizio di concentrarsi sul linguaggio e lasciar stare RhinoCommon.
Vedi tu … :slight_smile:

import scriptcontext
import utility as rhutil
import Rhino
import System.Guid
from view import __viewhelper

faccio un piccolo riepilogo per non incorrere in fraintendimenti: con import Rhino si parla di RhCommon
e per quel poco che ho visto è sempre accompagnato da altre librerie come queste incluse sopra.

mi chiedevo; in genere in Py con rhinoscriptsyntax faccio tutto o quasi solo con quest’unica libreria
con RhCommon invece cosa posso gestire essendo che come già detto lo vedo insieme altre librerie?

ma guarda per me va bene, se mi dite di fare in questo modo non posso che seguire il vostro consiglio
anchè perché sicuramente se inizio a matchare troppe cose di sicurovado in tilt e non faccio più nulla

per iniziare giusto per non far finire tutto nel vuoto, con il benestare di @giuseppe avevo pensato di aprire un 3d nella sezione bar dove parlare di C# ed inserire e postare esempi di codici/prove ovviamente mi attendo anche il contributo vostro @emilio @RiccardoMajewski e di tutti che ne avranno il piacere.

Tanto per capirsi, chiamo “macro” quei comandi che si possono mettere dentro un bottone di rhino.
Tipo i rhinoscript ormai in disuso…
(magari c’è un termine più adatto, ditemi voi)


RhinoCommon è .NET, una libreria, un framework, un runtime.
C# è il linguaggio con cui programmare in quella libreria/framework/runtime.
Se Rhinocommon è un aeroporto, c# è l’aereo.


Se usi RhinoScript, puoi fare “macro” e avrai una serie di comandi “ottimizzati” per essere utilizzati con poca “grammatica”.
(Post di 10 anni fa: VB vs C# vs Python - Grasshopper)
Sotto, in background, sicuramente usa RhinoCommon, ma tu scripter non hai l’accesso diretto a RhinoCommon. È un linguaggio tutto suo, impararlo è un po scomodo, oggi. L’help di rhino è anche fatto bene, ma sei limitato ad una guida fatta da McNeel anni fa…


Se usi Python, puoi fare sia “macro” che script dentro grasshopper.
Può accedere a rhinoscriptsyntax, a Rhinocommon, e ovviamente è python.
Ti ritrovi a “dover” (o poter) conoscere/usare 3 linguaggi diversi allo stesso tempo.
Che sia questo un vantaggio o svantaggio, oggettivamente non so.
Soggettivamente sapete già come la penso :slight_smile:
(Python che usa Rhino common è come un auto a cui è stato dato il pass di girare per l’aeroporto, ma non sa volare :stuck_out_tongue_winking_eye: )


Se usi c# NON puoi fare “macro”… fino a rhino 7. Da Rhino8/WIP si può!
Da c# non hai l’acceso a rhinoscriptsyntax.
Usi 1 solo linguaggio per fare tutto: c#.
Qualora volessi fare plugin, li farai in c#.


Con python e c# hai l’enorme vantaggio che se cerchi su google come fare un qualche ciclo/metodo o altro, trovi un sacco di roba!
È sono linguaggi che poi potrai usare anche fuori da rhino.
Rhinoscript ha una guida dentro rhino che è anche ben fatta, ma poi non c’è altro.
Trovi esempi nel web, ma infinitamente meno che con python e c#.
(Questo per dire: vale la pena “accanirsi” con rhinoscript? Non ha sbocchi “fuori”.
Anche io ci ho fatto script da 300+ righe… ma è tempo di passare oltre, pure McNeel sembra averlo lasciato da parte da anni ormai.)



Certo! :+1:

PS correggetemi liberamente se ho scritto stupidaggini.