سؤال

وأنا أكتب برنامج بسيط للمساعدة في توليد أوامر لعبة أنا عضو. أن تقع في CATERGORY البرامج لا حاجة لي في الواقع. ولكن الآن أنا قد بدأت أريد أن العمل. كل ذلك الى حد كبير تدير على نحو سلس ولكن أنا لا يمكن معرفة كيفية وقف نوع من الأخطاء ocurring حوالي نصف الطريق من خلال. هنا هو رمز؛

status = 1

print "[b][u]magic[/u][/b]"

while status == 1:
    print " "
    print "would you like to:"
    print " "
    print "1) add another spell"
    print "2) end"
    print " "
    choice = input("Choose your option: ")
    print " "
    if choice == 1:
        name = raw_input("What is the spell called?")
        level = raw_input("What level of the spell are you trying to research?")
        print "What tier is the spell: "
        print " "
        print "1) low"
        print "2) mid"
        print "3) high"
        print " "
        tier = input("Choose your option: ")
        if tier == 1:
            materials = 1 + (level * 1)
            rp = 10 + (level * 5)
        elif tier == 2:
            materials = 2 + (level * 1.5)
            rp = 10 + (level * 15)
        elif tier == 3:
            materials = 5 + (level * 2)
            rp = 60 + (level * 40)
        print "research ", name, "to level ", level, "--- material cost = ",
                materials, "and research point cost =", rp
    elif choice == 2:
        status = 0

ويمكن لأي شخص أن تساعد؟

تحرير

والخطأ أحصل هو؛

Traceback (most recent call last):
  File "C:\Users\Mike\Documents\python\magic orders", line 27, in <module>
    materials = 1 + (level * 1)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
هل كانت مفيدة؟

المحلول

وتتبع مكدس الذاكرة المؤقتة لظل ساعد، ولكن يفترض أن الخطأ هو:

materials = 1 + (level * 1)

و"مستوى" سلسلة، وأنت لا تستطيع القيام بعملية حسابية على السلاسل. بايثون هي لغة كتابة حيوي، ولكنها ليست واحدة كتبته ضعيفة.

level= raw_input('blah')
try:
    level= int(level)
except ValueError:
    # user put something non-numeric in, tell them off

في أجزاء أخرى من البرنامج الذي تستخدمه الإدخال ()، والتي سوف تقيم سلسلة دخلت كما بيثون، وذلك ل"1" سوف يعطيك رقم 1.

ولكن! هذا هو فائقة الخطورة - تخيل ماذا يحدث إذا قام المستخدم بكتابة "os.remove (اسم الملف)" بدلا من رقم. إلا إذا كان المستخدم هو فقط أنت وأنت لا تهتم، أبدا استخدام المدخلات (). أنه سوف يذهب بعيدا في بيثون 3.0 (سيتم إعادة تسمية السلوك raw_input في المدخلات).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top