Re: Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)
ur_naz написав:while True:
ur_naz, а тепер заґуґли стрічку
Python do while loop
і почитай, що в документації написано.
Документацію читати - не по лобу стукати.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Python → Простенькі програми для новачків. (ТІЛЬКИ ДЛЯ НОВАЧКІВ)
Сторінки Попередня 1 2 3 4 Наступна
Для відправлення відповіді ви повинні увійти або зареєструватися
ur_naz написав:while True:
ur_naz, а тепер заґуґли стрічку
Python do while loop
і почитай, що в документації написано.
Документацію читати - не по лобу стукати.
пропонуєте костиляйзер? це погано, але тут дещо інша історія
чи вам не зрозуміла різниця і кінцевим циклом і безкінцевим?
чи вам не зрозуміла різниця і кінцевим циклом і безкінцевим?
В конкретному випадку коли виконання циклу повинно завершитись при натисканню на клавішу '0' я ту різницю не вважаю принциповою.
Пане ur_naz, в Python немає окремого оператора циклу з післяумовою, і while True: ... if ...:break - рекомендований спосіб робити такі цикли. Нащо ви людям погане радите?
то може поясните, що робить while True:
В конкретному випадку
і як це зрозуміти
то може поясните, що робить while True:
В конкретному випадку
і як це зрозуміти
while True то безкінесний цикл. З котрого в даному випадку виходиться за допомогою конструкції
if char == '0':
break
Якщо ж би у нас був цикл котрий би сам змінював змінну char і мав би завершуватися коли змінна би набула якогось значення то булоб до цільніше використовувати
while (char ==x):
але в цьому випадку змінну char змінює користувач
char = getch.getch()
гарний код не повинен зобов'язувати заглиблюватись в себе. а у вас цей принцип не діє. в подальшому це призведе до великих проблем з кодом
#!-*- coding:utf-8 -*-
import getch# встановити pip install getch модуль для зчитування однієї натиснутої клавіші
import random #запускаю модуль рандом(уже є в пітоні, якщо немає треба встановити)
"""
Програма рандомно виводить на екран або аверс або реверс(Орел чи Решка)
"""
while True: # Безкінечна петля
print('-' * 50)
print(random.choice(['АВЕРС','РЕВЕРС']).center(50,'-'))#Рандомний вибір реверс-аверс
print('-' * 50)
print('Натисніть любу клавішу щоб підкинути монету натисніть 0 щоб вийти')#Запрошуємо користувача натиснути на клавішу
continue_game = getch.getch()#Зчитуємо яку клавішу натиснув користувач і записуєм в змінну continue_game
if continue_game == '0':#...Якщо натиснуто 0...
break#То вийти з цикла
#Інакше продовжуєм
гарний код не повинен зобов'язувати заглиблюватись в себе. а у вас цей принцип не діє. в подальшому це призведе до великих проблем з кодом
Вам уже сказали: це особливість Python - цикли з післяумовою об'єднані з циклами з виходом усередині, які, хоч і є структурними, але, здається, не мають власної конструкції будь-де. Тут немає більшого заглиблення і не буде, а наявне є типовим і рекомендованим. Нащо ви людям голови дурите?
Пане Irbis дозволив собі модифікувати. Надіюсь ви не проти.
#!-*- coding:utf-8 -*- import getch# встановити pip install getch import random #запускаю модуль рандом(уже є в пітоні, якщо немає треба встановити) while True: print('-' * 50) print(random.choice(['АВЕРС','РЕВЕРС']).center(50,'-')) print('-' * 50) char = getch.getch() if char == '0': break
нічого не зрозумів але дуже цікаво.
якщо не важко, що таке getch(бо я дивився англомовні відео, але з англійською
not very)
Є така чудова функція random.choice.
print('-' * 50) print(random.choice(['АВЕРС','РЕВЕРС']).center(50,'-')) print('-' * 50)
ви праві, так код набагато менший
Вам уже сказали: це особливість Python
от пан Аверс Ірбіс усе розуміє, а ви ні...
А тепер знайдите помилки тут:
import random #запускаю модуль рандом(уже є в пітоні, якщо немає треба встановити)
def WantToPlay():
return '0' != input('Натистіть Enter - щоб підкинути монету ще , 0 - щоб вийти')
def PlayGame():
side = random.choice(['АВЕРС','РЕВЕРС'])
# ???
print('-' * 50)
print(side.center(50,'-'))
print('-' * 50)
################################################################################
while WantToPlay():
PlayGame()
Воно пише "ще", хоча ще жодного разу не підкидало. Хай запитує після першого підкидання - ніби очевидно, що якщо людина запускає програму, то хоче підкидання, немає сенсу питати перед ним.
Я натискаю 0, але воно не виходить, доки я не натисну Enter. А Enter - це ніби-то підкидання монети.
Натискання Ctrl+C призводить до виходу, але цього ніде не сказано.
Натискання 0,0,Enter чомусь призводить до підкидання. Як і будь-якої іншої комбінації, крім 0,Enter та Ctrl+C. А написано лише про Enter.
До останніх пунктів я б не чіплявся, якби це була програма початківця, який тільки почав вивчати програмування.
То проблеми рефакторінгу. Не суттєво. Я б сказав би, якби до цього "програма" не підкидала б без моєї згоди.
Слушно. І виходить що вся архітектура не вірна. треба чекати не на символ, а на keyPressed.
1.То проблеми рефакторінгу. Не суттєво. Я б сказав би, якби до цього "програма" не підкидала б без моєї згоди.
Ні. Рефакторінг - це зміна коду без зміни поведінки. Зайвий запит згоди користувача - це зміна поведінки. Це якраз суттєво, бо ви саме через це почали цю суперечку. Ви не ту задачу розв'язуєте.
2. Слушно. І виходить що вся архітектура не вірна. треба чекати не на символ, а на keyPressed.
А оце, як на мене, якраз треба виправляти в документації/повідомленнях. Тобто замість "0-вихід, Enter-ще раз" треба написати "введіть 0 для виходу чи що завгодно (або нічого), щоб повторити, і натисніть Enter".
я почав суперечку не з цього приводу. ІК я навіть не чипав. Хоча мабуть з цього потрібно було почати:
1. Програма повинна привітатись і розказати коротко про те, для чого вона і що робить.
2. Програма повинна отримати згоду на початок роботи
Бо якщо вона форматувала б диски уявляєте наслідки?
Форматувати ще один диск?
ок.ща буде версія 2.0
import random #запускаю модуль рандом
print('***ця програма зможе вирішити будь-яку суперечку***') #ознайомлення користувача
while (True): #безкінечний цикл
if (input('---БАЖАЄТЕ ПІДКИНУТИ МОНЕТКУ?---(YES - a/NO - Ctrl+c)') == 'a'): #якщо натиснуто"а", то цикл виконується
print('-' * 50)
print(random.choice(['АВЕРС','РЕВЕРС']).center(50,'-')) #програма рандомно вибирає одне з двох значень, і виводить на екран
print('-' * 50)
#цикл повторюється, комп'ютер чекає відповідь користувача - продовжити цикл, чи завершити.