- 18
- 국내산라이츄
- 조회 수 708
import random
pt=random.sample(range(1,10),3)
#import random이 없으면 오류를 토해내는 듯 하다.
tried = 0
strike = 0
ball = 0
##########
print("별로 신나지 않을 것 같지만 신난다는 숫자 야구 게임!")
while(strike<3):
num = input("숫자를 입력해주세요: ")
if(num[0]==num[1]==num[2]):
print("아 님아 중복 자제요...")
tried +=1
continue
elif(num[0]==num[1]):
print("아 님아 중복 자제요...")
tried +=1
continue
elif(num[0]==num[2]):
print("아 님아 중복 자제요...")
tried +=1
continue
elif(num[1]==num[2]):
print("아 님아 중복 자제요...")
tried +=1
continue
else :
pass
#중복된 숫자를 입력할 시 댓츠노노
strike = 0
ball = 0
for i in range(0,3):
for j in range(0,3):
if(num[i]==str(pt[j]) and i == j):
strike += 1
elif(num[i]==str(pt[j]) and i != j):
ball += 1
print (strike,"스트라이크", ball,"볼")
tried += 1
print("오 님",tried,"번 만에 클리어하셨네요.")
파이썬 숫자 야구인데...
초록색 글씨는 잘 됩니다. 중복으로 숫자를 치면 중복으로 치지 말라는 문구가 나와요.
근데 밑에 코드가 문제입니다. 숫자를 입력하면 몇스트라이크 몇볼 이렇게 나와야 정상인데 안 나와요.
이런 상태예요.
코드에 뭐 문제 있나요? 이거 여기 참고해서 한건데;;
작성자
댓글 18
humit 님은 아니지만 잠깐 짬을 내서 올려보네요 ^^
import random pt=random.sample(range(1,10),3) #import random이 없으면 오류를 토해내는 듯 하다. tried = 0 strike = 0 ball = 0 ########## print("별로 신나지 않을 것 같지만 신난다는 숫자 야구 게임!") while(strike<3): num = input("숫자를 입력해주세요: ") if(num[0]==num[1]==num[2]): print("아 님아 중복 자제요...") tried +=1 continue elif(num[0]==num[1]): print("아 님아 중복 자제요...") tried +=1 continue elif(num[0]==num[2]): print("아 님아 중복 자제요...") tried +=1 continue elif(num[1]==num[2]): print("아 님아 중복 자제요...") tried +=1 continue else : pass #중복된 숫자를 입력할 시 댓츠노노 strike = 0 ball = 0 for i in range(0,3): for j in range(0,3): if(num[i]==str(pt[j]) and i == j): strike += 1 elif(num[i]==str(pt[j]) and i != j): ball += 1 print (strike,"스트라이크", ball,"볼") tried += 1 print("오 님",tried,"번 만에 클리어하셨네요.")
제 생각에는 파이썬에서 고질적으로 발생하는 들여쓰기 문제인 것 같은데요~
일단 위에 올린 코드로 잘 작동합니다 ^-^
제 개인적인 생각을 조금 덧붙이자면 if 문은 or 연산자를 활용해서 좀 더 간명하게 줄일 수 있을 것 같구요 :)
(솔직히 저도 그다지 코드를 간명하게 작성하는 편은 아니지만요 ㅎㅎ)
그리고 입력받는 숫자를 3글자로 한정하도록 해야될 것 같네요 ^^
random 모듈은 반드시 import 하셔야 되구요~
그럼 두 분 모두 편안한 저녁 되세요!
if len(num) != 3: print("아 님아 세 자리 숫자요...") tried +=1 continue
while 문 앞부분에 대략 이 정도 추가하시면 좋지 않을까요??
저도 요새 정신없이 바빠서 제가 말씀드린 부분이 정확한지 잘 모르겠지만
제가 테스트해보니 일단 잘 작동하는 것 같아요 ^^;
num = input("숫자를 입력해주세요: ") if len(num) != 3: print("아 님아 세 자리 숫자요...") tried +=1 continue if(num[0]==num[1] or num[0]==num[2] or num[1]==num[2]): print("아 님아 중복 자제요...") tried +=1 continue else : pass
while 문의 앞부분을 대략 이런 방식으로 수정하시면 어떨까요? ^^
오! for 문이 while 문 안에 들어있어야 하는 군요!
독일어는 관사가 가장 어렵고, 파이썬은 들여쓰기가 가장 어렵습니다
반복문이 프로그래밍 학습을 할 때 비교적 초반에 배우면서도, 굉장히 응용할 곳이 많고 동시에 어려운 것 같아요 ㅠㅠ
얼마 전에 SIR에서도 파이썬으로 엑셀을 조작하는 멋진 스크립트가 작동 안 된다고 Q&A가 올라왔는데
제가 확인해보니 그것도 들여쓰기 문제더군요 ㅎㄷㄷ
저는 구 세대의 BASIC을 다루듯이 파이썬을 하는 고질적인 문제가 있어서
humit 님이나 네모 님처럼 IT 직역에서 근무하시는 분께서 보다 간결하고 파이썬다운 스크립트를 작성해주실 것 같네요 ^^
여담이지만 만약 기회가 닿는다면 다음번에는 (시대에 역행하는 것 같긴 하지만) 델파이를 배워보고 싶네요 :)
마스터 님~ 혹시 그누나 RXE 용으로 숫자야구 게임 만들면 수요가 있을까요?? ^^
(물론 SIR에 조금 다른 스타일이긴 하지만 포인트 야구 게임이 있지만요)
아무래도 모바일에서 하려면 조금 귀찮을까요? ㅠㅠ
RXE에 하나 있더군뇽
포인트와 연동된 게임이라면 뭐든지 환영입니다.
커뮤니티라는게 상대적으로 포인트가 쌓이면 사용처가 많지 않기 때문에(여기도 마찬가지 입니다.) 수요는 꽤 있을 것으로 예상됩니다.
하지만 상당한 가격의 유료라면 오히려 메리트가 떨어집니다. 실제로 몇몇 포인트 게임들이 고가로 책정되서 나왔다가 구매자가 없는 상황도 있었습니다.
완성도 있게 포인트와 연동이 된 게임이라면 수요는 많을 것으로 생각됩니다.
그렇군요! 맛스타 님 말씀대로 샵이 아니라 일반 커뮤니티에서는 포인트가 사용될 곳이 많지 않겠네요 ㅠㅠ
솔직히 저는 유료로 개발을 할 실력도 안 되고 그럴 계획도 없습니다 T.T
제가 숫자야구게임(진짜 야구를 보는 것은 좋아하네요)을 안 좋아하기 때문에
다른 분들마저도 관심이 없으시다면 개발의 의미가 전혀 없을 것 같아서 여쭤본 것이었어요 ㅠㅠ
모바일에서는 숫자를 키패드로 입력하기는 번거로울 것 같아서
정확한 명칭은 모르겠지만 피커(?) 내지 슬라이더(?)로 구현해야 할 것 같네요.
제가 당장은 여유가 없지만 시간이 날 때 우선적으로
운영자가 원하는대로 승률을 조작할 수 있는 가위바위보 게임부터 만들어볼 계획입니다 ^-^
기대하겠습니다~
파이썬 들여쓰기 무엇... ㄷㄷ
요즘 바빠서 제대로 확인을 하지 못했었네요.
코드를 좀 더 손을 본다면 다음과 같이 할 수 있습니다.
1. tried 부분이 계속 중복되기 때문에 해당 부분을 위쪽으로 빼면 한 번만 작성해도 됩니다.
2. else를 제외한 모든 조건문이 같은 역할을 하기 때문에 or로 묶어서 처리하면 됩니다. 또한 1번째 조건의 경우 2, 3, 4번째 조건이 모두 성립하면 성립하는 내용이기 때문에 굳이 써주지 않아도 되는 조건입니다.
3. 파이썬에서 조건문을 기술 할 때는 괄호를 사용하지 않습니다. (C, Java와 다릅니다!)
4. 추가로 현재는 숫자만 입력했는지 체크를 하기 위해서 일일히 비교하는 방식으로 했는데 정규식을 사용하면 훨씬 쉽게 하실 수 있습니다.
5. 또한 문자열로 계속 바꾸는 연산도 불필요한 연산이기 때문에 처음에 값을 생성할 때부터 문자열 형태로 생성하는 방식을 사용하였습니다.
+ 추가로 탭보다는 공백 4개로 쓰는 것을 권장하고 있습니다. (https://www.python.org/dev/peps/pep-0008/#tabs-or-spaces)
+ 또한 들여쓰기도 탭과 공백을 섞어서 쓰면 에러가 발생하기 때문에 주의하셔야 합니다.
import random numbers = '123456789' pt=random.sample(numbers, 3) # import random이 없으면 오류를 토해내는 듯 하다. tried = 0 strike = 0 ball = 0 ########## print("별로 신나지 않을 것 같지만 신난다는 숫자 야구 게임!") while strike < 3: num = input("숫자를 입력해주세요: ") tried += 1 # 3개를 입력했는지 체크 if len(num) != 3: print("3개가 아니네요...") continue # 숫자만 입력했는지 체크 elif num[0] not in numbers or num[1] not in numbers or num[2] not in numbers: print("숫자가 아니네요...") continue # 중복된 숫자를 입력할 시 댓츠노노 elif num[0] == num[1] or num[1] == num[2] or num[2] == num[0]: print("아 님아 중복 자제요...") continue strike = 0 ball = 0 for i in range(0,3): for j in range(0,3): if num[i] == pt[j] and i == j: strike += 1 elif num[i] == pt[j] and i != j: ball += 1 print(strike, "스트라이크", ball, "볼") print("오 님", tried, "번 만에 클리어하셨네요.")
(이때는 대략 정신이 멍해집니다)
그 if 조건문에 괄호 안 들어가는거 3.0도 똑같죠?
네 Python3를 기준으로 작성한 코드입니다.
오오~ humit 님 덕분에 많이 배우네요 ^-^
조건문에서 괄호는 조건을 여러 행에 걸쳐서 입력하는 경우에만 사용하면 되는 것이군요!
그리고 전혀 무관한 내용이지만 Kivy에서 Buildozer로 안드로이드 APK를 만드는 것이
안드로이드 스튜디오에서 자바나 Kotlin을 사용하는 것에 비해서 어느 정도 완성도가 있다고 생각하시는지 여쭤봅니다 :)
제가 네이티브나 하이브리드나 모바일 앱 개발에 대해서는 전혀 아는 것이 없는데요 ㅠㅠ
요새는 모바일 세상으로 완전히 넘어간 것 같아서 모바일 앱 개발을 조금이라도 공부해야 될 것 같더군요 ㄷㄷ
Kivy로 거의 해결이 된다면 파이썬을 더 깊이 공부해보고,
만약 그렇지 않다면 Kotilin을 공부해보려고 생각하고 있어서요~ ㅠㅠ
오늘 폭염주의보도 발령되었고 날씨도 슬슬 더워지는데
humit 님께서도 바쁘시겠지만 항상 건강하시길 기원합니다 :)
+) Xamarin의 완성도에 대해서는 어떻게 생각하시는지도 여쭤봅니다 ^^
Kivy는 사용해보지 않아서 잘 모르겠네요... 비슷하게 하이브리드 앱의 일종인 Ionic을 사용해본 적이 있긴 합니다.
장점을 말하자면 Android나 Apple에 상관없이 한 번에 개발이 가능하다는 장점이 있었습니다. 즉 안드로이드용 코드를 따로 작성하고, 아이폰용 코드를 또 따로 작성할 필요가 없다는 점입니다.
단점이 좀 크긴 했는데, 성능이 네이티브 앱에 비해서 훨씬 느리다는 점이 있었습니다. 단순히 웹페이지를 띄워주는 형태로 되면 모를까 뷰플리퍼와 같은 괜찮게 보이는 UI로 짜게 되면 성능이 확 떨어지는 것이 체감이 될 정도였습니다. 또한 Garbage Collecting이 제대로 일어나지 않아서 메모리 문제 때문에 앱이 죽는 경우도 가끔 있었습니다.
물론 이게 4년전...일이라 지금은 어느정도 많이 개선된 것으로 알고 있습니다.
해당 프레임워크가 자주 업데이트가 된다면 하이브리드 앱 프레임워크를 사용하는 것도 괜찮습니다.
Kivy에 대해 github 페이지를 봐보니 거의 매일마다 업데이트가 되고 있군요 ㅎㅎㅎ
그리고 사람들이 많이 사용할 수록 발생한 문제에 대한 해답을 찾기가 쉬워진다는 점도 고려해보실 필요가 있습니다 :)
빠른 개발 속도와 멀티 플랫폼을 쉽게 지원한다는 점 때문에 스타트업에서도 하이브리드 앱으로 제작을 많이 합니다.
즉 결과물을 빨리 만들어 내야 하거나 아니면 엄청난 성능을 요구하는게 아니라면 하이브리드 앱을 해보는 것도 괜찮습니다.
옙 바쁘신데 상세한 설명 정말 감사드립니다!
실무적으로 하이브리드 앱도 많이 사용되고 있군요~
지금 구상하고 있는 앱이 무료로 공개할 앱이고 간단한 작동만 가능하면 되는 앱이라서
성능이 떨어지는 것이 체감이 되더라도 큰 문제는 없을 것 같아서
조언해주신대로 일단 하이브리드 앱으로 만들어보겠습니다 ^-^
다만 mp3 파일을 재생해야 되는데 이 분야와 관련해서는 파이썬 라이브러리가 살짝 부족한 것 같네요~
pygame을 이용하면 mp3 파일의 간단한 조작은 가능한 것 같은데 완벽한 것 같지는 않더군요 ㅠㅠ
그럼 즐거운 불금 되시고 좋은 주말 되세요!
다시 한 번 감사드립니다 :)
@humit님 이 도와주실줄 알았으나 아직 도움의 손길이 없군용?
저도 궁금하네요.