如何比较python

时间:2018-03-18 07:45:50

标签: python comparison

不知道怎么写标题。

所以有这个游戏我试图在python中编码。

随机生成的具有不同数字的4位数字将与相同属性的用户输入数字进行比较。(4位数,不同数字)

是否有一种简短的方法可以比较两个数字以评估并向用户返回以下内容:

1)两个数字中两个数字相同的小数位数匹配多少位数。

2)在两个不同小数位的数字中,有多少位数匹配。

上述条件1的输出为+1,条件2的输出为-1;说明;正确位置的“+”符号和“+”后面的后面的数字表示正确的位置数字; “ - ”表示错误的地方,而“ - ”符号后面的数字是针对要猜到的数字中错位的数字。

示例:对于计算机编号1234

猜测1:1572 feedback1:+1 -1

猜猜2:1039 feedback2:+2 -0

猜猜3:1243 feedback3:+2 -2

这一直持续到反馈为+4 -0,这会让用户猜到x次尝试中的数字,他/她是一个完全白痴:)

我在70个编码行(只是第一个猜测比较部分)中这样做了,因为我不知道关于编码的第一件事,我相信有更好的方法来做到这一点。有几次我不得不将数字转换为字符串并返回整数。

最有可能的是,我不知道使用它的命令以及如何使用它来简化事情,所以我差不多/ if elif / else将整个事情逐一展开。(几乎强调:) :)什么的我知道,我从网上和这里的python文档中学到了东西。但对于像我这样的初学者来说,找到合适的东西会有点麻烦,尤其是当你真的不知道自己在寻找什么的时候:)所以请不要“你应该读”我。无论如何,我都会阅读。

有人能告诉我适当的简短方法吗?只是比较/测试两个数字部分就足以让我更乐观了。

# 4 digit number guessing game

import random, sys
import pygame as pg # not used
from pygame.locals import * #not used
import time
import os#realized later on that if this is not there, I can't specify a 
ValueError.


#pygame init()not necessary for the time being
global tahmin#don't know why I put this here. tried to overcome the error I 
got saying the variable is referenced before it is assigned by changing the 
variable into a global one. But did not work unless I wrote this line into 
the function it is called. But since no harm done, I kept it here.
global sayı#same as above

def pick():#computer picks a number between min and max different 4 digit 
range.
    global sayı#above mentioned story
    sayı = random.randint(1023, 9876)
    sayı = str(sayı)

def testpick(): #testing the number generated by the computer for different 
digits
    while True:
        if sayı[0] == sayı[1] or sayı[0] == sayı[2] or sayı[0] == sayı[3] or sayı[1] == sayı[2] or sayı[1] == sayı[3] or sayı[2] == sayı[3]:    
            print("geçersiz sayı")#invalid number
            print("değiştiriyorum")#changing the number
            pick()
            print(sayı[0]+sayı[1]+sayı[2]+sayı[3])#just for testing for 
myself
        else:
            #tahmin_gir() cancelled
            print("Sayımı tuttum")#Picked my number
            break

def tahmin_gir():#input guess function
    global tahmin#same story above
    try:#make sure it is a number
        tahmin = int(input("Tahminini gir==>"))
    except ValueError:
        print("Sadece sayı girebilirsin!")
        tahmin_gir()


def tahmin_test():#test the guess function
    global tahmin#blody global same story above
    tahmin_gir()
    if tahmin >= 1023 and tahmin <= 9876:
        tahmin = str(tahmin)
        if tahmin[0] == tahmin[1] or tahmin[0] == tahmin[2] or tahmin[0] == tahmin[3] or tahmin[1] == tahmin[2] or tahmin[1] == tahmin[3] or tahmin[2] == tahmin[3]:
            print("Basamaklar birbirinden farklı olmalı!")#Digits must be 
different
            tahmin_test()
    elif tahmin < 0:
        print("Pozitif bir sayı gir !")#must be positive number
        tahmin_test()   
    else:
        print("Sayı 4 basamaklı olmalı !")#must be 4 digits
        tahmin_test()

print("Lütfen adını gir ve enter'a bas.")#name and enter

ad = input()
# mics. explaining the game below
print("Merhabalar! " + ad + " 4 basamaklı, basamakları birbirinden farklı 
bir sayı tuttum.")

print("Bakalım kaç denemede bulabileceksin.")

print("Sana her tahmininden sonra geri bildirimler yapacağım.")

print("Örneğin tuttuğum 1234 sayısı için, senin yaptığın tahmin 1562 
olsun.")

print("Benim sana cevabım +1 -1 olacaktır. Bunun anlamı, tahmininde 1 adet 
doğru sayı doğru yerde,")
print("1 adet de, doğru sayı yanlış yerde. Yani tahmininde baştaki 1 sayısı 
hem sayımın içinde var, hem de yeri")
print("doğru. Bunun için +1. Sondaki 2 sayısı da sayımda var ama yeri doğru 
değil. Bunun için de -1")

print("2. tahminde 1249 dediğinizi varsayalım. Buna da +2 -1 olarak yanıt 
vereceğim. Çünkü 2 adet doğru sayı doğru yerde,")
print("1 adet doğru sayı yanlış yerde.")
input("Hazır olduğunda <Enter>a bas.") # hit enter when ready


pick()  

print(sayı[0]+sayı[1]+sayı[2]+sayı[3])#testing for me

testpick()

tahmin_test()

print("Bir saniye, hesaplıyorum...")# calculating effect pause
time.sleep(3)

tahmin = str(tahmin)
sayı = str(sayı)
#below x a b y are not used. Was planned to be used but wasn't.
x = 0
a = 0
b = 0
d = 0
y = 0
dsdy = 0#right number right place variable
dsyy = 0#right number wrong place variable 1
dsyy1 = 0#right number wrong place variable 2
abc = 0#another variable to sum dsyy and dsyy1 variables

test_sayısı = [sayı[0], sayı[1], sayı[2], sayı[3]]# for me to see
print(test_sayısı)#for me to see

test_tahmini = [tahmin[0], tahmin[1], tahmin[2], tahmin[3]]#for me to see
print(test_tahmini)#for me to see

for d in range(0, 4):# test the corresponding respective digits for matches
    d = int(d)
    if sayı[d] == tahmin[d]:
        dsdy = int(dsdy) + 1

#print("dyds yok maalesef")
for d in range(1,4): # test the first three combinations for matched digits 
in wrong decimal places
    if sayı[0] == tahmin[d]:#test 
        dsyy1 = int(dsyy1) + 1
    else:
        continue

def sontest():# test all the remaining combinations, which I could not form 
into a logical loop so the below stupidity.
    global dsyy
    if sayı[1] == tahmin[0]:
        dsyy = int(dsyy) + 1
    else:
        dsyy = int(dsyy)
    if sayı[1] == tahmin[2]:
        dsyy = int(dsyy) + 1
    else:
        dsyy = int(dsyy)
    if sayı[1] == tahmin[3]:
        dsyy = int(dsyy) + 1
    else:
        dsyy = int(dsyy)
    if sayı[2] == tahmin[0]:
        dsyy = int(dsyy) + 1
    else:
        dsyy = int(dsyy)
    if sayı[2] == tahmin[1]:
        dsyy = int(dsyy) + 1
    else:
        dsyy = int(dsyy)
    if sayı[2] == tahmin[3]:
        dsyy = int(dsyy) + 1
    else:
        dsyy = int(dsyy)
    if sayı[3] == tahmin[0]:
        dsyy = int(dsyy) + 1
    else:
        dsyy = int(dsyy)
    if sayı[3] == tahmin[1]:
        dsyy = int(dsyy) + 1
    else:
        dsyy = int(dsyy)    
    if sayı[3] == tahmin[2]:
        dsyy = int(dsyy) + 1    
    else:
        dsyy = int(dsyy)    
    if sayı[0] == tahmin[1]:
        dsyy = int(dsyy) + 1
    else:
        dsyy = int(dsyy)    
    if sayı[0] == tahmin[2]:
        dsyy = int(dsyy) + 1
    else:
        dsyy = int(dsyy)    
    if sayı[0] == tahmin[3]:
        dsyy = int(dsyy) + 1    
    else:
        dsyy = int(dsyy)

sontest()
abc = int(dsyy1) + int(dsyy)    
print("+" + str(dsdy))
print("-" + str(abc))
input("Press <Enter> to continue")

print ("afferim len dümbük !")
quit()

1 个答案:

答案 0 :(得分:0)

如评论所述:这不是你应该在这里问一个问题的方式。你需要展示一些(编码)努力。请带tour, 阅读how to ask a question 并提供minimal, complete and verifiable example 这再现了你的问题。

然而,我对如何解决这个问题感兴趣;这是我的尝试。我使用collections.Counter以允许重复的数字。这些都没有经过彻底的测试,但是应该让你开始。

from collections import Counter

def compare(n, guess):
    not_matching_digits = Counter(guess) - Counter(n)
    matching_digits = len(n) - sum(not_matching_digits.values())
    right_place = sum(1 for i0, i1 in zip(n, guess) if i0 == i1)
    wrong_place = matching_digits - right_place
    return right_place, - wrong_place