IOPanel

חזור   IOPanel > דבר חופשי > תוכנה ומערכות הפעלה > תיכנות
עמוד ראשי הירשם חיפוש הודעות מהיום סמן פורומים כנקראו

תיכנות פורום בנושאי תיכנות , פיתוח אתרים , שפות תיכנות , אפליקציות סלולר וטאבלטים.

תוכנה ומערכות הפעלה : תיכנות

עזרה ב Python

אהלן, התחלתי ללמוד פייטון לצורך העבודה. הלימוד הוא עצמי בבית. ------- התחלתי עם התוכנית הזו: היא לוקחת מספר מהשתמש, ובתשובה ...
תגובה
 
קישור חוזר הגדרות אשכול אפשרויות הצגת נושא
ישן 30-04-10, 9:59   #1 (קישור ישיר)
IOPanel
 
סמל האישי של rouvio
 
תאריך הצטרפות: Mar 2008
הודעות: 5,727
ברירת מחדל עזרה ב Python

אהלן,

התחלתי ללמוד פייטון לצורך העבודה.
הלימוד הוא עצמי בבית.

-------

התחלתי עם התוכנית הזו:
היא לוקחת מספר מהשתמש, ובתשובה מחזירה כמה מספרים זוגיים וכמה אי-זוגיים יש, ועוד מספר סטטיסטיקות.

זה הקוד:
קוד:
#Rouvio tst01


final_number = 0
even_num=0
odd_num=0
n = 1
m = 1

print "Hello, and welcome."
print "I will calculate EVEN's and ODD's and give you nice statistics with it."
vari_input = raw_input ("Please enter a number you want to find details of: ")
vari = int(vari_input)
print
print "I will count numbers up to",vari
print "'-' represents ODD's"
print "'+' represents EVEN's"
print

while final_number <> vari:
    print "-",
    if n % 2 <> 0:
        odd_num=odd_num+1
    n=n+1
    print "+",
    if m % 2 == 0:
        even_num=even_num+1
    m=m+1
    final_number=final_number+1
print
print "Results:"
print "I found",even_num,"EVEN numbers."
print "I found",odd_num,"ODD numbers."

if even_num > odd_num:
    print "There are more EVEN numbers then ODD's"
if even_num < odd_num:
    print "There are more ODD number then EVEN's."
if even_num == odd_num:
    print "The number of EVEN's and ODD's is the same:",even_num
התוכנית פועלת כעת.
אמנם לא חסינה (משתמש עדיין יכול להכניס STRING במקום מספר והתוכנה תקרוס. אני עובד על זה לאט לאט )
לפני שאעבור לשלב הבא, הייתי שמח לשמוע פידבקים ממומחי הפייטון.
כיצד ניתן להעביר אופטימיזציה לקוד הזה?
האם הייתם עושים את אותה התוכנה אותו דבר?
אילו קיצורים יכולים לעזור לי במקרה הזה?

תודות,
ניר.
__________________

Intel
I7 3770K | Asus Maximus V Gene |
4x4GB Samsung 30nm kit 1600@2400 | EVGA GTX 780 | 2x64GB OCZ SSD RAID 0, 3TB Storage | Antec Signature 850Q | 3x Benq 24" LED
Corsair H100 Liquid Cooling | Coolermaster HAF 932 | Kingpin Dragon F1 LN2/DICE pot



ציטוט:
פורסם במקור על ידי amadey צפה בהודעה
ב gta אין לי בעיה לשחק גם במנוע של gta vc רק עם עלילה ועיר אחרת.

rouvio לא מחובר   הגב עם ציטוט
ישן 30-04-10, 23:33   #2 (קישור ישיר)
IOPanel
 
סמל האישי של rouvio
 
תאריך הצטרפות: Mar 2008
הודעות: 5,727
ברירת מחדל

מה אף אחד?

הורידו את זה : http://python.org/ftp/python/2.6.5/python-2.6.5.msi
והריצו את הקוד שהבאתי.

עזרה!

ועל הדרך עוד שאלה (אולי הפתרון לא מיוחד לפייטון.. צורת חשיבה כאן!)
אני רוצה לקלוט מהמשתמש מחרוזת, ולוודא שהיא מספרית (נומרית).

לדוגמא אני מבקש מהשתמש גיל, הוא מכניס בטעות 25T ולא 25.
אני רוצה שהתוכנה תדע לזהות בעיות כאלו.

מישהו?
__________________

Intel
I7 3770K | Asus Maximus V Gene |
4x4GB Samsung 30nm kit 1600@2400 | EVGA GTX 780 | 2x64GB OCZ SSD RAID 0, 3TB Storage | Antec Signature 850Q | 3x Benq 24" LED
Corsair H100 Liquid Cooling | Coolermaster HAF 932 | Kingpin Dragon F1 LN2/DICE pot



ציטוט:
פורסם במקור על ידי amadey צפה בהודעה
ב gta אין לי בעיה לשחק גם במנוע של gta vc רק עם עלילה ועיר אחרת.

rouvio לא מחובר   הגב עם ציטוט
ישן 30-04-10, 23:44   #3 (קישור ישיר)
IO Chats
 
סמל האישי של dany_74q
 
תאריך הצטרפות: Jun 2008
הודעות: 4,790
ברירת מחדל

לדעתי לשנות את הint לdouble או float (אם אפשרי,לא יודע אם קיים בשפה הזו) ואז לעבוד עם if..else ולהגדיר מספרים ספציפיים -
אולי משהו כמו :
if (num > 10000)
print ("limit has been exceeded");
else
print("num is not a valid number");

או משהו בסגנון.
__________________
dany_74q לא מחובר   הגב עם ציטוט
ישן 01-05-10, 9:53   #4 (קישור ישיר)
IOPanel
 
סמל האישי של rouvio
 
תאריך הצטרפות: Mar 2008
הודעות: 5,727
ברירת מחדל

תודה דני. זה לא עובד ככה בדיוק בפייטון (לפי הבנתי הדלה בכל אופן ^)
אני עדיין מנסה לפתור את הבעיה - אשמח לעזרה בפייטון חברים!

בינתיים הרמתי גרסא מתקדמת יותר לזו, הרבה יותר ידידותית, עם תפריטים, ובחירת משתמש.
כשאסיים לבנות אותה כמו שצריך ולחסן אותה מפני שגיאות קלט, אפרסם כאן ואשמח לחוות דעת

האם יש אנשים המבינים בשפה שאוכל להיוועץ איתם על פרוצדורות ופונקציות?
__________________

Intel
I7 3770K | Asus Maximus V Gene |
4x4GB Samsung 30nm kit 1600@2400 | EVGA GTX 780 | 2x64GB OCZ SSD RAID 0, 3TB Storage | Antec Signature 850Q | 3x Benq 24" LED
Corsair H100 Liquid Cooling | Coolermaster HAF 932 | Kingpin Dragon F1 LN2/DICE pot



ציטוט:
פורסם במקור על ידי amadey צפה בהודעה
ב gta אין לי בעיה לשחק גם במנוע של gta vc רק עם עלילה ועיר אחרת.

rouvio לא מחובר   הגב עם ציטוט
ישן 01-05-10, 10:59   #5 (קישור ישיר)
IO Chats
 
סמל האישי של dany_74q
 
תאריך הצטרפות: Jun 2008
הודעות: 4,790
ברירת מחדל

אמור להיות דומה בכל השפות לדעתי, תשאל.
בקשר לבעיות (מכניסים str או מספר שלילי) - מה עם דבר כזה :
import math
import sys

if vari < 0 & vari > 10000:
print "limit exceeded"
sys.exit()

elif math.isnan(vari):
print "Not a valid number"
sys.exit()

isnan זאת פונקציה שבודקת אם float / double הוא לא מספר.

תעלה לכאן את הגרסה החדשה, מעניין.
__________________
dany_74q לא מחובר   הגב עם ציטוט
ישן 01-05-10, 11:45   #6 (קישור ישיר)
IOPanel
 
סמל האישי של rouvio
 
תאריך הצטרפות: Mar 2008
הודעות: 5,727
ברירת מחדל

אוקי, נשמע מעניין (אגב הברקה מעולה.. לחסום מלמעלה ו"למטה").
אבל.. מה אם המשתמש יכניס מספר INT תקני הגדול מ10000?
מדוע לחסום כל מספר מעליו?

הא?
לא בטוח אם זו כבר הפילוסופיה של התיכנות, אבל כן יודע שכאן הכיף.
__________________

Intel
I7 3770K | Asus Maximus V Gene |
4x4GB Samsung 30nm kit 1600@2400 | EVGA GTX 780 | 2x64GB OCZ SSD RAID 0, 3TB Storage | Antec Signature 850Q | 3x Benq 24" LED
Corsair H100 Liquid Cooling | Coolermaster HAF 932 | Kingpin Dragon F1 LN2/DICE pot



ציטוט:
פורסם במקור על ידי amadey צפה בהודעה
ב gta אין לי בעיה לשחק גם במנוע של gta vc רק עם עלילה ועיר אחרת.

rouvio לא מחובר   הגב עם ציטוט
קישור פירסומי
ישן 01-05-10, 12:20   #7 (קישור ישיר)
IO Chats
 
סמל האישי של dany_74q
 
תאריך הצטרפות: Jun 2008
הודעות: 4,790
ברירת מחדל

ממש לא חייב להגביל מלמעלה,הייתה סתם דוגמה,אבל ממליץ להשאיר את ההגבלה של מתחת לאפס,
אם אתה מכניס שלילי המכונה עושה לופ אין-סופי.
שיפור נוסף - אפשר בתחילת הקוד אפשר לשים label ואז לחזור לשם במקום לסגור את התוכנה.
משהו כמו:
label .menu
Pieces of code
if vari < 0:
print "Negative numbers are not supported"
print "Would you like to start the program again?"
x_input = raw_input ("enter y for yes, n for no")
x = char(x_input)
if x=='y' | x=='Y' | x=='yes' | x=='Yes' :
goto .menu
elif x=='n' | x=='N' | x=='no' | x=='No' :
sys.exit()
elif math.isnan(vari):
print "Not a valid number"
sys.exit()

*סלח לי אם הקוד לא נכון, לא יצא לי להשתמש בפייטון לפני, ניסיתי להתבסס על הקוד שכתבת.
**char זה string ,לא יודע אם בפייטון כותבים string/str או char.
***אם העקרון לא עובד עם char/string אפשר להחליף בint ו1 ,0.
__________________
dany_74q לא מחובר   הגב עם ציטוט
ישן 02-05-10, 2:18   #8 (קישור ישיר)
IO Folding Team
 
סמל האישי של static
 
תאריך הצטרפות: Dec 2007
הודעות: 2,111
ברירת מחדל

קח פתרון מויקיפדיה...
בדיקה האם סטרינג הוא נומרי בכמעט כל שפה שקיימת היום

Determine if a string is numeric - Rosetta Code
__________________
cpu: i7 920 D0| mobo: Gigabyte Ga-EX58-UD4P | mem: Mushkin Black Line 12GB 1600MHz 9-9-9-24 | gpu: PNY 670GTX | case: Antec P190 | psu: Antec neo-link 1200w |
hd: 1TB Samsung F1 + Intel SSD 120Gb 330 , 320GB WD AAKS | display: Samsung T240 24" | keyboard: Logitech Wave | mouse: Logitech MX Revolotion + G700 | Speakers: Logitech Z-5500
static לא מחובר   הגב עם ציטוט
ישן 02-05-10, 2:23   #9 (קישור ישיר)
IOPanel
 
סמל האישי של rouvio
 
תאריך הצטרפות: Mar 2008
הודעות: 5,727
ברירת מחדל

ווא! תותח
אחלה עמוד.. חשוב מאוד.
תודה - בהחלט אשתמש בקוד שרשום שם.
__________________

Intel
I7 3770K | Asus Maximus V Gene |
4x4GB Samsung 30nm kit 1600@2400 | EVGA GTX 780 | 2x64GB OCZ SSD RAID 0, 3TB Storage | Antec Signature 850Q | 3x Benq 24" LED
Corsair H100 Liquid Cooling | Coolermaster HAF 932 | Kingpin Dragon F1 LN2/DICE pot



ציטוט:
פורסם במקור על ידי amadey צפה בהודעה
ב gta אין לי בעיה לשחק גם במנוע של gta vc רק עם עלילה ועיר אחרת.

rouvio לא מחובר   הגב עם ציטוט
ישן 02-05-10, 12:03   #10 (קישור ישיר)
IOPanel
 
סמל האישי של rouvio
 
תאריך הצטרפות: Mar 2008
הודעות: 5,727
ברירת מחדל

הופה - גרסא 0.35 באוויר
אתם מוזמנים להוריד את הקובץ ולהריץ - הוא עבר קימפול לEXE.
(פתחו את הקובץ לספריה, והריצו את NRcalc.exe)

בגרסא הזו הוספתי תפריטים, ממשק בסיסי ביותר ועברתי ג-י-ה-נ-ו-ם של לולאות ותנאים.
הנה קוד המקור לאמת את מה שעבר עלי בכמעט 24 שעות האחרונות:
קוד:
#version 0.4

def evenandodd_f():
    loopcount = 0
    odd_num = 0
    even_num = 0
    menu_choice = 0
    loop = 1
    odd = 1
    even = 1
    print "Your options are:"
    print " "
    print "1) Find out how many Odd's are in a number"
    print "2) Find out how many Even's are in a number"
    print "3) Do both"
    print "4) Quit session (in version 0.5 \"Return to main menu\")"
#todo in version 0.5    print "5) Quit session"
    print " "
    menu_choice = input("Please choose your option: ")
    while loop == 1:
        if menu_choice == 1:
            user_input1 = raw_input("Great, now what number would you like to examine? " )
            user_input2 = int(user_input1)
            while loopcount < user_input2:
                if odd % 2 <> 0:
                    print "-",
                    odd_num=odd_num+1
                odd=odd+1
                if even % 2 == 0:
                    print "+",
                    even_num=even_num+1
                even=even+1
                loopcount=loopcount+1
            print ""
            print "Results:"
            print "I found",odd_num,"ODD numbers in ",user_input2,"."
            print ""
            loop = 0
        if menu_choice == 2:
            user_input1 = raw_input("Great, now what number would you like to examine? " )
            user_input2 = int(user_input1)
            while loopcount < user_input2:
                if odd % 2 <> 0:
                    print "-",
                    odd_num=odd_num+1
                odd=odd+1
                if even % 2 == 0:
                    print "+",
                    even_num=even_num+1
                even=even+1
                loopcount=loopcount+1
            print ""
            print "Results:"
            print "I found",even_num,"EVEN numbers in ",user_input2,"."
            loop = 0
        if menu_choice == 3:
            user_input1 = raw_input("Great, now what number would you like to examine? " )
            user_input2 = int(user_input1)
            while loopcount < user_input2:
                if odd % 2 <> 0:
                    print "-",
                    odd_num=odd_num+1
                odd=odd+1
                if even % 2 == 0:
                    print "+",
                    even_num=even_num+1
                even=even+1
                loopcount=loopcount+1
            print ""
            print "Results:"
            print "I found",odd_num,"ODD numbers in",user_input2,"."
            print "I found",even_num,"EVEN numbers in",user_input2,"."
            loop = 0
        if menu_choice == 4:
            loop = 0


def anotheraction_f():
    answer = raw_input("Would you like to perform another action? (Y/N) ")
    if answer == ('y' or 'Y'):
        evenandodd_f()
        anotheraction_f()
            

#program starts here
mainmenu_choice = "void"
loop = 0
while loop == 0:
    print "Hello and welcome to NR's Calculator."
    print ""
    print "This program is under development."
    print "It will extend its capabilities in following versions."
    print "(v0.35) the only working module is Evens & Odds statistics calculator."
    print ""
    mainmenu_choice = raw_input("Press any key to continue, or (q) to quit: ")
    if mainmenu_choice == ('q' or 'Q'):
        print ""
        print "Thank you for using NR's Calculator."
        print "Please check back later for updates!"
        import time
        time.sleep(4)
        loop = 1
    else:
        print ""
        print "Loading Evens and Odds module.",
        sleeptime = 0
        while sleeptime < 2:
            import time
            time.sleep(.5)
            print ".",
            sleeptime = sleeptime + .5
        print ""
        import os
        os.system("cls")
        evenandodd_f()
        anotheraction_f()
        print ""
        print "Thank you for using NR's Calculator."
        print "Please check back later for updates!"
        import time
        time.sleep(4)
    loop = 1
וקובץ המקור למי שמותקן פייטון ומעוניין לחקור.

----------------------

באגים ידועים:
  1. התוכנה לא חסינה. קורסת על INPUT לא תקין בכמה דיאלוגים.
  2. בתפריט הראשי אחרי שרושמים "q" כדי לצאת, התוכנה שואלת "האם לבצע עוד פעולה?"
שינויים בגרסא הזו:
  • מבנה תוכנה תקין יותר מהקודם - שימוש לראשונה בפונקציות, וחלוקת שמות רלוונטיים למשתנים.
  • שימוש נחמד בלולאות, חלקן חופרות עמוק..
  • שימוש בSLEEP
  • שימוש בCLS
שינויים עתידיים:
  1. הוספת מגוון אפשרויות מתמטיות שונות לתפריט הראשי (ולא רק מחשבון זוגי/איזוגי).
  2. תפריט ידידותי יותר.
  3. אופטימיזציה ללולאות.
יאללה - פידבק.
__________________

Intel
I7 3770K | Asus Maximus V Gene |
4x4GB Samsung 30nm kit 1600@2400 | EVGA GTX 780 | 2x64GB OCZ SSD RAID 0, 3TB Storage | Antec Signature 850Q | 3x Benq 24" LED
Corsair H100 Liquid Cooling | Coolermaster HAF 932 | Kingpin Dragon F1 LN2/DICE pot



ציטוט:
פורסם במקור על ידי amadey צפה בהודעה
ב gta אין לי בעיה לשחק גם במנוע של gta vc רק עם עלילה ועיר אחרת.


נערך לאחרונה על ידי rouvio, 02-05-10 בשעה 12:10.
rouvio לא מחובר   הגב עם ציטוט
ישן 02-05-10, 13:45   #11 (קישור ישיר)
IO Chats
 
סמל האישי של dany_74q
 
תאריך הצטרפות: Jun 2008
הודעות: 4,790
ברירת מחדל

שחקתי קצת עם הקוד, הוספתי קוד של מה קורה במקרה שmenu_choice לא שווה 1,2,3,4 ,
וmenu_choice לא שווה מספר.
מפנה אותך ללולאת if..else ושואל אותך אם תרצה לחזור לתפריט או לסגור את התוכנה,
במקרה שלא תכניס שלוש פעמים string מתאים (y/Y/yes/Yes/n/N/No/no) התוכנה תסגר.
תעבור על זה, אולי תאמץ ותשפר את הדבר (שינויים סומנו) :

קוד:
#version 0.4 def evenandodd_f(): import sys r_menu = '' input_err = 0 loopcount = 0 odd_num = 0 even_num = 0 menu_choice = 0 loop = 1 odd = 1 even = 1 print "Your options are:" print " " print "1) Find out how many Odd's are in a number" print "2) Find out how many Even's are in a number" print "3) Do both" print "4) Quit session (in version 0.5 \"Return to main menu\")" #todo in version 0.5 print "5) Quit session" print " " menu_choice = input("Please choose your option: ") while loop == 1: if menu_choice == 1: user_input1 = raw_input("Great, now what number would you like to examine? " ) user_input2 = int(user_input1) while loopcount < user_input2: if odd % 2 <> 0: print "-", odd_num=odd_num+1 odd=odd+1 if even % 2 == 0: print "+", even_num=even_num+1 even=even+1 loopcount=loopcount+1 print "" print "Results:" print "I found",odd_num,"ODD numbers in ",user_input2,"." print "" loop = 0 if menu_choice == 2: user_input1 = raw_input("Great, now what number would you like to examine? " ) user_input2 = int(user_input1) while loopcount < user_input2: if odd % 2 <> 0: print "-", odd_num=odd_num+1 odd=odd+1 if even % 2 == 0: print "+", even_num=even_num+1 even=even+1 loopcount=loopcount+1 print "" print "Results:" print "I found",even_num,"EVEN numbers in ",user_input2,"." loop = 0 if menu_choice == 3: user_input1 = raw_input("Great, now what number would you like to examine? " ) user_input2 = int(user_input1) while loopcount < user_input2: if odd % 2 <> 0: print "-", odd_num=odd_num+1 odd=odd+1 if even % 2 == 0: print "+", even_num=even_num+1 even=even+1 loopcount=loopcount+1 print "" print "Results:" print "I found",odd_num,"ODD numbers in",user_input2,"." print "I found",even_num,"EVEN numbers in",user_input2,"." loop = 0 if menu_choice == 4: loop = 0 while input_err < 4: if menu_choice !=(1 & 2 & 3 & 4): print "Invalid input, would you like to return to the main menu ?\n" funcmap = {1: evenandodd_f} r_menu = raw_input("y for yes, n for no\n") if r_menu == ('y' or 'Y' or 'yes' or 'Yes'): funcmap[1]() elif r_menu == ('n' or 'N' or 'no' or 'No'): sys.exit() else: if input_err != 3: print "Invalid input, try again\n" input_err = input_err + 1 elif input_err == 3: print "Too many wrong inputs, the program will close now" sys.exit() def anotheraction_f(): answer = raw_input("Would you like to perform another action? (Y/N) ") if answer == ('y' or 'Y'): evenandodd_f() anotheraction_f() #program starts here mainmenu_choice = "void" loop = 0 while loop == 0: print "Hello and welcome to NR's Calculator." print "" print "This program is under development." print "It will extend its capabilities in following versions." print "(v0.35) the only working module is Evens & Odds statistics calculator." print "" mainmenu_choice = raw_input("Press any key to continue, or (q) to quit: ") if mainmenu_choice == ('q' or 'Q'): print "" print "Thank you for using NR's Calculator." print "Please check back later for updates!" import time time.sleep(4) loop = 1 else: print "" print "Loading Evens and Odds module.", sleeptime = 0 while sleeptime < 2: import time time.sleep(.5) print ".", sleeptime = sleeptime + .5 print "" import os os.system("cls") evenandodd_f() anotheraction_f() print "" print "Thank you for using NR's Calculator." print "Please check back later for updates!" import time time.sleep(4) loop = 1
__________________
dany_74q לא מחובר   הגב עם ציטוט
ישן 02-05-10, 14:11   #12 (קישור ישיר)
IOPanel
 
סמל האישי של rouvio
 
תאריך הצטרפות: Mar 2008
הודעות: 5,727
ברירת מחדל

קוד לא מריץ נכון את התוכנה דני.
האם רשמת את זה בפייטון?

שיחזור:
1) לחיצה על ENTER
2) בחירת אפשרות 3
4) הכנסת כל מספר לבדיקה (לדוגמא: 256)

התוכנה מחשבת, מסכמת ורושמת:
קוד:
Invalid input, would you like to return to the main menu ?

y for yes, n for no
1) אני מעדיף לעבוד בשיטה של (Y/N) - יותר מסתדר לי ככה
קוד:
would you like to return to the main menu ? (Y/N)
2) אם אני מכניס 'n' לשאלה האם אני רוצה לחזור לתפריט הראשי - התוכנה קורסת.

אמרתי לך אחי.. גיהנום של לולאות ברמה רביעית וחמישית.
לא סתם ישבתי על זה שעות רבות.
נסה בבקשה לתקן את הקוד ולהחזיר משהו שאוכל להכניס באפליקציה הסופית, או יותר להבין את כוונתך המקורית.

בכל מקרה, יש לי עוד הרבה הרבה לעבוד על הקוד לפני שיהיה אפילו קרוב לסופי.
__________________

Intel
I7 3770K | Asus Maximus V Gene |
4x4GB Samsung 30nm kit 1600@2400 | EVGA GTX 780 | 2x64GB OCZ SSD RAID 0, 3TB Storage | Antec Signature 850Q | 3x Benq 24" LED
Corsair H100 Liquid Cooling | Coolermaster HAF 932 | Kingpin Dragon F1 LN2/DICE pot



ציטוט:
פורסם במקור על ידי amadey צפה בהודעה
ב gta אין לי בעיה לשחק גם במנוע של gta vc רק עם עלילה ועיר אחרת.

rouvio לא מחובר   הגב עם ציטוט
ישן 02-05-10, 15:28   #13 (קישור ישיר)
IO Chats
 
סמל האישי של dany_74q
 
תאריך הצטרפות: Jun 2008
הודעות: 4,790
ברירת מחדל

^ הכל תוקן + סודר הבאג של ה"q".

תן דעתך:
קוד:
#version 0.4.1 def evenandodd_f(): import sys import time r_menu = '' loopcount = 0 odd_num = 0 even_num = 0 menu_choice = '' loop = 1 odd = 1 even = 1 print "Your options are:" print " " print "1) Find out how many Odd's are in a number" print "2) Find out how many Even's are in a number" print "3) Do both" print "4) Quit session (in version 0.5 \"Return to main menu\")" #todo in version 0.5 print "5) Quit session" print " " menu_choice = raw_input("Please choose your option: ") while loop == 1: if menu_choice == '1': user_input1 = raw_input("Great, now what number would you like to examine? " ) user_input2 = int(user_input1) while loopcount < user_input2: if odd % 2 <> 0: print "-", odd_num=odd_num+1 odd=odd+1 if even % 2 == 0: print "+", even_num=even_num+1 even=even+1 loopcount=loopcount+1 print "" print "Results:" print "I found",odd_num,"ODD numbers in ",user_input2,"." print "" loop = 0 elif menu_choice == '2': user_input1 = raw_input("Great, now what number would you like to examine? " ) user_input2 = int(user_input1) while loopcount < user_input2: if odd % 2 <> 0: print "-", odd_num=odd_num+1 odd=odd+1 if even % 2 == 0: print "+", even_num=even_num+1 even=even+1 loopcount=loopcount+1 print "" print "Results:" print "I found",even_num,"EVEN numbers in ",user_input2,"." loop = 0 elif menu_choice == '3': user_input1 = raw_input("Great, now what number would you like to examine? " ) user_input2 = int(user_input1) while loopcount < user_input2: if odd % 2 <> 0: print "-", odd_num=odd_num+1 odd=odd+1 if even % 2 == 0: print "+", even_num=even_num+1 even=even+1 loopcount=loopcount+1 print "" print "Results:" print "I found",odd_num,"ODD numbers in",user_input2,"." print "I found",even_num,"EVEN numbers in",user_input2,"." loop = 0 elif menu_choice == '4': loop = 0 print "" print "Thank you for using NR's Calculator." print "Please check back later for updates!" time.sleep(4) sys.exit() else: loop = 0 r_menu = raw_input("Invalid input, would you like to return to the main menu ? (Y/N)\n") if r_menu == 'y' or r_menu == 'Y': evenandodd_f() elif r_menu == 'n' or r_menu == 'N': print "Thank you for using NR's Calculator." print "Please check back later for updates!" time.sleep(3) sys.exit() def anotheraction_f(): answer = raw_input("Would you like to perform another action? (Y/N)\n ") if answer == 'y' or answer == 'Y': loop = 1 evenandodd_f() anotheraction_f() #program starts here mainmenu_choice = "void" loop = 0 while loop == 0: print "Hello and welcome to NR's Calculator." print "" print "This program is under development." print "It will extend its capabilities in following versions." print "(v0.35) the only working module is Evens & Odds statistics calculator." print "" mainmenu_choice = raw_input("Press any key to continue, or (q) to quit: ") if mainmenu_choice == 'q' or mainmenu_choice == 'Q': print "" print "Thank you for using NR's Calculator." print "Please check back later for updates!" import time time.sleep(4) loop = 1 else: print "" print "Loading Evens and Odds module.", sleeptime = 0 while sleeptime < 2: import time time.sleep(.5) print ".", sleeptime = sleeptime + .5 print "" import os os.system("cls") evenandodd_f() anotheraction_f() print "" print "Thank you for using NR's Calculator." print "Please check back later for updates!" import time time.sleep(4) loop = 1
השינויים היותר רציניים :
menu_choice עבר מint לstring,ככה אפשר לעבוד גם עם מספרים וגם עם אותיות בלי שהתוכנה תקרוס.
המבנה עבר מ: if if if if ל if elif elif elif else .
__________________
dany_74q לא מחובר   הגב עם ציטוט
ישן 02-05-10, 18:13   #14 (קישור ישיר)
IOPanel
 
סמל האישי של rouvio
 
תאריך הצטרפות: Mar 2008
הודעות: 5,727
ברירת מחדל

ציטוט:
פורסם במקור על ידי dany_74q צפה בהודעה
תן דעתך.
המבנה עבר מ: if if if if ל if elif elif elif else .
אתה צודק לחלוטין. elif הרבה יותר יעיל כאן ובזה צריך להשתמש במקרה הזה.
הגרסא החדשה שהעלת הרבה יותר מוצלחת מהקודמת אבל עדיין לא חסינה 100%.
אם היית בוחר "4" בתפריט זוגי/איזוגי התוכנה אומנם היתה יוצאת, אבל בגלל שגיאה ולא בגלל:
קוד:
sys.exit()
חפרתי במדריכים, וגיליתי אי-התאמה בין איך שהצעת לסיים את אפשרות "4" לבין איך שזה אמור לעבוד. לא הבנתי בדיוק מה לא עובד שם.. אבל משהו לא עבד.
שיחקתי קצת עם המשתנים ותיקנתי (אגב, ע"י הוספה של " pre main menu" שעדיין לא קיים).

בנוסף, חיסנתי את התוכנה ע"י הברקה ^
השתמשתי באפשרות ELIF נוספת: "אם r_menu לא שווה ל'1' או ל'2' או ל'3' או ל'4' אז..
עכשיו, אלה אם החמצתי משהו התוכנה חסינה אחו-שקשוקי.
(עצבים אש אם לא.. למה די! כמה אפשר )

*שינוי הקוד מהותי מדי בשביל להדגיש שינויים*
קוד:
#version = 0.4.3
#
#programmer: rouvio
#co/programmer: Danny_74q

def evenandodd_f():
    import sys
    import time
    r_menu = ''
    loopcount = 0
    odd_num = 0
    even_num = 0
    loop = 1
    odd = 1
    even = 1
    print "Your options are:"
    print " "
    print "1) Find out how many Odd's are in a number"
    print "2) Find out how many Even's are in a number"
    print "3) Do both"
    print "4) Return to main menu"
    print " "
    menu_choice = raw_input("Please choose your option: ")
    while loop == 1:
        if menu_choice == ('1'):
            user_input1 = raw_input("Great, now what number would you like to examine? " )
            user_input2 = int(user_input1)
            print "\"-\" represents ODDs"
            print "\"+\" represents EVENs"
            print ""
            while loopcount < user_input2:
                if odd % 2 <> 0:
                    print "-",
                    odd_num=odd_num+1
                odd=odd+1
                if even % 2 == 0:
                    print "+",
                    even_num=even_num+1
                even=even+1
                loopcount=loopcount+1
            print ""
            print "Results:"
            print "I found",odd_num,"ODD numbers in",user_input2,"."
            print ""
            loop = 0
        elif menu_choice == ('2'):
            user_input1 = raw_input("Great, now what number would you like to examine? " )
            user_input2 = int(user_input1)
            print "\"-\" represents ODDs"
            print "\"+\" represents EVENs"
            print ""
            while loopcount < user_input2:
                if odd % 2 <> 0:
                    print "-",
                    odd_num=odd_num+1
                odd=odd+1
                if even % 2 == 0:
                    print "+",
                    even_num=even_num+1
                even=even+1
                loopcount=loopcount+1
            print ""
            print "Results:"
            print "I found",even_num,"EVEN numbers in",user_input2,"."
            print ""
            loop = 0
        elif menu_choice == ('3'):
            user_input1 = raw_input("Great, now what number would you like to examine? " )
            user_input2 = int(user_input1)
            print "\"-\" represents ODDs"
            print "\"+\" represents EVENs"
            print ""
            while loopcount < user_input2:
                if odd % 2 <> 0:
                    print "-",
                    odd_num=odd_num+1
                odd=odd+1
                if even % 2 == 0:
                    print "+",
                    even_num=even_num+1
                even=even+1
                loopcount=loopcount+1
            print ""
            print "Results:"
            print "I found",odd_num,"ODD numbers in",user_input2,"."
            print "I found",even_num,"EVEN numbers in",user_input2,"."
            print ""
            loop = 0
        elif menu_choice == ('4'):
            print ""
            print "Now exiting Evens & Odds calculator.",
            time.sleep(.5)
            print ".",
            time.sleep(.5)
            print "."
            loop = 0
        elif menu_choice <> ('1' or '2' or '3' or '4'):
            r_menu = raw_input("Invalid input. Would you like to return to Even & Odds calculator? (Y/N) ")
            invalid_input = 0
            while invalid_input == 0:
                if r_menu == ('y' or 'Y'):
                    invalid_input = 1
                    import os
                    os.system("cls")
                    evenandodd_f()
                elif r_menu == ('n' or 'N'):
                    invalid_input = 1
                    print ""
                    print "Thank you for using NR's Calculator."
                    print "Please check back later for updates!"
                    time.sleep(4)
                    sys.exit()
                elif r_menu <> ('y' or 'Y' or 'n' or 'N'):
                    r_menu = raw_input("Invalid input. Would you like to return to Even & Odds calculator? (Y/N) ")
                    invalid_input = 0
            loop = 0
        
def anotheraction_f():
    answer = raw_input("Would you like to perform another action? (Y/N) ")
    loop = 0
    while loop == 0:
        if answer == ('y' or 'Y'):
            import os
            os.system("cls")
            evenandodd_f()
            anotheraction_f()
            loop = 1
        elif answer == ('n' or 'N'):
            loop = 1
        elif answer <> ('y' or 'Y' or 'n' or 'N'):
            answer = raw_input("Would you like to perform another action? (Y/N) ")
            loop = 0
        
            

#program starts here
mainmenu_choice = "void"
loop = 0
while loop == 0:
    print "Hello and welcome to NR's Calculator."
    print ""
    print "This program is under development."
    print "It will extend its capabilities in following versions."
    print "(version 0.4.3) *The only working module is Evens & Odds statistics calculator."
    print ""
    mainmenu_choice = raw_input("Press any key to continue, or (q) to quit: ")
    if mainmenu_choice == 'q' or mainmenu_choice == 'Q':
        print ""
        print "Thank you for using NR's Calculator."
        print "Please check back later for updates!"
        import time
        time.sleep(4)
        loop = 1
    else:
        print ""
        print "Loading Evens and Odds module.",
        sleeptime = 0
        while sleeptime < 2:
            import time
            time.sleep(.5)
            print ".",
            sleeptime = sleeptime + .5
        print ""
        import os
        os.system("cls")
        evenandodd_f()
        anotheraction_f()
        print ""
        print "Thank you for using NR's Calculator."
        print "Please check back later for updates!"
        import time
        time.sleep(4)
    loop = 1
בבקשה תבדוק את הקוד ותן פידבק.
אחרי שתביא "OK" שהיא חסונה וגיבורה נמשיך הלאה עם שמחה בלב לשלב הבא

אגב, אתה זכאי בהחלט ל "co programmer"
__________________

Intel
I7 3770K | Asus Maximus V Gene |
4x4GB Samsung 30nm kit 1600@2400 | EVGA GTX 780 | 2x64GB OCZ SSD RAID 0, 3TB Storage | Antec Signature 850Q | 3x Benq 24" LED
Corsair H100 Liquid Cooling | Coolermaster HAF 932 | Kingpin Dragon F1 LN2/DICE pot



ציטוט:
פורסם במקור על ידי amadey צפה בהודעה
ב gta אין לי בעיה לשחק גם במנוע של gta vc רק עם עלילה ועיר אחרת.


נערך לאחרונה על ידי rouvio, 02-05-10 בשעה 18:18.
rouvio לא מחובר   הגב עם ציטוט
ישן 02-05-10, 18:42   #15 (קישור ישיר)
IO Chats
 
סמל האישי של dany_74q
 
תאריך הצטרפות: Jun 2008
הודעות: 4,790
ברירת מחדל

ניסיתי לגרום לה לקרוס בכל דרך שעלתה לי לראש,יציב, עובד טוב מאוד
מה ששמתי לב - N/Y בקפיטל לא עובדים בשני השאלות (חזרה לתפריט ופעולה נוספת) -> השיטה של הסוגריים כנראה לא עובדת כמו שצריך.
לשנות ל:
קוד:
if r_menu == 'y' or r_menu == 'Y':

elif r_menu == 'n' or r_menu == 'N':

if answer == 'y' or answer == 'Y':

elif answer == 'n' or answer == 'N':
משהו קטן - לשנות את השם לאופציה 4 לדעתי, כתוב "Return to the main menu" כשאתה כבר בתפריט הראשי.

אגב הelif <> בשלושת המקרים (answer,r_menu,menu_choise) יכול להיות די מיותר -
כל עוד אתה משתמש בif elif elif elif את האופציה של "כל השאר" אתה יכול לשים בelse,
אבל לא כזה חשוב במקרה הזה..

כל הכבוד על הקוד, יצא נהדר
__________________
dany_74q לא מחובר   הגב עם ציטוט
תגובה


הגדרות אשכול
אפשרויות הצגת נושא

חוקי משלוח הודעות
אתה לא יכול לשלוח הודעות חדשות
אתה לא יכול לשלוח תגובות
הינך לא יכול לצרף קבצים להודעותיך
אתה לא יכול לערוך את הודעותיך

vB code הינו פועל
סמיילים הינו פועל
קוד [IMG] הינו פועל
קוד HTML הינו כבוי
Trackbacksהינו פועל
Pingbacks הינו פועל
Refbacks הינו פועל

נושאים דומים
אשכול מפרסם האשכול פורום תגובות הודעה אחרונה
עזרה מאוד חשובה, יום רביעי מתכונת ואני צריך עזרה עם תרגיל ZipoX דיבורים על הא ודא 33 24-03-10 17:53
ספר Python YosiAT תיכנות 2 05-03-09 20:51
Monty Python ביוטיוב iakovl דיבורים על הא ודא 4 23-11-08 19:02
[עזרה] קניתי כבל לחיבור המחשב לטלוויזיה ואני צריכה עזרה. yolia1111 תמיכה טכנית 14 23-07-07 1:18
[עזרה] צריך עזרה לגבי מפרט מחשב+בחירת מארז *התקציב: 5.5K! Almog Design מפרטי מחשב 145 27-06-07 16:54


כל הזמנים הם GMT +3. השעה כרגע היא 11:27.





מופעל על ידי: vBulletin
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO
IOPanel.net © כל הזכויות שמורות