Python bir harfni aniqlay olmadi, lekin ikkita harf aniqlandi

Bir satrda harflar mavjudligini aniqlash uchun foydalanadigan kod. Hech kim aniqlanmasa, dasturni mag'lubiyatga almashtirishga imkon beradi. Fikr shundan iboratki, men dasturni shriftlarga xat bilan harflar bilan almashtirishga urinib bo'lgandan so'ng to'xtatishim mumkin.

for i in range(1, len(argument)):
    if argument[i].isalpha():
        return False
        print("Ran option 1")
    else:
        return True
        print("Ran option 2")

Chizma chiziqlar faqatgina qaysi qismi amalga oshirilayotganini ko'rishimga yordam beradi. Ma'lum bo'lishicha, ulardan ikkitasi ham yo'q.

http://puu.sh/ivVI7/8598b82fe8.png

Bu chiqishning ekran tasviridir. Birinchi yarmida u "aa" qatorini aniqlaydi va kodni buzmaydi. Biroq, ikkinchi yarmida, u bitta "a" ni aniqlay olmadi va dasturni ishdan chiqarib yubordi. Agar kimdir qarz berolmasa, buning uchun juda minnatdor bo'lardi.

If it helps, the rest of the code is here: http://pastebin.com/Cx7HbM4c

0
Faqat bir urinib ko'ring/foydalaning va ValueErrorni qo'lga oling
qo'shib qo'ydi muallif Padraic Cunningham, manba
Faqat bir urinib ko'ring/foydalaning va ValueErrorni qo'lga oling
qo'shib qo'ydi muallif Padraic Cunningham, manba
Faqat bir urinib ko'ring/foydalaning va ValueErrorni qo'lga oling
qo'shib qo'ydi muallif Padraic Cunningham, manba
Iltimos, matnli matn chiqishi tasvirlarini joylashtirmang. Chiqarishni postingizga nusxalash.
qo'shib qo'ydi muallif usr2564301, manba
Iltimos, matnli matn chiqishi tasvirlarini joylashtirmang. Chiqarishni postingizga nusxalash.
qo'shib qo'ydi muallif usr2564301, manba

12 javoblar

return buyrug'idan so'ng print qatorlari mavjud, shuning uchun ular hech qachon bajarilmaydi. return bosib chiqarish ustida harakatlantiring.

Bundan tashqari siz kodingizni yanada pitonik va o'qiy olishingiz mumkin:

for char in argument:
   return char.isalpha()
3
qo'shib qo'ydi

return buyrug'idan so'ng print qatorlari mavjud, shuning uchun ular hech qachon bajarilmaydi. return bosib chiqarish ustida harakatlantiring.

Bundan tashqari siz kodingizni yanada pitonik va o'qiy olishingiz mumkin:

for char in argument:
   return char.isalpha()
3
qo'shib qo'ydi

return buyrug'idan so'ng print qatorlari mavjud, shuning uchun ular hech qachon bajarilmaydi. return bosib chiqarish ustida harakatlantiring.

Bundan tashqari siz kodingizni yanada pitonik va o'qiy olishingiz mumkin:

for char in argument:
   return char.isalpha()
3
qo'shib qo'ydi

Python satrlari 0-ga asoslangan. Sinov hech qachon simondagi birinchi belgini tekshirmaydi.

for i in range(0, len(argument)):

Ushbu ma'lumotni uzatish yo'li bilan, python yo'li (@ argumentda kod uchun argument ning ) @DeepSpace va @helmbert dan olingan javoblarni tozalaydi.

2
qo'shib qo'ydi
Buni tuzatgan ko'rinadi. Rahmat!
qo'shib qo'ydi muallif Sam Cartwright, manba

Python satrlari 0-ga asoslangan. Sinov hech qachon simondagi birinchi belgini tekshirmaydi.

for i in range(0, len(argument)):

Ushbu ma'lumotni uzatish yo'li bilan, python yo'li (@ argumentda kod uchun argument ning ) @DeepSpace va @helmbert dan olingan javoblarni tozalaydi.

2
qo'shib qo'ydi
Buni tuzatgan ko'rinadi. Rahmat!
qo'shib qo'ydi muallif Sam Cartwright, manba

Python satrlari 0-ga asoslangan. Sinov hech qachon simondagi birinchi belgini tekshirmaydi.

for i in range(0, len(argument)):

Ushbu ma'lumotni uzatish yo'li bilan, python yo'li (@ argumentda kod uchun argument ning ) @DeepSpace va @helmbert dan olingan javoblarni tozalaydi.

2
qo'shib qo'ydi
Buni tuzatgan ko'rinadi. Rahmat!
qo'shib qo'ydi muallif Sam Cartwright, manba

Pythonda qatorlar nol-endeksli dir. Buning ma'nosi: 1-da emas, balki 0 da yinelemelisiniz!

Buni osonlikcha print (argument [i]) qo'shishingiz mumkin.

def func(argument):
    for i in range(1, len(argument)):
        print(argument[i])

func("a") # Prints nothing
func("ab") # Prints "b"

Asl kodingizni iloji boricha yaqindan kuzatib turing, 1dan o'rniga 0 dan boshlab yineleyin:

for i in range(0, len(argument):
    # ...

Bundan ham oson, siz to'g'ridan-to'g'ri mag'lubiyatni qaytarishingiz mumkin :

for character in argument:
    print(character) # Will print every single character
    # ...
1
qo'shib qo'ydi

Pythonda qatorlar nol-endeksli dir. Buning ma'nosi: 1-da emas, balki 0 da yinelemelisiniz!

Buni osonlikcha print (argument [i]) qo'shishingiz mumkin.

def func(argument):
    for i in range(1, len(argument)):
        print(argument[i])

func("a") # Prints nothing
func("ab") # Prints "b"

Asl kodingizni iloji boricha yaqindan kuzatib turing, 1dan o'rniga 0 dan boshlab yineleyin:

for i in range(0, len(argument):
    # ...

Bundan ham oson, siz to'g'ridan-to'g'ri mag'lubiyatni qaytarishingiz mumkin :

for character in argument:
    print(character) # Will print every single character
    # ...
1
qo'shib qo'ydi

Ok, agar siz tekshirib ko'rmoqchi bo'lsangiz, mag'lubiyatni o'zgartirasizmi yoki yo'qmi, nima uchun bunday funktsiyani ishlatmaysiz:

def convertable(value): 
    try: 
        float(value)
        return True
    except ValueError:
        return False
1
qo'shib qo'ydi

Ok, agar siz tekshirib ko'rmoqchi bo'lsangiz, mag'lubiyatni o'zgartirasizmi yoki yo'qmi, nima uchun bunday funktsiyani ishlatmaysiz:

def convertable(value): 
    try: 
        float(value)
        return True
    except ValueError:
        return False
1
qo'shib qo'ydi

agar xohlasangiz, dasturingiz to'xtab qolishiga yo'l qo'ymaslik uchun, istisnolar sizning do'stlaringizdir:

argument = "abc"
try:
    value = float(argument)
except ValueError as e:
    print e, "is unacceptable"
else:
    print value, "is acceptable as a float"
finally:
    print "alright"

ezilgan:

could not convert string to float: abc is unacceptable
alright

whereas, if argument = "3.14" it ezilgan:

3.14 is acceptable as a float
alright

Albatta, siz ushbu dasturni bir necha marotaba bajarishingiz kerak bo'lsa, ushbu mantiqni funktsiyaga qo'yishingiz mumkin. Maza qiling!

0
qo'shib qo'ydi
Boshqa va nihoyat kerak emas.
qo'shib qo'ydi muallif Padraic Cunningham, manba
albatta. Men ularni o'z xatti-harakatlarini namoyish qilish uchun qo'shib qo'ydim, shuning uchun u o'z kodini to'g'ri tarzda tuzishi mumkin.
qo'shib qo'ydi muallif Pynchia, manba

agar xohlasangiz, dasturingiz to'xtab qolishiga yo'l qo'ymaslik uchun, istisnolar sizning do'stlaringizdir:

argument = "abc"
try:
    value = float(argument)
except ValueError as e:
    print e, "is unacceptable"
else:
    print value, "is acceptable as a float"
finally:
    print "alright"

ezilgan:

could not convert string to float: abc is unacceptable
alright

whereas, if argument = "3.14" it ezilgan:

3.14 is acceptable as a float
alright

Albatta, siz ushbu dasturni bir necha marotaba bajarishingiz kerak bo'lsa, ushbu mantiqni funktsiyaga qo'yishingiz mumkin. Maza qiling!

0
qo'shib qo'ydi
Boshqa va nihoyat kerak emas.
qo'shib qo'ydi muallif Padraic Cunningham, manba
albatta. Men ularni o'z xatti-harakatlarini namoyish qilish uchun qo'shib qo'ydim, shuning uchun u o'z kodini to'g'ri tarzda tuzishi mumkin.
qo'shib qo'ydi muallif Pynchia, manba
Python
Python
372 ishtirokchilar

Bu guruh python dasturlash tilini muhokama qilish uchun. Iltimos, o'zingizni hurmat qiling va faqat dasturlash bo'yicha yozing. Botlar mavzusini @botlarhaqida guruhida muhokama qling! FAQ: @PyFAQ Offtopic: @python_uz_offtopic

Python offtopic group !
Python offtopic group !
150 ishtirokchilar

@python_uz gruppasining offtop gruppasi. offtop bo'lsa ham reklama mumkin emas ) Boshqa dasturlash tiliga oid gruppalar @languages_programming